update ss
[rainbowstream.git] / rainbowstream / rainbow.py
index 3a6c7e39229a6d5efffc668fcd5b6cbc4467dbb2..9a30b47db5b8241f92dc69939c8f064b5c6810c2 100644 (file)
@@ -9,7 +9,6 @@ import os
 import os.path
 import argparse
 import sys
-import time
 import signal
 
 from twitter.stream import TwitterStream, Timeout, HeartbeatTimeout, Hangup
@@ -21,9 +20,10 @@ from dateutil import parser
 
 from .colors import *
 from .config import *
+from .db import *
 
 g = {}
-
+db = RainbowDB()
 
 def draw(t, keyword=None):
     """
@@ -38,9 +38,15 @@ def draw(t, keyword=None):
     date = parser.parse(created_at)
     time = date.strftime('%Y/%m/%d %H:%M:%S')
 
+    res = db.tweet_query(tid)
+    if not res:
+        db.store(tid)
+        res = db.tweet_query(tid)
+    rid = res[0].rainbow_id
+
     # Format info
     user = cycle_color(name) + grey(' ' + '@' + screen_name + ' ')
-    meta = grey('[' + time + '] [id=' + str(tid) + ']')
+    meta = grey('[' + time + '] [id=' + str(rid) + ']')
     tweet = text.split()
     # Highlight RT
     tweet = map(lambda x: grey(x) if x == 'RT' else x, tweet)
@@ -171,6 +177,20 @@ def tweet():
     t.statuses.update(status=g['stuff'])
 
 
+def retweet():
+    """
+    ReTweet
+    """
+    t = Twitter(auth=authen())
+    try:
+        id = int(g['stuff'].split()[0])
+        tid = db.rainbow_query(id)[0].tweet_id
+        t.statuses.retweet(id=tid,include_entities=False,trim_user=True)
+    except:
+        print(red('Sorry I can\'t retweet for you.'))
+        sys.stdout.write(g['decorated_name'])
+
+
 def reply():
     """
     Reply
@@ -178,10 +198,11 @@ def reply():
     t = Twitter(auth=authen())
     try:
         id = int(g['stuff'].split()[0])
-        user = t.statuses.show(id=id)['user']['screen_name']
+        tid = db.rainbow_query(id)[0].tweet_id
+        user = t.statuses.show(id=tid)['user']['screen_name']
         status = ' '.join(g['stuff'].split()[1:])
         status = '@' + user + ' ' + status.decode('utf-8')
-        t.statuses.update(status=status, in_reply_to_status_id=id)
+        t.statuses.update(status=status, in_reply_to_status_id=tid)
     except:
         print(red('Sorry I can\'t understand.'))
         sys.stdout.write(g['decorated_name'])
@@ -194,11 +215,12 @@ def delete():
     t = Twitter(auth=authen())
     try:
         id = int(g['stuff'].split()[0])
-        t.statuses.destroy(id=id)
+        tid = db.rainbow_query(id)[0].tweet_id
+        t.statuses.destroy(id=tid)
         print(green('Okay it\'s gone.'))
     except:
         print(red('Sorry I can\'t delete this tweet for you.'))
-        sys.stdout.write(g['decorated_name'])
+    sys.stdout.write(g['decorated_name'])
 
 
 def search():
@@ -255,12 +277,13 @@ def help():
     "home" will show your timeline. "home 7" will print 7 tweet.
     "view @bob" will show your friend @bob's home.
     "t oops" will tweet "oops" immediately.
+    "rt 12345" will retweet to tweet with id "12345".
     "rep 12345 oops" will reply "oops" to tweet with id "12345".
     "del 12345" will delete tweet with id "12345".
     "s #AKB48" will search for "AKB48" and return 5 newest tweet.
     "fr" will list out your following people.
     "fl" will list out your followers.
-    "h" or "help" will print this help once again.
+    "h" will print this help once again.
     "c" will clear the terminal.
     "q" will exit.
     ----------------------------------------------------
@@ -290,18 +313,18 @@ def process(cmd):
     Process switch
     """
     return {
-        'home': home,
-        'view': view,
-        't': tweet,
-        'rep': reply,
-        'del': delete,
-        's': search,
-        'fr': friend,
-        'fl': follower,
-        'h': help,
-        'help': help,
-        'c': clear,
-        'q': quit,
+        'home'  : home,
+        'view'  : view,
+        't'     : tweet,
+        'rt'    : retweet,
+        'rep'   : reply,
+        'del'   : delete,
+        's'     : search,
+        'fr'    : friend,
+        'fl'    : follower,
+        'h'     : help,
+        'c'     : clear,
+        'q'     : quit,
     }.get(cmd, lambda: sys.stdout.write(g['decorated_name']))
 
 
@@ -342,7 +365,7 @@ def stream():
     # Get stream
     stream = TwitterStream(
         auth=authen(),
-        domain='userstream.twitter.com',
+        domain=DOMAIN,
         **stream_args)
     tweet_iter = stream.user(**query_args)
 
@@ -365,6 +388,7 @@ def fly():
     Main function
     """
     get_decorated_name()
+
     p = Process(target=stream)
     p.start()
     g['stream_pid'] = p.pid