X-Git-Url: https://vcs.fsf.org/?p=rainbowstream.git;a=blobdiff_plain;f=rainbowstream%2Frainbow.py;h=bb34bdbe36e28c27a4c98672bf8e42fbf0e5fb05;hp=742930e0a53f14297120a62fcf589be05d1e7b22;hb=3343f4cf008e1b517a7af3e43ae7eb2cf0a46eaf;hpb=a99609e63f7e3bc425fb70166c237e689b106430 diff --git a/rainbowstream/rainbow.py b/rainbowstream/rainbow.py index 742930e..bb34bdb 100644 --- a/rainbowstream/rainbow.py +++ b/rainbowstream/rainbow.py @@ -44,7 +44,7 @@ def parse_arguments(): parser.add_argument( '-s', '--stream', - default="mine", + default="mine", help='Default stream after program start. (Default: mine)') parser.add_argument( '-to', @@ -67,6 +67,11 @@ def parse_arguments(): '--image-on-term', action='store_true', help='Display all image on terminal.') + parser.add_argument( + '-24', + '--color-24bit', + action='store_true', + help='Display images using 24bit color codes.') parser.add_argument( '-ph', '--proxy-host', @@ -176,7 +181,8 @@ def upgrade_center(): url = 'https://raw.githubusercontent.com/DTVD/rainbowstream/master/setup.py' readme = requests.get(url).text latest = readme.split('version = \'')[1].split('\'')[0] - if current != latest: + g['using_latest'] = current == latest + if not g['using_latest']: notice = light_magenta('RainbowStream latest version is ') notice += light_green(latest) notice += light_magenta(' while your current version is ') @@ -188,7 +194,7 @@ def upgrade_center(): notice = light_yellow('You are running latest version (') notice += light_green(current) notice += light_yellow(')') - printNicely(notice) + notice += '\n' except: pass @@ -234,6 +240,10 @@ def init(args): # Image on term c['IMAGE_ON_TERM'] = args.image_on_term set_config('IMAGE_ON_TERM', str(c['IMAGE_ON_TERM'])) + # Use 24 bit color + c['24BIT'] = args.color_24bit + # Resize images based on the current terminal size + set_config('IMAGE_RESIZE_TO_FIT', str(c.get('IMAGE_RESIZE_TO_FIT', False))) # Check type of ONLY_LIST and IGNORE_LIST if not isinstance(c['ONLY_LIST'], list): printNicely(red('ONLY_LIST is not a valid list value.')) @@ -365,6 +375,21 @@ def view(): printNicely(red('A name should begin with a \'@\'')) +def view_my_tweets(): + """ + Display user's recent tweets. + """ + t = Twitter(auth=authen()) + try: + num = int(g['stuff']) + except: + num = c['HOME_TWEET_NUM'] + for tweet in reversed( + t.statuses.user_timeline(count=num, screen_name=g['original_name'])): + draw(t=tweet) + printNicely('') + + def search(): """ Search @@ -643,14 +668,14 @@ def urlopen(): return tid = c['tweet_dict'][int(g['stuff'])] tweet = t.statuses.show(id=tid) - link_prefix = ('http://', 'https://') - link_ary = [u for u in tweet['text'].split() - if u.startswith(link_prefix)] - if not link_ary: + urls = tweet['entities']['urls'] + if not urls: printNicely(light_magenta('No url here @.@!')) return - for link in link_ary: - webbrowser.open(link) + else: + for url in urls: + expanded_url = url['expanded_url'] + webbrowser.open(expanded_url) except: debug_option() printNicely(red('Sorry I can\'t open url in this tweet.')) @@ -860,7 +885,7 @@ def mute(): rel = t.mutes.users.create(screen_name=screen_name[1:]) if isinstance(rel, dict): printNicely(green(screen_name + ' is muted.')) - c['IGNORE_LIST'] += [unc(screen_name)] + c['IGNORE_LIST'] += [screen_name] c['IGNORE_LIST'] = list(set(c['IGNORE_LIST'])) else: printNicely(red(rel)) @@ -1291,7 +1316,7 @@ def switch(): return # Kill old thread g['stream_stop'] = True - try: + try: stuff = g['stuff'].split()[1] except: stuff = None @@ -1430,6 +1455,8 @@ def help_discover(): light_green('trend JP Tokyo') + '.\n' usage += s * 2 + light_green('home') + ' will show your timeline. ' + \ light_green('home 7') + ' will show 7 tweets.\n' + usage += s * 2 + light_green('me') + ' will show your latest tweets. ' + \ + light_green('me 2') + ' will show your last 2 tweets.\n' usage += s * 2 + \ light_green('notification') + ' will show your recent notification.\n' usage += s * 2 + light_green('mentions') + ' will show mentions timeline. ' + \ @@ -1754,6 +1781,7 @@ cmdset = [ 't', 'rt', 'quote', + 'me', 'allrt', 'conversation', 'fav', @@ -1802,6 +1830,7 @@ funcset = [ tweet, retweet, quote, + view_my_tweets, allretweet, conversation, favorite, @@ -1863,6 +1892,7 @@ def listen(): [], # tweet [], # retweet [], # quote + [], # view_my_tweets [], # allretweet [], # conversation [], # favorite @@ -1941,6 +1971,7 @@ def listen(): c['lock'] = True # Save cmd to global variable and call process g['stuff'] = ' '.join(line.split()[1:]) + # Check tweet length # Process the command process(cmd)() # Not re-display @@ -1948,13 +1979,16 @@ def listen(): g['prefix'] = False else: g['prefix'] = True - # Release the semaphore lock - c['lock'] = False except EOFError: printNicely('') + except TwitterHTTPError as e: + detail_twitter_error(e) except Exception: debug_option() - printNicely(red('OMG something is wrong with Twitter right now.')) + printNicely(red('OMG something is wrong with Twitter API right now.')) + finally: + # Release the semaphore lock + c['lock'] = False def reconn_notice(): @@ -2079,7 +2113,7 @@ def stream(domain, args, name='Rainbow Stream'): detail_twitter_error(e) sys.stdout.write(g['decorated_name'](g['PREFIX'])) sys.stdout.flush() - except (URLError, ConnectionResetError): + except (URLError): printNicely( magenta('There seems to be a connection problem.')) save_history() @@ -2209,7 +2243,7 @@ def fly(): # Spawn stream thread target = args.stream.split()[0] - if target == 'mine' : + if target == 'mine': spawn_personal_stream(args) else: try: