Esempio n. 1
0
 def profile(self, name, retry=False):
     if self.profile_current_user.lower() == name.lower() and not retry:
         return False
     
     # Button
     if not retry:
         self.profile_pending = True
         name = self.settings.get_username(name)
         self.profile_current_user = name
         self.gui.load_button.show(lang.profile_loading % lang.name(name),
                                   None)
     
     # Make sure to stop when aborted
     if not self.profile_pending:
         return False
     
     # Wait until send/delete etc. is completed
     if self.any_status(ST_DELETE, ST_SEND, ST_CONNECT) \
        or not self.status(ST_LOGIN_COMPLETE) \
        or name.lower() in self.follow_pending \
        or name.lower() in self.block_pending:
         
         gobject.timeout_add(50, self.profile, name, True)
         return False
     
     # View
     if self.gui.mode != MODE_PROFILE:
         self.profile_mode = self.gui.mode
     
     self.gui.profile.load_state = HTML_LOADING
     self.gui.profile.start()
     self.gui.text.remove_auto_complete(True)
     gobject.idle_add(self.gui.set_mode, MODE_PROFILE)
     gobject.idle_add(self.gui.on_mode)
     api.Profile(self, name, self.show_profile)
Esempio n. 2
0
 def is_protected(self, user):
     if hasattr(user, 'protected') and user.protected:
         return  ('<span class="protected" title="' \
                  + lang.html_protected + '"></span>') \
                  % lang.name(user.screen_name)
     
     else:
         return ''
Esempio n. 3
0
 def show_profile(self, user, friend, tweets):
     if not self.profile_pending:
         return False
     
     self.gui.load_button.show(lang.profile_close % \
                               lang.name(user.screen_name), None)
     
     self.profile_current_user = user.screen_name
     self.gui.profile.load_state = HTML_LOADED
     self.gui.profile.history_level = 0
     self.gui.profile.render(user, friend, tweets)
     gobject.idle_add(self.gui.show_input)
Esempio n. 4
0
 def show_favorite_error(self, mode, name):
     dialog.MessageDialog(self, MESSAGE_ERROR,
                          lang.error_favorite_on % lang.name(name) \
                          if mode else lang.error_favorite_off \
                          % lang.name(name), lang.error_title)
Esempio n. 5
0
 def show_profile_warning(self, name):
     dialog.MessageDialog(self, MESSAGE_WARNING,
                          lang.profile_warning % lang.name(name),
                          lang.warning_title)
Esempio n. 6
0
 def show_profile_error(self, name):
     dialog.MessageDialog(self, MESSAGE_ERROR,
                          lang.profile_error % lang.name(name),
                          lang.error_title)
Esempio n. 7
0
 def enter_password(self):
     self.main.api_temp_password = None
     dialog.PasswordDialog(self, lang.password_title,
                           lang.password_question % \
                           lang.name(self.main.username))
Esempio n. 8
0
 def update_status(self, once=False):
     if self.text.has_typed and not self.mode == MODE_PROFILE:
         pass
     
     elif self.main.status(ST_RECONNECT):
         wait = self.main.refresh_timeout - \
                 (gmtime() - self.main.reconnect_time)
         if wait < 60:
             self.set_status(lang.status_reconnect_seconds % wait)
         
         elif wait < 105:
             self.set_status(lang.status_reconnect_minute)
         
         else:
             self.set_status(
                 lang.status_reconnect_minutes % math.ceil(wait / 60.0))
     
     elif self.main.status(ST_HISTORY):
         if self.tweet.load_history_id != HTML_UNSET_ID:
             state = lang.status_load_history
         
         elif self.message.load_history_id != HTML_UNSET_ID:
             state = lang.status_load_message_history
         
         else:
             state = lang.status_load_history
         
         self.set_status(state)
     
     elif self.main.status(ST_CONNECT):
         self.set_status(lang.status_connecting % self.main.username)
     
     elif self.main.status(ST_LOGIN_ERROR):
         self.set_status(lang.status_error)
     
     elif not self.main.status(ST_LOGIN_SUCCESSFUL):
         self.set_status(lang.status_logout)
     
     elif self.main.any_status(ST_SEND, ST_DELETE):
         pass
     
     elif self.mode == MODE_PROFILE \
          and self.profile.load_state == HTML_LOADING:
         
         self.set_status(lang.status_profile \
                         % lang.name(self.main.profile_current_user))
     
     elif self.main.status(ST_UPDATE):
         self.set_multi_button(False, None, False, True)
         self.set_status(lang.status_update)
     
     elif self.main.refresh_time == UNSET_TIMEOUT \
          or  (self.mode == MODE_MESSAGES \
          and self.message.load_state == HTML_LOADING) \
          or (self.mode == MODE_TWEETS \
          and self.tweet.load_state == HTML_LOADING):
         
         self.set_status(lang.status_connected)
     
     elif (not self.text.is_typing or not self.text.has_focus \
           or self.mode == MODE_PROFILE) and not self.main.status(ST_SEND):
         
         wait = self.main.refresh_timeout - \
                (gmtime() - self.main.refresh_time)
         
         if wait < 0:
             wait = 0
         
         if wait == 0:
             self.set_multi_button(False, None, False, True)
             self.set_status(lang.status_update)
         
         elif wait == 1:
             self.set_status(lang.status_one_second)
         
         else:
             if wait < 60:
                 self.set_status(lang.status_seconds % wait)
             
             elif wait < 105:
                 self.set_status(lang.status_minute)
             
             else:
                 self.set_status(
                      lang.status_minutes % math.ceil(wait / 60.0))
     
     if once:
         return False
     
     else:
         return True
Esempio n. 9
0
 def format_username(self, at_char, user):
     return ('<a href="user:%s:http://twitter.com/%s" title="' \
              + lang.html_at + '">%s%s</a>') \
              % (user, user, lang.name(user), at_char, user)
Esempio n. 10
0
 def render_item(self, num, item, img):
     user, formatted = item.sender, self.parser.parse(item.text)
     
     
     # Spacers --------------------------------------------------------------
     mentioned = item.recipient_screen_name != self.main.username
     if num > 0:
         next_highlight = self.items[num + 1][0].recipient_screen_name \
                          != self.main.username if num < len(self.items) \
                          - 1 else False
         
         force = self.last_recipient != item.recipient_screen_name
         self.renderitems.insert(0,
                     self.insert_spacer(item, user, False, mentioned,
                     next_highlight, force = force, message = True))
     
     self.last_mentioned = mentioned
     self.last_name = user.screen_name
     self.last_recipient = item.recipient_screen_name
     
     
     # Avatar ---------------------------------------------------------------
     self.is_new_avatar(num)
     has_avatar = (num < len(self.items) - 1 and (user.screen_name != \
                  self.items[num + 1][0].sender.screen_name \
                  or self.new_avatar)) \
                  or num == len(self.items) - 1 or self.new_timeline
     
     avatar, text_class = self.get_avatar(has_avatar, user, num, img)
     
     
     # Background -----------------------------------------------------------
     cls = 'oldtweet' if item.id <= self.new_items_id else 'tweet'
     if item.recipient_screen_name.lower() != self.main.username.lower():
         mode = lang.message_to
         name = item.recipient_screen_name
         reply = 'display: none;'
         cls = 'messageold' if item.id <= self.new_items_id \
                else 'message'
         
         username = item.recipient_screen_name
         toid = item.recipient.id
         ltype = 'rprofile'
     
     else:
         mode = lang.message_from
         name = user.screen_name
         reply = HTML_UNSET_TEXT
         toid = user.id
         username = user.screen_name
         ltype = 'profile'
     
     
     # HTML Snippet ---------------------------------------------------------
     html = '''
     <div class="viewitem %s" id="%d"><div class="avatar">%s</div>
     <div class="actions">
         <div class="doretweet" style="''' + reply \
             + '''"><a href="qmessage:%s:%d:%d" title="''' \
             + (lang.html_reply % user.screen_name) + '''"></a>
         </div>
     </div>
     
     <div class="''' + text_class + '''">
         <div>
             <span class="name"><b>''' + mode \
             + ''' <a href="''' + ltype \
             + ''':%d:http://twitter.com/%s" title="''' \
             + lang.html_profile \
             + '''">%s</a></b></span>''' \
             + self.is_protected(user) \
             + '''%s</div>
         <div id="time_%d" class="time" title="''' + \
         self.absolute_time(item.created_at, True) + '''">%s</div>
     </div>
     </div>'''
     
     # Insert values
     html = html % (
             cls,
             num,
             avatar,
             
             # Actions
             user.screen_name, toid, num,
             
             # Text
             num,
             username,
             lang.name(username),
             name,
             formatted.html.replace('\n', '<br/>'),
             
             # Time
             num,
             self.relative_time(item.created_at))
     
     # Return the HTML string
     return html
Esempio n. 11
0
 def render_item(self, num, item, img):
     # Check for new style retweet
     retweeted = False
     retweet = HTML_UNSET_TEXT
     if hasattr(item, 'retweeted_status'):
         tweet = item.retweeted_status
         retweeted = True
         
         # Retweet Info
         retweet = '<a href="user:%s:http://twitter.com/%s" title="''' \
                   + (self.relative_time(item.created_at)) + '">' \
                   + lang.html_in_retweet + '</a>'
         
         retweet = retweet % (item.user.screen_name, item.user.screen_name,
                                 item.user.screen_name)
     
     else:
         tweet = item
     
     # Get User and Text
     user, formatted = tweet.user, self.parser.parse(tweet.text)
     
     
     # Spacers --------------------------------------------------------------
     highlight = self.main.username.lower() in \
                 [i.lower() for i in formatted.users]
     
     mentioned = hasattr(tweet, 'is_mentioned') and tweet.is_mentioned
     if mentioned:
         highlight = False
     
     if num > 0:
         self.renderitems.insert(0,
                     self.insert_spacer(item, user, highlight, mentioned))
     
     self.last_name = user.screen_name
     self.last_highlight = highlight
     self.last_mentioned = mentioned
     
     # Is this tweet a reply?
     if tweet.in_reply_to_screen_name and tweet.in_reply_to_status_id:
         reply = ('<a href="status:http://twitter.com/%s/statuses/%d" ' + \
                  'title="' + lang.html_in_reply_view + '">' + \
                  lang.html_in_reply + '</a>') \
                  % (tweet.in_reply_to_screen_name,
                     tweet.in_reply_to_status_id,
                     tweet.in_reply_to_screen_name)
     
     else:
         reply = HTML_UNSET_TEXT
     
     
     # Avatar ---------------------------------------------------------------
     self.is_new_avatar(num)
     has_avatar = (num < len(self.items) - 1 and \
                  (user.screen_name != self.get_screen_name(num + 1) \
                  or self.new_avatar)) \
                  or num == len(self.items) - 1 or self.new_timeline
     
     avatar, text_class = self.get_avatar(has_avatar, user, num, img)
     
     
     # Background -----------------------------------------------------------
     if mentioned:
         clas = 'mentionedold' if item.id <= self.new_items_id \
                else 'mentioned'
     
     elif item.id <= self.new_items_id:
         clas = 'highlightold' if highlight else 'oldtweet'
     
     else:
         clas = 'highlight' if highlight else 'tweet'
     
     
     # Source ---------------------------------------------------------------
     if tweet.source != 'web':
         if hasattr(tweet, 'source_url') \
            and tweet.source_url != HTML_UNSET_TEXT:
             
             if tweet.source_url == '/devices':
                 tweet.source_url = 'http://twitter.com/devices'
             
             by_user = lang.html_by \
                       % ('<a href="source:%s" title="%s">%s</a>' \
                       % (tweet.source_url, tweet.source_url, tweet.source))
         
         else:
             by_user =  lang.html_by % tweet.source
     
     else:
         by_user = HTML_UNSET_TEXT
     
     
     # Favorite -------------------------------------------------------------
     if tweet.favorited:
         favorite = '''<div id="fav_''' + str(num) + '''" class="undofav">
                       <a href="unfav:%s:%d" title="''' + \
                       lang.html_unfavorite + '''"> </a></div>'''
     
     else:
         favorite = '''<div id="fav_''' + str(num) + '''" class="dofav">
                       <a href="fav:%s:%d" title="''' + \
                       lang.html_favorite + '''"> </a></div>'''
     
     
     # HTML Snippet ---------------------------------------------------------
     html = '''
     <div class="viewitem %s" id="%d"><div class="avatar">%s</div>
     <div class="actions">
         <div class="blocker"></div>
         <div class="doreply">
             <a href="qreply:%s:%d:%d" title="''' + \
             (lang.html_reply % user.screen_name) + \
             '''"> </a></div>''' + favorite + '''
     </div>
     <div class="''' + text_class + '''">
         %s%s</div>
         <div class="time">
         <a id="time_%d" href="status:http://twitter.com/%s/statuses/%d" 
            title="''' + \
             self.absolute_time(tweet.created_at) + '''">%s</a>
             ''' + by_user + '''</div>
         <div class="reply">%s</div>
         <div class="reply">%s</div>
     </div>
     <div class="clearfloat"></div>
     </div>'''
     
     # Avatar and Name
     name =  '<div><span class="name">' + \
             ('<b>RT</b> ' if retweeted else HTML_UNSET_TEXT) + \
             '<b><a href="profile:%d:http://twitter.com/%s" title="' + \
             lang.html_profile + '">%s</a></b></span>' + \
             self.is_protected(user)
     
     name = name % (num, user.screen_name, lang.name(user.screen_name),
                    user.screen_name)
     
     # Insert values
     html = html % (
             clas,
             num,
             avatar,
             
             # Actions
             user.screen_name, tweet.id, num,
             user.screen_name, tweet.id,
             
             # Text
             name,
             formatted.html.replace('\n', '<br/>'),
             
             # Time
             num,
             user.screen_name,
             tweet.id,
             self.relative_time(tweet.created_at),
             reply, retweet)
     
     # Return the HTML string
     return html
Esempio n. 12
0
 def create_menu(self, menu, item, item_id, link, full, user):
     # User Options
     if user is not None:
         if link in ('profile', 'avatar'):
             reply = 'reply:%s:%d:%d' % (user, item_id, HTML_UNSET_ID)
             self.add_menu_link(menu, lang.context_reply % menu_escape(user),
                                self.context_link, reply, item)
         
         else:
             reply = 'reply:%s:%d:%d' % (user, UNSET_ID_NUM, HTML_UNSET_ID)
             self.add_menu_link(menu, lang.context_tweet % menu_escape(user),
                                self.context_link, reply)
         
         # Message
         if user.lower() != self.main.username.lower():
             self.add_menu_separator(menu)
             if link == 'user':
                 user_id = UNSET_ID_NUM
             
             else:
                 user_id = self.get_user(item).id
             
             message = 'message:%s:%d:%d' % (user, user_id, HTML_UNSET_ID)
             self.add_menu_link(menu, lang.context_message \
                                % menu_escape(user), self.context_link,
                                message)
     
     # Source
     elif link == 'source':
         source = self.get_source(item)
         self.add_menu_link(menu,
                            lang.context_source \
                            % lang.name(menu_escape(source)),
                            self.context_link, full)
     
     else:
         
         # Copy Tweet
         self.add_menu_link(menu, lang.context_copy_tweet,
                            self.copy_tweet, None, item)
         
         self.add_menu_separator(menu)
         
         # RT old
         name = self.get_screen_name(item)
         full = 'retweet:%s' % RETWEET_OLD
         self.add_menu_link(menu,
                            lang.context_retweet_old % menu_escape(name),
                            self.context_link, full, item)
         
         # RT New
         if name.lower() != self.main.username.lower() \
            and not self.get_protected(item):
             
             full = 'retweet:%s' % RETWEET_NEW
             self.add_menu_link(menu,
                                lang.context_retweet_new % menu_escape(name),
                                self.context_link, full, item)
         
         # Edit / Delete
         if name.lower() == self.main.username.lower():
             self.add_menu_separator(menu)
             full = 'edit:%d' % item_id
             self.add_menu_link(menu, lang.context_edit_tweet,
                                self.context_link, full, item)
             
             full = 'delete:t:%d' % item_id
             self.add_menu_link(menu, lang.context_delete_tweet,
                                self.context_link, full, item)