OSDN Git Service

following event added
authorHirotaka Kawata <hirotaka@techno-st.net>
Sun, 1 May 2011 08:46:10 +0000 (17:46 +0900)
committerHirotaka Kawata <hirotaka@techno-st.net>
Sun, 1 May 2011 08:46:10 +0000 (17:46 +0900)
gwit/main.py
gwit/timelinethread.py
gwit/twitterapi.py

index ec4e39a..ac1f89f 100644 (file)
@@ -448,11 +448,12 @@ class Main(object):
         Config.save_section(conf)
 
     # desktop notify
-    def notify(self, title, text, icon_pixbuf = None):
+    def notify(self, title, text, icon_user = None):
         if USE_NOTIFY:
             notify = pynotify.Notification(title, text)
-            if icon_pixbuf:
-                notify.set_icon_from_pixbuf(icon_pixbuf)
+            if icon_user:
+                icon = self.iconstore.get(icon_user)
+                notify.set_icon_from_pixbuf(icon)
             notify.show()
     
     def refresh_tweet(self, i):
@@ -478,7 +479,7 @@ class Main(object):
     def on_mentions_added(self, i):
         status = self.twitter.statuses[i]
         self.notify("@%s mentioned you." % status.user.screen_name,
-                    status.text, self.iconstore.get(status.user))
+                    status.text, status.user)
     
     # timeline refreshed event
     def on_timeline_refresh(self):
index c309e33..e460057 100644 (file)
@@ -55,23 +55,27 @@ class BaseThread(threading.Thread):
     
     def add_statuses(self, statuses):
         new_statuses = set()
-        
+         
         for i in statuses:
             if isinstance(i, twoauth.TwitterStatus):
+                # Status
                 self.twitter.add_status(i)
                 new_statuses.add(i.id)
+            elif isinstance(i, twoauth.TwitterEvent):
+                # Userstreams Event
+                if "favorite" == i.event:
+                    self.twitter.favorite_event(i.target_object, i.source)
+                elif "unfavorite" == i.event:
+                    self.twitter.unfavorite_event(i.target_object, i.source)
+                elif "follow" == i.event:
+                    self.twitter.follow_event(i.source, i.target)
             else:
-                # deleted, favorited, followed... for StreamingAPI
+                # deleted, friends
                 if "friends" in i:
                     self.twitter.following.update(i["friends"])
                 elif "delete" in i:
                     self.twitter.delete_event(i["delete"]["status"]["id"])
-                elif "event" in i:
-                    if "favorite" == i["event"]:
-                        self.twitter.favorite_event(i["target_object"], i["source"])
-#                    elif "follow" in i["event"]:
-#                        self.twitter.follow_event(i["follow"]["status"]["id"])
-
+        
         new_statuses.difference_update(self.timeline)
         self.on_received_status(new_statuses)
         self.timeline.update(new_statuses)
index 891c6ff..fd4ce49 100644 (file)
@@ -83,21 +83,23 @@ class TwitterAPI(object):
         self.followers.update([int(i) for i in self.api_wrapper(self.api.followers_ids)])
     
     def add_statuses(self, statuses):
-        for i in statuses:
-            self.add_status(i)
+        if isinstance(users, dict):
+            map(self.add_status, statuses.iteritems())
+        else:
+            map(self.add_status, statuses)
     
     def add_status(self, status):
         self.statuses[status.id] = status
         self.add_user(status.user)
         
-        if status.retweeted_status != None:
+        if status.retweeted_status:
             self.add_status(status.retweeted_status)
     
     def add_users(self, users):
         if isinstance(users, dict):
-            self.users.update(users)
+            map(self.add_user, users.iteritems())
         else:
-            self.users.update([(i.id, i) for i in users])
+            map(self.add_user, users)
     
     def add_user(self, user):
         self.users[user.id] = user
@@ -117,18 +119,44 @@ class TwitterAPI(object):
         if i in self.statuses:
             self.statuses[i]["deleted"] = True
             self.on_tweet_event(i)
-
-    def favorite_event(self, tweet, user):
-        if tweet["id"] not in self.statuses:
-            self.statuses[tweet["id"]] = tweet
+    
+    def favorite_event(self, status, user):
+        self.add_status(status)
         
-        if "faved_by" in self.statuses[tweet["id"]]:
-            self.statuses[tweet["id"]]["faved_by"].append(user["id"])
+        if "faved_by" in self.statuses[status.id]:
+            self.statuses[status.id]["faved_by"].append(user.id)
         else:
-            self.statuses[tweet["id"]]["faved_by"] = [user["id"]]
+            self.statuses[status.id]["faved_by"] = [user.id]
+        
+        self.on_notify_event("@%s favorited tweet" % user.screen_name, 
+                             "@%s: %s" % (status.user.screen_name, status.text),
+                             user)
+        self.on_tweet_event(status.id)
+    
+    def unfavorite_event(self, status, user):
+        self.add_status(status)
         
-        self.on_notify_event("@%s favorited your tweet" % user["screen_name"], tweet["text"])
-        self.on_tweet_event(tweet["id"])
+        if "faved_by" in self.statuses[status.id]:
+            try:
+                self.statuses[status.id]["faved_by"].remove(user.id)
+            except ValueError:
+                pass
+        
+        self.on_notify_event("@%s unfavorited tweet" % user.screen_name, 
+                             "%s\n%s" % (status.user.screen_name, status.text),
+                             user)
+        self.on_tweet_event(status.id)
+    
+    def follow_event(self, source, target):
+        self.add_users((source, target))
+        
+        if source.id == self.my_id:
+            self.followers.add(source.id)
+        else:
+            self.following.add(source.id)
+            self.on_notify_event("@%s is following you" % source.screen_name, 
+                                 "%s\n%s" % (source.name, source.description),
+                                 source)
     
     def api_wrapper(self, method, *args, **kwargs):
         for i in range(3):
@@ -167,4 +195,4 @@ class TwitterAPI(object):
     def on_twitterapi_error(self, method, e): pass
     def on_twitterapi_requested(self): pass
     def on_tweet_event(self, i): pass
-    def on_notify_event(self, title, text, icon): pass
+    def on_notify_event(self, title, text, icon_user): pass