add first tip
[rainbowstream.git] / rainbowstream / rainbow.py
index bf4c3365f4cb7b78871b8f1c84fd884b24c7f882..bfbb6a0a84a52832c086bec4c4ad8de0c300ce4d 100644 (file)
@@ -1,19 +1,23 @@
 """
 Colorful user's timeline stream
 """
-
 from __future__ import print_function
 from multiprocessing import Process
+from dateutil import parser
 
-import os, os.path, sys,signal
-import argparse, time, datetime 
+import os
+import os.path
+import sys
+import signal
+import argparse
+import time
+import datetime
 
 from twitter.stream import TwitterStream, Timeout, HeartbeatTimeout, Hangup
 from twitter.api import *
 from twitter.oauth import OAuth, read_token_file
 from twitter.oauth_dance import oauth_dance
 from twitter.util import printNicely
-from dateutil import parser
 
 from .colors import *
 from .config import *
@@ -37,6 +41,7 @@ cmdset = [
     'q'
 ]
 
+
 def draw(t, keyword=None):
     """
     Draw the rainbow
@@ -148,7 +153,7 @@ def get_decorated_name():
     Beginning of every line
     """
     t = Twitter(auth=authen())
-    name = '@' + t.statuses.user_timeline()[-1]['user']['screen_name']
+    name = '@' + t.account.verify_credentials()['screen_name']
     g['decorated_name'] = grey('[') + grey(name) + grey(']: ')
 
 
@@ -180,7 +185,7 @@ def view():
             draw(t=tweet)
         printNicely('')
     else:
-        print(red('A name should begin with a \'@\''))
+        printNicely(red('A name should begin with a \'@\''))
 
 
 def tweet():
@@ -191,6 +196,7 @@ def tweet():
     t.statuses.update(status=g['stuff'])
     g['prefix'] = False
 
+
 def retweet():
     """
     ReTweet
@@ -199,9 +205,9 @@ def retweet():
     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)
+        t.statuses.retweet(id=tid, include_entities=False, trim_user=True)
     except:
-        print(red('Sorry I can\'t retweet for you.'))
+        printNicely(red('Sorry I can\'t retweet for you.'))
     g['prefix'] = False
 
 
@@ -218,7 +224,7 @@ def reply():
         status = '@' + user + ' ' + status.decode('utf-8')
         t.statuses.update(status=status, in_reply_to_status_id=tid)
     except:
-        print(red('Sorry I can\'t understand.'))
+        printNicely(red('Sorry I can\'t understand.'))
     g['prefix'] = False
 
 
@@ -231,9 +237,9 @@ def delete():
         id = int(g['stuff'].split()[0])
         tid = db.rainbow_query(id)[0].tweet_id
         t.statuses.destroy(id=tid)
-        print(green('Okay it\'s gone.'))
+        printNicely(green('Okay it\'s gone.'))
     except:
-        print(red('Sorry I can\'t delete this tweet for you.'))
+        printNicely(red('Sorry I can\'t delete this tweet for you.'))
 
 
 def search():
@@ -244,15 +250,18 @@ def search():
     try:
         if g['stuff'][0] == '#':
             rel = t.search.tweets(q=g['stuff'])['statuses']
-            print('Newest', SEARCH_MAX_RECORD, 'tweet:')
-            for i in xrange(5):
-                draw(t=rel[i], keyword=g['stuff'].strip()[1:])
-            printNicely('')
+            if len(rel):
+                printNicely('Newest tweets:')
+                for i in reversed(xrange(SEARCH_MAX_RECORD)):
+                    draw(t=rel[i], keyword=g['stuff'].strip()[1:])
+                printNicely('')
+            else:
+                printNicely(magenta('I\'m afraid there is no result'))
         else:
-            print(red('A keyword should be a hashtag (like \'#AKB48\')'))
+            printNicely(red('A keyword should be a hashtag (like \'#AKB48\')'))
     except:
-        print(red('Sorry I can\'t understand.'))
-    
+        printNicely(red('Sorry I can\'t understand.'))
+
 
 def friend():
     """
@@ -264,7 +273,7 @@ def friend():
         screen_name = t.users.lookup(user_id=i)[0]['screen_name']
         user = cycle_color('@' + screen_name)
         print(user, end=' ')
-    print('\n')
+    printNicely('');
 
 
 def follower():
@@ -277,7 +286,7 @@ def follower():
         screen_name = t.users.lookup(user_id=i)[0]['screen_name']
         user = cycle_color('@' + screen_name)
         print(user, end=' ')
-    print('\n')
+    printNicely('');
 
 
 def help():
@@ -286,7 +295,7 @@ def help():
     """
     usage = '''
     Hi boss! I'm ready to serve you right now!
-    ----------------------------------------------------
+    -------------------------------------------------------------
     "home" will show your timeline. "home 7" will show 7 tweet.
     "view @bob" will show your friend @bob's home.
     "t oops" will tweet "oops" immediately.
@@ -299,7 +308,7 @@ def help():
     "h" will show this help again.
     "c" will clear the terminal.
     "q" will exit.
-    ----------------------------------------------------
+    -------------------------------------------------------------
     Have fun and hang tight!
     '''
     printNicely(usage)
@@ -310,13 +319,14 @@ def clear():
     Clear screen
     """
     os.system('clear')
+    g['prefix'] = False
 
 
 def quit():
     """
     Exit all
     """
-    db.truncate() 
+    os.system('rm -rf rainbow.db')
     os.kill(g['stream_pid'], signal.SIGKILL)
     sys.exit()
 
@@ -325,7 +335,10 @@ def reset():
     """
     Reset prefix of line
     """
+    if g['reset']:
+        printNicely(green('Need tips ? Type "h" and hit Enter key!'))
     g['prefix'] = True
+    g['reset'] = False
 
 
 def process(cmd):
@@ -334,14 +347,27 @@ def process(cmd):
     """
     return dict(zip(
         cmdset,
-        [home,view,tweet,retweet,reply,delete,search,friend,follower,help,clear,quit] 
+        [
+            home,
+            view,
+            tweet,
+            retweet,
+            reply,
+            delete,
+            search,
+            friend,
+            follower,
+            help,
+            clear,
+            quit
+        ]
     )).get(cmd, reset)
 
 
 def listen():
     init_interactive_shell(cmdset)
-    first = True 
-    while True: 
+    first = True
+    while True:
         if g['prefix'] and not first:
             line = raw_input(g['decorated_name'])
         else:
@@ -364,8 +390,6 @@ def stream():
 
     # The Logo
     ascii_art()
-    g['stuff'] = '1'
-    home()
     # These arguments are optional:
     stream_args = dict(
         timeout=args.timeout,
@@ -404,6 +428,7 @@ def fly():
     """
     get_decorated_name()
     g['prefix'] = True
+    g['reset'] = True
     p = Process(target=stream)
     p.start()
     g['stream_pid'] = p.pid