X-Git-Url: https://vcs.fsf.org/?p=rainbowstream.git;a=blobdiff_plain;f=rainbowstream%2Frainbow.py;h=7add5574641a56a760b0826768fa58fb9e9ddc62;hp=3d154cabbf94feee8c50b12e8a73570211e95704;hb=e5df236c8354ad8b0d6b68fea9517dd19616a5b7;hpb=ba7a4c02bf251fba0393c4cabd96636213a0f76c diff --git a/rainbowstream/rainbow.py b/rainbowstream/rainbow.py index 3d154ca..7add557 100644 --- a/rainbowstream/rainbow.py +++ b/rainbowstream/rainbow.py @@ -31,49 +31,6 @@ g = {} # Lock for streams StreamLock = threading.Lock() -# Commands -cmdset = [ - 'switch', - 'trend', - 'home', - 'view', - 'mentions', - 't', - 'rt', - 'quote', - 'allrt', - 'fav', - 'rep', - 'del', - 'ufav', - 's', - 'mes', - 'show', - 'open', - 'ls', - 'inbox', - 'sent', - 'trash', - 'whois', - 'fl', - 'ufl', - 'mute', - 'unmute', - 'muting', - 'block', - 'unblock', - 'report', - 'list', - 'cal', - 'config', - 'theme', - 'h', - 'p', - 'r', - 'c', - 'q' -] - def parse_arguments(): """ @@ -84,16 +41,6 @@ def parse_arguments(): '-to', '--timeout', help='Timeout for the stream (seconds).') - parser.add_argument( - '-ht', - '--heartbeat-timeout', - help='Set heartbeat timeout.', - default=90) - parser.add_argument( - '-nb', - '--no-block', - action='store_true', - help='Set stream to non-blocking.') parser.add_argument( '-tt', '--track-keywords', @@ -184,7 +131,7 @@ def init(args): themes = [f.split('.')[0] for f in files if f.split('.')[-1] == 'json'] g['themes'] = themes # Startup cmd - g['previous_cmd'] = '' + g['cmd'] = '' # Semaphore init c['lock'] = False c['pause'] = False @@ -365,6 +312,7 @@ def quote(): """ Quote a tweet """ + # Get tweet t = Twitter(auth=authen()) try: id = int(g['stuff'].split()[0]) @@ -373,17 +321,16 @@ def quote(): return tid = c['tweet_dict'][id] tweet = t.statuses.show(id=tid) - screen_name = tweet['user']['screen_name'] - text = tweet['text'] - quote = '\"@' + screen_name + ': ' + text + '\"' - quote = quote.encode('utf8') - notice = light_magenta('Compose mode ') - notice += light_yellow('(Enter nothing will cancel the quote)') - notice += light_magenta(':') - printNicely(notice) - extra = raw_input(quote) - if extra: - t.statuses.update(status=quote + extra) + # Get formater + formater = format_quote(tweet) + if not formater: + return + # Get comment + prefix = light_magenta('Compose your ') + light_green('#comment: ') + comment = raw_input(prefix) + if comment: + quote = comment.join(formater.split('#comment')) + t.statuses.update(status=quote) else: printNicely(light_magenta('No text added.')) @@ -445,7 +392,7 @@ def reply(): tid = c['tweet_dict'][id] user = t.statuses.show(id=tid)['user']['screen_name'] status = ' '.join(g['stuff'].split()[1:]) - status = '@' + user + ' ' + unc(status) + status = '@' + user + ' ' + str2u(status) t.statuses.update(status=status, in_reply_to_status_id=tid) @@ -1520,59 +1467,103 @@ def reset(): printNicely(magenta('Need tips ? Type "h" and hit Enter key!')) g['reset'] = False try: - printNicely(str(eval('%s %s' % (g['cmd'], g['stuff'])))) + printNicely(str(eval(g['cmd']))) except Exception: pass +# Command set +cmdset = [ + 'switch', + 'trend', + 'home', + 'view', + 'mentions', + 't', + 'rt', + 'quote', + 'allrt', + 'fav', + 'rep', + 'del', + 'ufav', + 's', + 'mes', + 'show', + 'open', + 'ls', + 'inbox', + 'sent', + 'trash', + 'whois', + 'fl', + 'ufl', + 'mute', + 'unmute', + 'muting', + 'block', + 'unblock', + 'report', + 'list', + 'cal', + 'config', + 'theme', + 'h', + 'p', + 'r', + 'c', + 'q' +] + +# Handle function set +funcset = [ + switch, + trend, + home, + view, + mentions, + tweet, + retweet, + quote, + allretweet, + favorite, + reply, + delete, + unfavorite, + search, + message, + show, + urlopen, + ls, + inbox, + sent, + trash, + whois, + follow, + unfollow, + mute, + unmute, + muting, + block, + unblock, + report, + twitterlist, + cal, + config, + theme, + help, + pause, + replay, + clear, + quit +] + + def process(cmd): """ Process switch """ - return dict(zip( - cmdset, - [ - switch, - trend, - home, - view, - mentions, - tweet, - retweet, - quote, - allretweet, - favorite, - reply, - delete, - unfavorite, - search, - message, - show, - urlopen, - ls, - inbox, - sent, - trash, - whois, - follow, - unfollow, - mute, - unmute, - muting, - block, - unblock, - report, - twitterlist, - cal, - config, - theme, - help, - pause, - replay, - clear, - quit - ] - )).get(cmd, reset) + return dict(zip(cmdset, funcset)).get(cmd, reset) def listen(): @@ -1651,13 +1642,13 @@ def listen(): line = raw_input(g['decorated_name'](c['PREFIX'])) else: line = raw_input() - # Save previous cmd in order to compare with readline buffer - g['previous_cmd'] = line.strip() + # Save cmd to compare with readline buffer + g['cmd'] = line.strip() + # Get short cmd to pass to handle function try: cmd = line.split()[0] except: cmd = '' - g['cmd'] = cmd try: # Lock the semaphore c['lock'] = True @@ -1691,8 +1682,8 @@ def stream(domain, args, name='Rainbow Stream'): # These arguments are optional: stream_args = dict( timeout=0.5, # To check g['stream_stop'] after each 0.5 s - block=not args.no_block, - heartbeat_timeout=args.heartbeat_timeout) + block=True, + heartbeat_timeout=c['HEARTBEAT_TIMEOUT'] * 60) # Track keyword query_args = dict() if args.track_keywords: @@ -1724,6 +1715,17 @@ def stream(domain, args, name='Rainbow Stream'): break elif tweet is HeartbeatTimeout: printNicely("-- Heartbeat Timeout --") + guide = light_magenta("You can use ") + \ + light_green("switch") + \ + light_magenta(" command to return to your stream.\n") + guide += light_magenta("Type ") + \ + light_green("h stream") + \ + light_magenta(" for more details.") + printNicely(guide) + sys.stdout.write(g['decorated_name'](c['PREFIX'])) + sys.stdout.flush() + StreamLock.release() + break elif tweet is Hangup: printNicely("-- Hangup --") elif tweet.get('text'): @@ -1740,9 +1742,9 @@ def stream(domain, args, name='Rainbow Stream'): # after completely delete a word after typing it, # somehow readline buffer still contains # the 1st character of that word - if current_buffer and g['previous_cmd'] != current_buffer: + if current_buffer and g['cmd'] != current_buffer: sys.stdout.write( - g['decorated_name'](c['PREFIX']) + unc(current_buffer)) + g['decorated_name'](c['PREFIX']) + str2u(current_buffer)) sys.stdout.flush() elif not c['HIDE_PROMPT']: sys.stdout.write(g['decorated_name'](c['PREFIX']))