X-Git-Url: https://vcs.fsf.org/?p=rainbowstream.git;a=blobdiff_plain;f=rainbowstream%2Frainbow.py;h=905ff77a82250ebd8cb68b2b8b55e43d04c137e9;hp=43466ec61213f3c4a1138ef53b75d2823939bb85;hb=3c01ba57824a0e03ab038c37f6de27c2cf129f02;hpb=cdccb0d6e5b4a3101a014f3084fb3f10694ba635 diff --git a/rainbowstream/rainbow.py b/rainbowstream/rainbow.py index 43466ec..905ff77 100644 --- a/rainbowstream/rainbow.py +++ b/rainbowstream/rainbow.py @@ -11,13 +11,13 @@ import argparse import time import requests import webbrowser +import json 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 StringIO import StringIO from .draw import * from .colors import * @@ -26,6 +26,8 @@ from .consumer import * from .interactive import * from .db import * from .c_image import * +from .py3patch import * + g = {} db = RainbowDB() @@ -60,7 +62,9 @@ cmdset = [ 'block', 'unblock', 'report', + 'list', 'cal', + 'config', 'theme', 'h', 'c', @@ -132,19 +136,22 @@ def authen(): def get_decorated_name(): """ - Beginning of every line + Init function """ + # Get name t = Twitter(auth=authen()) name = '@' + t.account.verify_credentials()['screen_name'] g['original_name'] = name[1:] g['decorated_name'] = color_func(c['DECORATED_NAME'])('[' + name + ']: ') - g['ascii_art'] = True - files = os.listdir(os.path.dirname(__file__)+'/colorset') + # Theme init + files = os.listdir(os.path.dirname(__file__) + '/colorset') themes = [f.split('.')[0] for f in files if f.split('.')[-1] == 'json'] - themes += ['custom'] g['themes'] = themes - db.theme_store(c['theme']) + db.theme_store(c['THEME']) + + # Semaphore init + db.semaphore_store(False) def switch(): @@ -205,7 +212,6 @@ def switch(): if args.ignore: printNicely(red('Ignore: ' + str(args.ignore))) printNicely('') - g['ascii_art'] = True except: printNicely(red('Sorry I can\'t understand.')) @@ -335,7 +341,7 @@ def quote(): printNicely(notice) extra = raw_input(quote) if extra: - t.statuses.update(status=quote+extra) + t.statuses.update(status=quote + extra) else: printNicely(light_magenta('No text added.')) @@ -438,19 +444,17 @@ def search(): Search """ t = Twitter(auth=authen()) - if g['stuff'].startswith('#'): - rel = t.search.tweets(q=g['stuff'])['statuses'] - if rel: - printNicely('Newest tweets:') - for i in reversed(xrange(c['SEARCH_MAX_RECORD'])): - draw(t=rel[i], - iot=g['iot'], - keyword=g['stuff'].strip()[1:]) - printNicely('') - else: - printNicely(magenta('I\'m afraid there is no result')) + g['stuff'] = g['stuff'].strip() + rel = t.search.tweets(q=g['stuff'])['statuses'] + if rel: + printNicely('Newest tweets:') + for i in reversed(xrange(c['SEARCH_MAX_RECORD'])): + draw(t=rel[i], + iot=g['iot'], + keyword=g['stuff']) + printNicely('') else: - printNicely(red('A keyword should be a hashtag (like \'#AKB48\')')) + printNicely(magenta('I\'m afraid there is no result')) def message(): @@ -488,7 +492,7 @@ def show(): media = tweet['entities']['media'] for m in media: res = requests.get(m['media_url']) - img = Image.open(StringIO(res.content)) + img = Image.open(BytesIO(res.content)) img.show() except: printNicely(red('Sorry I can\'t show this image.')) @@ -504,7 +508,8 @@ def urlopen(): return tid = db.rainbow_to_tweet_query(g['stuff'])[0].tweet_id tweet = t.statuses.show(id=tid) - link_ary = [u for u in tweet['text'].split() if u.startswith('http://')] + link_ary = [ + u for u in tweet['text'].split() if u.startswith('http://')] if not link_ary: printNicely(light_magenta('No url here @.@!')) return @@ -514,7 +519,7 @@ def urlopen(): printNicely(red('Sorry I can\'t open url in this tweet.')) -def list(): +def ls(): """ List friends for followers """ @@ -550,9 +555,10 @@ def list(): rel[u['name']] = '@' + u['screen_name'] next_cursor = list['next_cursor'] # Print out result - printNicely('All: ' + str(len(rel)) + ' people.') + printNicely('All: ' + str(len(rel)) + ' ' + d[target] + '.') for name in rel: - user = ' ' + cycle_color(name) + grey(' ' + rel[name] + ' ') + user = ' ' + cycle_color(name) + user += color_func(c['TWEET']['nick'])(' ' + rel[name] + ' ') printNicely(user) @@ -744,7 +750,8 @@ def muting(): # Print out result printNicely('All: ' + str(len(rel)) + ' people.') for name in rel: - user = ' ' + cycle_color(name) + grey(' ' + rel[name] + ' ') + user = ' ' + cycle_color(name) + user += color_func(c['TWEET']['nick'])(' ' + rel[name] + ' ') printNicely(user) @@ -794,6 +801,274 @@ def report(): printNicely(red('Sorry I can\'t understand.')) +def get_slug(): + """ + Get Slug Decorator + """ + # Get list name + list_name = raw_input(light_magenta('Give me the list\'s name: ')) + # Get list name and owner + try: + owner, slug = list_name.split('/') + if slug.startswith('@'): + slug = slug[1:] + return owner, slug + except: + printNicely(light_magenta('List name should follow "@owner/list_name" format.')) + raise Exception('Wrong list name') + + +def show_lists(t): + """ + List list + """ + rel = t.lists.list(screen_name=g['original_name']) + if rel: + print_list(rel) + else: + printNicely(light_magenta('You belong to no lists :)')) + + +def list_home(t): + """ + List home + """ + owner, slug = get_slug() + res = t.lists.statuses( + slug=slug, + owner_screen_name=owner, + count=c['LIST_MAX'], + include_entities=False) + for tweet in res: + draw(t=tweet) + printNicely('') + + +def list_members(t): + """ + List members + """ + owner, slug = get_slug() + # Get members + rel = {} + next_cursor = -1 + while next_cursor != 0: + m = t.lists.members( + slug=slug, + owner_screen_name=owner, + cursor=next_cursor, + include_entities=False) + for u in m['users']: + rel[u['name']] = '@' + u['screen_name'] + next_cursor = m['next_cursor'] + printNicely('All: ' + str(len(rel)) + ' members.') + for name in rel: + user = ' ' + cycle_color(name) + user += color_func(c['TWEET']['nick'])(' ' + rel[name] + ' ') + printNicely(user) + + +def list_subscribers(t): + """ + List subscribers + """ + owner, slug = get_slug() + # Get subscribers + rel = {} + next_cursor = -1 + while next_cursor != 0: + m = t.lists.subscribers( + slug=slug, + owner_screen_name=owner, + cursor=next_cursor, + include_entities=False) + for u in m['users']: + rel[u['name']] = '@' + u['screen_name'] + next_cursor = m['next_cursor'] + printNicely('All: ' + str(len(rel)) + ' subscribers.') + for name in rel: + user = ' ' + cycle_color(name) + user += color_func(c['TWEET']['nick'])(' ' + rel[name] + ' ') + printNicely(user) + + +def list_add(t): + """ + Add specific user to a list + """ + owner, slug = get_slug() + # Add + user_name = raw_input(light_magenta('Give me name of the newbie: ')) + if user_name.startswith('@'): + user_name = user_name[1:] + try: + t.lists.members.create( + slug=slug, + owner_screen_name=owner, + screen_name=user_name) + printNicely(light_green('Added.')) + except: + printNicely(light_magenta('I\'m sorry we can not add him/her.')) + + +def list_remove(t): + """ + Remove specific user from a list + """ + owner, slug = get_slug() + # Remove + user_name = raw_input(light_magenta('Give me name of the unlucky one: ')) + if user_name.startswith('@'): + user_name = user_name[1:] + try: + t.lists.members.destroy( + slug=slug, + owner_screen_name=owner, + screen_name=user_name) + printNicely(light_green('Gone.')) + except: + printNicely(light_magenta('I\'m sorry we can not remove him/her.')) + + +def list_subscribe(t): + """ + Subscribe to a list + """ + owner, slug = get_slug() + # Subscribe + try: + t.lists.subscribers.create( + slug=slug, + owner_screen_name=owner) + printNicely(light_green('Done.')) + except: + printNicely( + light_magenta('I\'m sorry you can not subscribe to this list.')) + + +def list_unsubscribe(t): + """ + Unsubscribe a list + """ + owner, slug = get_slug() + # Subscribe + try: + t.lists.subscribers.destroy( + slug=slug, + owner_screen_name=owner) + printNicely(light_green('Done.')) + except: + printNicely( + light_magenta('I\'m sorry you can not unsubscribe to this list.')) + + +def list_own(t): + """ + List own + """ + rel = [] + next_cursor = -1 + while next_cursor != 0: + res = t.lists.ownerships( + screen_name=g['original_name'], + cursor=next_cursor) + rel += res['lists'] + next_cursor = res['next_cursor'] + if rel: + print_list(rel) + else: + printNicely(light_magenta('You own no lists :)')) + + +def list_new(t): + """ + Create a new list + """ + name = raw_input(light_magenta('New list\'s name: ')) + mode = raw_input(light_magenta('New list\'s mode (public/private): ')) + description = raw_input(light_magenta('New list\'s description: ')) + try: + t.lists.create( + name=name, + mode=mode, + description=description) + printNicely(light_green(name + ' list is created.')) + except: + printNicely(red('Oops something is wrong with Twitter :(')) + + +def list_update(t): + """ + Update a list + """ + slug = raw_input(light_magenta('Your list that you want to update: ')) + name = raw_input(light_magenta('Update name (leave blank to unchange): ')) + mode = raw_input(light_magenta('Update mode (public/private): ')) + description = raw_input(light_magenta('Update description: ')) + try: + if name: + t.lists.update( + slug='-'.join(slug.split()), + owner_screen_name=g['original_name'], + name=name, + mode=mode, + description=description) + else: + t.lists.update( + slug=slug, + owner_screen_name=g['original_name'], + mode=mode, + description=description) + printNicely(light_green(slug + ' list is updated.')) + except: + printNicely(red('Oops something is wrong with Twitter :(')) + + +def list_delete(t): + """ + Delete a list + """ + slug = raw_input(light_magenta('Your list that you want to update: ')) + try: + t.lists.destroy( + slug='-'.join(slug.split()), + owner_screen_name=g['original_name']) + printNicely(light_green(slug + ' list is deleted.')) + except: + printNicely(red('Oops something is wrong with Twitter :(')) + + +def list(): + """ + Twitter's list + """ + t = Twitter(auth=authen()) + # List all lists or base on action + try: + g['list_action'] = g['stuff'].split()[0] + except: + show_lists(t) + return + # Sub-function + action_ary = { + 'home': list_home, + 'all_mem': list_members, + 'all_sub': list_subscribers, + 'add': list_add, + 'rm': list_remove, + 'sub': list_subscribe, + 'unsub': list_unsubscribe, + 'own': list_own, + 'new': list_new, + 'update': list_update, + 'del': list_delete, + } + try: + return action_ary[g['list_action']](t) + except: + printNicely(red('Please try again.')) + + def cal(): """ Unix's command `cal` @@ -805,6 +1080,48 @@ def cal(): show_calendar(month, date, rel) +def config(): + """ + Browse and change config + """ + all_config = get_all_config() + g['stuff'] = g['stuff'].strip() + # List all config + if not g['stuff']: + for k in all_config: + line = ' '*2 + light_green(k) + ': ' + light_yellow(str(all_config[k])) + printNicely(line) + guide = 'Detailed explanation can be found at ' + \ + color_func(c['TWEET']['link'])('http://rainbowstream.readthedocs.org/en/latest/#config-explanation') + printNicely(guide) + # Print specific config + elif len(g['stuff'].split()) == 1: + if g['stuff'] in all_config: + k = g['stuff'] + line = ' '*2 + light_green(k) + ': ' + light_yellow(str(all_config[k])) + printNicely(line) + else: + printNicely(red('No config key like this.')) + # Print specific config's default value + elif len(g['stuff'].split()) == 2 and g['stuff'].split()[-1] == 'default': + key = g['stuff'].split()[0] + value = get_default_config(key) + line = ' '*2 + light_green(key) + ': ' + light_magenta(value) + printNicely(line) + # Set specific config + elif len(g['stuff'].split()) == 3 and g['stuff'].split()[1] == '=' : + key = g['stuff'].split()[0] + value = g['stuff'].split()[-1] + try: + set_config(key,value) + except: + printNicely(light_magenta('Not valid value.')) + return + reload_config() + else: + printNicely(light_magenta('Sorry I can\'s understand.')) + + def theme(): """ List and change theme @@ -812,42 +1129,26 @@ def theme(): if not g['stuff']: # List themes for theme in g['themes']: - line = '' - # Detect custom config - if theme == 'custom': - line += light_magenta('custom') - custom_path = os.environ.get( - 'HOME', - os.environ.get('USERPROFILE', - '')) + os.sep + '.rainbow_config.json' - if not os.path.exists(custom_path): - line += light_magenta(' (create your own config file at ~/.rainbow_config.json)') - else: - line += light_magenta(' (loaded)') + line = light_magenta(theme) + if c['THEME'] == theme: + line = ' ' * 2 + light_yellow('* ') + line else: - line += light_magenta(theme) - if c['theme'] == theme : - line = ' '*2 + light_yellow('* ') + line - else: - line = ' '*4 + line + line = ' ' * 4 + line printNicely(line) elif g['stuff'] == 'current_as_default': - # Set default - path = os.path.dirname(__file__) + '/colorset/init' - f = open(path,'w') - f.write(c['theme']) - f.close() - os.system('chmod 777 ' + path) + # Set as default + set_config('THEME',c['THEME']) printNicely(light_green('Okay it will be applied from next time :)')) else: # Change theme try: # Load new config if g['stuff'] != 'custom': - new_config = os.path.dirname(__file__) + '/colorset/' + g['stuff'] + '.json' + new_config = os.path.dirname( + __file__) + '/colorset/' + g['stuff'] + '.json' else: new_config = os.environ.get( - 'HOME',os.environ.get( + 'HOME', os.environ.get( 'USERPROFILE', '')) + os.sep + '.rainbow_config.json' new_config = load_config(new_config) @@ -856,38 +1157,23 @@ def theme(): c[nc] = new_config[nc] # Update db and reset colors db.theme_update(g['stuff']) - c['theme'] = g['stuff'] - reset_cycle() + c['THEME'] = g['stuff'] + start_cycle() g['decorated_name'] = color_func( c['DECORATED_NAME'])( '[@' + g['original_name'] + ']: ') printNicely(green('Theme changed.')) except: - if g['stuff'] == 'custom': - printNicely(red('~/.rainbow_config.json is not exists!')) - else: - printNicely(red('No such theme exists.')) + printNicely(red('No such theme exists.')) -def help(): +def help_discover(): """ - Help + Discover the world """ s = ' ' * 2 - h, w = os.popen('stty size', 'r').read().split() - - # Start - usage = '\n' - usage += s + 'Hi boss! I\'m ready to serve you right now!\n' - usage += s + '-' * (int(w) - 4) + '\n' - usage += s + 'You are ' + \ - light_yellow('already') + ' on your personal stream.\n' - usage += s + 'Any update from Twitter will show up ' + \ - light_yellow('immediately') + '.\n' - usage += s + 'In addtion, following commands are available right now:\n' - # Discover the world - usage += '\n' + usage = '\n' usage += s + grey(u'\u266A' + ' Discover the world \n') usage += s * 2 + light_green('trend') + ' will show global trending topics. ' + \ 'You can try ' + light_green('trend US') + ' or ' + \ @@ -900,11 +1186,19 @@ def help(): magenta('@mdo') + '.\n' usage += s * 2 + light_green('view @mdo') + \ ' will show ' + magenta('@mdo') + '\'s home.\n' - usage += s * 2 + light_green('s #AKB48') + ' will search for "' + \ - light_yellow('AKB48') + '" and return 5 newest tweet.\n' + usage += s * 2 + light_green('s AKB48') + ' will search for "' + \ + light_yellow('AKB48') + '" and return 5 newest tweet. ' + \ + 'Search can be performed with or without hashtag.\n' + printNicely(usage) + +def help_tweets(): + """ + Tweets + """ + s = ' ' * 2 # Tweet - usage += '\n' + usage = '\n' usage += s + grey(u'\u266A' + ' Tweets \n') usage += s * 2 + light_green('t oops ') + \ 'will tweet "' + light_yellow('oops') + '" immediately.\n' @@ -934,9 +1228,16 @@ def help(): light_yellow('[id=12]') + ' in your OS\'s image viewer.\n' usage += s * 2 + light_green('open 12') + ' will open url in tweet with ' + \ light_yellow('[id=12]') + ' in your OS\'s default browser.\n' + printNicely(usage) + +def help_messages(): + """ + Messages + """ + s = ' ' * 2 # Direct message - usage += '\n' + usage = '\n' usage += s + grey(u'\u266A' + ' Direct messages \n') usage += s * 2 + light_green('inbox') + ' will show inbox messages. ' + \ light_green('inbox 7') + ' will show newest 7 messages.\n' @@ -946,9 +1247,16 @@ def help(): magenta('@dtvd88') + '.\n' usage += s * 2 + light_green('trash 5') + ' will remove message with ' + \ light_yellow('[message_id=5]') + '.\n' + printNicely(usage) + +def help_friends_and_followers(): + """ + Friends and Followers + """ + s = ' ' * 2 # Follower and following - usage += '\n' + usage = '\n' usage += s + grey(u'\u266A' + ' Friends and followers \n') usage += s * 2 + \ light_green('ls fl') + \ @@ -971,9 +1279,53 @@ def help(): magenta('@dtvd88') + '.\n' usage += s * 2 + light_green('report @dtvd88') + ' will report ' + \ magenta('@dtvd88') + ' as a spam account.\n' + printNicely(usage) + + +def help_list(): + """ + Lists + """ + s = ' ' * 2 + # Twitter list + usage = '\n' + usage += s + grey(u'\u266A' + ' Twitter list\n') + usage += s * 2 + light_green('list') + \ + ' will show all lists you are belong to.\n' + usage += s * 2 + light_green('list home') + \ + ' will show timeline of list. You will be asked for list\'s name.\n' + usage += s * 2 + light_green('list all_mem') + \ + ' will show list\'s all members.\n' + usage += s * 2 + light_green('list all_sub') + \ + ' will show list\'s all subscribers.\n' + usage += s * 2 + light_green('list add') + \ + ' will add specific person to a list owned by you.' + \ + ' You will be asked for list\'s name and person\'s name.\n' + usage += s * 2 + light_green('list rm') + \ + ' will remove specific person from a list owned by you.' + \ + ' You will be asked for list\'s name and person\'s name.\n' + usage += s * 2 + light_green('list sub') + \ + ' will subscribe you to a specific list.\n' + usage += s * 2 + light_green('list unsub') + \ + ' will unsubscribe you from a specific list.\n' + usage += s * 2 + light_green('list own') + \ + ' will show all list owned by you.\n' + usage += s * 2 + light_green('list new') + \ + ' will create a new list.\n' + usage += s * 2 + light_green('list update') + \ + ' will update a list owned by you.\n' + usage += s * 2 + light_green('list del') + \ + ' will delete a list owned by you.\n' + printNicely(usage) + +def help_stream(): + """ + Stream switch + """ + s = ' ' * 2 # Switch - usage += '\n' + usage = '\n' usage += s + grey(u'\u266A' + ' Switching streams \n') usage += s * 2 + light_green('switch public #AKB') + \ ' will switch to public stream and follow "' + \ @@ -988,6 +1340,41 @@ def help(): ' filter will decide nicks will be EXCLUDE.\n' usage += s * 2 + light_green('switch mine -d') + \ ' will use the config\'s ONLY_LIST and IGNORE_LIST.\n' + printNicely(usage) + + +def help(): + """ + Help + """ + s = ' ' * 2 + h, w = os.popen('stty size', 'r').read().split() + + # Start + usage = '\n' + usage += s + 'Hi boss! I\'m ready to serve you right now!\n' + usage += s + '-' * (int(w) - 4) + '\n' + usage += s + 'You are ' + \ + light_yellow('already') + ' on your personal stream.\n' + usage += s + 'Any update from Twitter will show up ' + \ + light_yellow('immediately') + '.\n' + usage += s + 'In addtion, following commands are available right now:\n' + + # Twitter help section + usage += '\n' + usage += s + grey(u'\u266A' + ' Twitter help\n') + usage += s * 2 + light_green('h discover') + \ + ' will show help for discover commands.\n' + usage += s * 2 + light_green('h tweets') + \ + ' will show help for tweets commands.\n' + usage += s * 2 + light_green('h messages') + \ + ' will show help for messages commands.\n' + usage += s * 2 + light_green('h friends_and_followers') + \ + ' will show help for friends and followers commands.\n' + usage += s * 2 + light_green('h list') + \ + ' will show help for list commands.\n' + usage += s * 2 + light_green('h stream') + \ + ' will show help for stream commands.\n' # Smart shell usage += '\n' @@ -997,12 +1384,26 @@ def help(): usage += s * 2 + 'Even ' + light_green('cal') + ' will show the calendar' + \ ' for current month.\n' - # Screening + # Config usage += '\n' - usage += s + grey(u'\u266A' + ' Screening \n') - usage += s * 2 + light_green('theme') + ' will list available theme.' + \ + usage += s + grey(u'\u266A' + ' Config \n') + usage += s * 2 + light_green('theme') + ' will list available theme. ' + \ light_green('theme monokai') + ' will apply ' + light_yellow('monokai') + \ ' theme immediately.\n' + usage += s * 2 + light_green('config') + ' will list all config.\n' + usage += s * 3 + \ + light_green('config ASCII_ART') + ' will output current value of ' +\ + light_yellow('ASCII_ART') +' config key.\n' + usage += s * 3 + \ + light_green('config ASCII_ART default') + ' will output default value of ' + \ + light_yellow('ASCII_ART') +' config key.\n' + usage += s * 3 + \ + light_green('config ASCII_ART = False') + ' will set value of ' + \ + light_yellow('ASCII_ART') +' config key to ' + light_yellow('False') + '.\n' + + # Screening + usage += '\n' + usage += s + grey(u'\u266A' + ' Screening \n') usage += s * 2 + light_green('h') + ' will show this help again.\n' usage += s * 2 + light_green('c') + ' will clear the screen.\n' usage += s * 2 + light_green('q') + ' will quit.\n' @@ -1011,7 +1412,20 @@ def help(): usage += '\n' usage += s + '-' * (int(w) - 4) + '\n' usage += s + 'Have fun and hang tight! \n' - printNicely(usage) + + # Show help + d = { + 'discover': help_discover, + 'tweets': help_tweets, + 'messages': help_messages, + 'friends_and_followers': help_friends_and_followers, + 'list': help_list, + 'stream': help_stream, + } + if g['stuff']: + d[g['stuff'].strip()]() + else: + printNicely(usage) def clear(): @@ -1068,7 +1482,7 @@ def process(cmd): message, show, urlopen, - list, + ls, inbox, sent, trash, @@ -1081,7 +1495,9 @@ def process(cmd): block, unblock, report, + list, cal, + config, theme, help, clear, @@ -1127,9 +1543,30 @@ def listen(): ['@'], # block ['@'], # unblock ['@'], # report + [ + 'home', + 'all_mem', + 'all_sub', + 'add', + 'rm', + 'sub', + 'unsub', + 'own', + 'new', + 'update', + 'del' + ], # list [], # cal + [key for key in dict(get_all_config())], # config g['themes'] + ['current_as_default'], # theme - [], # help + [ + 'discover', + 'tweets', + 'messages', + 'friends_and_followers', + 'list', + 'stream' + ], # help [], # clear [], # quit ] @@ -1147,18 +1584,22 @@ def listen(): except: cmd = '' g['cmd'] = cmd - # Save cmd to global variable and call process try: + # Lock the semaphore + db.semaphore_update(True) + # Save cmd to global variable and call process g['stuff'] = ' '.join(line.split()[1:]) + # Process the command process(cmd)() - except Exception,e : - print e + # Not re-display + if cmd in ['switch', 't', 'rt', 'rep']: + g['prefix'] = False + else: + g['prefix'] = True + # Release the semaphore lock + db.semaphore_update(False) + except Exception: printNicely(red('OMG something is wrong with Twitter right now.')) - # Not redisplay prefix - if cmd in ['switch', 't', 'rt', 'rep']: - g['prefix'] = False - else: - g['prefix'] = True def stream(domain, args, name='Rainbow Stream'): @@ -1170,9 +1611,9 @@ def stream(domain, args, name='Rainbow Stream'): art_dict = { c['USER_DOMAIN']: name, c['PUBLIC_DOMAIN']: args.track_keywords, - c['SITE_DOMAIN']: 'Site Stream', + c['SITE_DOMAIN']: name, } - if g['ascii_art']: + if c['ASCII_ART']: ascii_art(art_dict[domain]) # These arguments are optional: @@ -1218,6 +1659,7 @@ def stream(domain, args, name='Rainbow Stream'): t=tweet, iot=args.image_on_term, keyword=args.track_keywords, + check_semaphore=True, fil=args.filter, ig=args.ignore, ) @@ -1239,8 +1681,9 @@ def fly(): except TwitterHTTPError: printNicely('') printNicely( - magenta("I'm afraid we have maximum connection problem with twitter right now :(")) - printNicely(magenta("Let's try again later.")) + magenta("Something wrong with Twitter Oauth right now :(")) + printNicely( + magenta("Please delete ~/.rainbow_oauth and try again.")) save_history() os.system('rm -rf rainbow.db') sys.exit() @@ -1248,7 +1691,7 @@ def fly(): p = Process( target=stream, args=( - c['USER_DOMAIN'], + c['USER_DOMAIN'], args, g['original_name'])) p.start()