X-Git-Url: https://vcs.fsf.org/?p=rainbowstream.git;a=blobdiff_plain;f=rainbowstream%2Frainbow.py;h=28717b65a985489fd11bfc0e8af2aceaae4a6849;hp=9e94fb8be49c3df5dfdcd941f4118ebecf1ff6db;hb=2050bc12ebd6aa3dda869225c1d88289ab66b212;hpb=4824b181ebf9aa8de4e93c8ce0563cc69f6e2e6d diff --git a/rainbowstream/rainbow.py b/rainbowstream/rainbow.py index 9e94fb8..28717b6 100644 --- a/rainbowstream/rainbow.py +++ b/rainbowstream/rainbow.py @@ -158,7 +158,6 @@ def init(args): themes = [f.split('.')[0] for f in files if f.split('.')[-1] == 'json'] g['themes'] = themes # Startup cmd - g['OSX_readline_bug'] = False g['previous_cmd'] = '' # Semaphore init c['lock'] = False @@ -168,6 +167,26 @@ def init(args): c['message_dict'] = [] # Image on term c['IMAGE_ON_TERM'] = args.image_on_term + # Dictionary of muted users key:screen name, value:name + g['mute_dict'] = {} + build_mute_dict(t) + +def build_mute_dict(t): + next_cursor = -1 + rel = {} + + while next_cursor != 0: + list = t.mutes.users.list( + screen_name=g['original_name'], + cursor=next_cursor, + skip_status=True, + include_entities=False, + ) + for u in list['users']: + rel[u['screen_name'].encode('ascii', 'ignore')] = u['name'].encode('ascii', 'ignore') + next_cursor = list['next_cursor'] + if(rel != g['mute_dict']): + g['mute_dict'] = rel def switch(): @@ -715,6 +734,7 @@ def mute(): rel = t.mutes.users.create(screen_name=screen_name[1:]) if isinstance(rel, dict): printNicely(green(screen_name + ' is muted.')) + build_mute_dict(t) else: printNicely(red(rel)) else: @@ -735,6 +755,7 @@ def unmute(): rel = t.mutes.users.destroy(screen_name=screen_name[1:]) if isinstance(rel, dict): printNicely(green(screen_name + ' is unmuted.')) + build_mute_dict(t) else: printNicely(red(rel)) else: @@ -745,26 +766,12 @@ def muting(): """ List muting user """ - t = Twitter(auth=authen()) - # Init cursor - next_cursor = -1 - rel = {} - # Cursor loop - while next_cursor != 0: - list = t.mutes.users.list( - screen_name=g['original_name'], - cursor=next_cursor, - skip_status=True, - include_entities=False, - ) - for u in list['users']: - rel[u['name']] = '@' + u['screen_name'] - next_cursor = list['next_cursor'] - # Print out result + rel = g['mute_dict'] + printNicely('All: ' + str(len(rel)) + ' people.') for name in rel: - user = ' ' + cycle_color(name) - user += color_func(c['TWEET']['nick'])(' ' + rel[name] + ' ') + user = color_func(c['TWEET']['nick'])(' ' + rel[name] + ' ') + user += cycle_color('@'+ name) printNicely(user) @@ -1446,7 +1453,7 @@ def help(): d.get( g['stuff'].strip(), lambda: printNicely(red('No such command.')) - )() + )() else: printNicely(usage) @@ -1631,10 +1638,6 @@ def listen(): cmd = line.split()[0] except: cmd = '' - # MacOSX readline bug (see "stream" function) - if g['OSX_readline_bug']: - cmd = cmd[1:] - g['OSX_readline_bug'] = False g['cmd'] = cmd try: # Lock the semaphore @@ -1668,8 +1671,8 @@ def stream(domain, args, name='Rainbow Stream'): ascii_art(art_dict[domain]) # These arguments are optional: stream_args = dict( - timeout=args.timeout, - block=False, + timeout=0.5, # To check g['stream_stop'] after each 0.5 s + block=not args.no_block, heartbeat_timeout=args.heartbeat_timeout) # Track keyword query_args = dict() @@ -1694,18 +1697,17 @@ def stream(domain, args, name='Rainbow Stream'): StreamLock.acquire() g['stream_stop'] = False for tweet in tweet_iter: - if(g['stream_stop']): - StreamLock.release() - break if tweet is None: - pass + printNicely("-- None --") elif tweet is Timeout: - printNicely("-- Timeout --") + if(g['stream_stop']): + StreamLock.release() + break elif tweet is HeartbeatTimeout: printNicely("-- Heartbeat Timeout --") elif tweet is Hangup: printNicely("-- Hangup --") - elif tweet.get('text'): + elif tweet.get('text') and (tweet['user']['screen_name'] not in g['mute_dict']): draw( t=tweet, keyword=args.track_keywords, @@ -1715,14 +1717,16 @@ def stream(domain, args, name='Rainbow Stream'): ) # Current readline buffer current_buffer = readline.get_line_buffer().strip() - # There is an unexpected behaviour in MacOSX readline - # After completely delete a word after typing it - # somehow readline buffer still contains the 1st character of that word - if g['previous_cmd'] != current_buffer: - if len(current_buffer) == 1: - current_buffer = '' - g['OSX_readline_bug'] = True - sys.stdout.write(g['decorated_name'](c['PREFIX']) + current_buffer) + # There is an unexpected behaviour in MacOSX readline + Python 2: + # 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: + sys.stdout.write( + g['decorated_name'](c['PREFIX']) + current_buffer) + sys.stdout.flush() + elif not c['HIDE_PROMPT']: + sys.stdout.write(g['decorated_name'](c['PREFIX'])) sys.stdout.flush() elif tweet.get('direct_message'): print_message(tweet['direct_message'], check_semaphore=True) @@ -1740,13 +1744,14 @@ def fly(): args = parse_arguments() try: init(args) - except TwitterHTTPError: + except TwitterHTTPError as error: printNicely('') printNicely( magenta("We have maximum connection problem with twitter'stream API right now :(")) printNicely(magenta("Let's try again later.")) save_history() - sys.exit() + print(error) + sys.exit() # Spawn stream thread th = threading.Thread( target=stream,