Bumped version 1.5.2
[rainbowstream.git] / rainbowstream / draw.py
index 4423c265fb4b7fd309d1ebd0575c31601b056335..2fcdeb41bca7bb18ae76fe95e60672d11ed642db 100644 (file)
@@ -175,6 +175,23 @@ def fallback_humanize(date, fallback_format=None, use_fallback=False):
     return clock
 
 
+def get_full_text(t):
+    """Handle RTs and extended tweets to always display all the available text"""
+
+    if t.get('retweeted_status'):
+        rt_status = t['retweeted_status']
+        if rt_status.get('extended_tweet'):
+            elem = rt_status['extended_tweet']
+        else:
+            elem = rt_status
+        rt_text = elem.get('full_text', elem.get('text'))
+        t['full_text'] = 'RT @' + rt_status['user']['screen_name'] + ': ' + rt_text
+    elif t.get('extended_tweet'):
+        t['full_text'] = t['extended_tweet']['full_text']
+
+    return t.get('full_text', t.get('text'))
+
+
 def draw(t, keyword=None, humanize=True, noti=False, fil=[], ig=[]):
     """
     Draw the rainbow
@@ -184,7 +201,8 @@ def draw(t, keyword=None, humanize=True, noti=False, fil=[], ig=[]):
 
     # Retrieve tweet
     tid = t['id']
-    text = t['text']
+
+    text = get_full_text(t)
     screen_name = t['user']['screen_name']
     name = t['user']['name']
     created_at = t['created_at']
@@ -201,8 +219,6 @@ def draw(t, keyword=None, humanize=True, noti=False, fil=[], ig=[]):
 
     # Pull extended retweet text
     try:
-        text = 'RT @' + t['retweeted_status']['user']['screen_name'] + ': ' +\
-            t['retweeted_status']['text']
         # Display as a notification
         target = t['retweeted_status']['user']['screen_name']
         if all([target == c['original_name'], not noti]):
@@ -409,7 +425,7 @@ def print_thread(partner, me_nick, me_name):
     """
     # Sort messages by time
     messages = dg['thread'][partner]
-    messages.sort(key=lambda x: parser.parse(x['created_at']))
+    messages.sort(key=lambda x: int(x['created_at']))
     # Use legacy display on non-ascii text message
     ms = [m['text'] for m in messages]
     ums = [m for m in ms if not all(ord(c) < 128 for c in m)]
@@ -471,8 +487,7 @@ def print_right_message(m):
         printNicely(screen_line)
     printNicely(dotline)
     # Format clock
-    date = parser.parse(m['created_at'])
-    date = arrow.get(date).to('local').datetime
+    date = arrow.get(int(m['created_at'])/1000).to('local').datetime # Read Unixtime in miliseconds
     clock_format = '%Y/%m/%d %H:%M:%S'
     try:
         clock_format = c['FORMAT']['MESSAGE']['CLOCK_FORMAT']
@@ -581,10 +596,10 @@ def print_message(m):
     """
     # Retrieve message
     sender_screen_name = '@' + m['sender_screen_name']
-    sender_name = m['sender']['name']
+    sender_name = m['sender_name']
     text = unescape(m['text'])
     recipient_screen_name = '@' + m['recipient_screen_name']
-    recipient_name = m['recipient']['name']
+    recipient_name = m['recipient_name']
     mid = m['id']
     date = parser.parse(m['created_at'])
     date = arrow.get(date).to('local').datetime
@@ -1066,8 +1081,8 @@ def format_quote(tweet):
     Quoting format
     """
     # Retrieve info
-    screen_name = str( tweet['user']['screen_name'] )
-    text        = str( tweet['text'] )
+    screen_name = tweet['user']['screen_name']
+    text = get_full_text(tweet)
     tid         = str( tweet['id'] )
 
     # Validate quote format