def add_status(self, status, overwrite = True): found = self.statuses.get(status.id, None) if not found: self.statuses[status.id] = status elif overwrite: # FIXME: twitter api response is broken? status.retweeted = found.retweeted status.favorited = found.favorited status["faved_by"] = found.get("faved_by", set()) found.update(status) # user self.add_user(status.user) status["user"] = self.users[status.user.id] # hashtag self.hashtags.update(TwitterTools.get_hashtags(status)) # RT if status.retweeted_status: self.add_status(status.retweeted_status, False) status["retweeted_status"] = self.statuses[status.retweeted_status.id]
def menu_setup(self, status): # Get Urls urls = TwitterTools.get_urls(status) urls.extend(TwitterTools.get_media_urls(status)) # Get mentioned users users = TwitterTools.get_user_mentions(status) # Get Hashtags hashes = TwitterTools.get_hashtags(status) # URL Menu urlmenu = gtk.Menu() if urls: # delete multiple urls urls = dict(urls).items() # if exist url in text, add menu for url, display_url in urls: label = "%s..." % display_url[:47] if len(display_url) > 50 else display_url # Menuitem create item = gtk.ImageMenuItem(label) item.set_image(gtk.image_new_from_stock("gtk-open", gtk.ICON_SIZE_MENU)) item.set_always_show_image(True) # Connect click event (open browser) item.connect("activate", self.on_menuitem_url_clicked, url) # append to menu urlmenu.append(item) else: # not, show None item = gtk.MenuItem("None") item.set_sensitive(False) urlmenu.append(item) # Mentioned User Menu usermenu = gtk.Menu() if users: for i in users: # Menuitem create item = gtk.ImageMenuItem("@%s" % i.replace("_", "__")) item.set_image(gtk.image_new_from_stock("gtk-add", gtk.ICON_SIZE_MENU)) item.set_always_show_image(True) # Connect click event (add tab) item.connect("activate", self.on_menuitem_user_clicked, i) # append to menu usermenu.append(item) else: # not, show None item = gtk.MenuItem("None") item.set_sensitive(False) usermenu.append(item) # Hashtags Menu hashmenu = gtk.Menu() if hashes: for i in hashes: # Menuitem create item = gtk.ImageMenuItem("#%s" % i.replace("_", "__")) item.set_image(gtk.image_new_from_stock("gtk-add", gtk.ICON_SIZE_MENU)) item.set_always_show_image(True) # Connect click event (Streaming API) item.connect("activate", self.on_menuitem_hash_clicked, i) # append to menu hashmenu.append(item) else: # not, show None item = gtk.MenuItem("None") item.set_sensitive(False) hashmenu.append(item) # urls submenu append self.pmenu.get_children()[10].set_submenu(usermenu) self.pmenu.get_children()[11].set_submenu(hashmenu) self.pmenu.get_children()[12].set_submenu(urlmenu) self.pmenu.get_children()[6].set_label("@%s Timeline" % status.user.screen_name) # geo if status.geo: self.pmenu.get_children()[13].show() self.pmenu.get_children()[13].set_label( "Geo: %.6f, %.6f" % (status.geo.coordinates[0], status.geo.coordinates[1]) ) if self._geo_handler_id: self.pmenu.get_children()[13].disconnect(self._geo_handler_id) self._geo_handler_id = self.pmenu.get_children()[13].connect( "activate", self.on_menuitem_url_clicked, "http://maps.google.com/?q=%s" % (",".join(map(str, status.geo.coordinates))), ) else: self.pmenu.get_children()[13].hide() # Show popup menu urlmenu.show_all() usermenu.show_all() hashmenu.show_all()