X-Git-Url: https://vcs.fsf.org/?p=rainbowstream.git;a=blobdiff_plain;f=rainbowstream%2Frainbow.py;h=71fb44183eca51a4c67cdfcf61ff7cc05e39aa1a;hp=5241f0d70a05b030d6756e6026ca896db3803154;hb=b9eeb635b2a477abf9a166a01c582b76ccafc182;hpb=04610460050d47adec2e7b9c8a354b6ee99a6317 diff --git a/rainbowstream/rainbow.py b/rainbowstream/rainbow.py index 5241f0d..71fb441 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'].split()[1]) + 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 @@ -530,11 +555,13 @@ def reply_all(): tid = c['tweet_dict'][id] original_tweet = t.statuses.show(id=tid) text = original_tweet['text'] - owner = '@' + original_tweet['user']['screen_name'] - nick_ary = ['@' + re.sub('[\W_]', '', w) - for w in text.split() if w.startswith('@')] + [owner] + nick_ary = [original_tweet['user']['screen_name']] + for user in list(original_tweet['entities']['user_mentions']): + if user['screen_name'] not in nick_ary \ + and user['screen_name'] != g['original_name']: + nick_ary.append(user['screen_name']) status = ' '.join(g['stuff'].split()[1:]) - status = ' '.join(nick_ary) + ' ' + str2u(status) + status = ' '.join(['@' + nick for nick in nick_ary]) + ' ' + str2u(status) t.statuses.update(status=status, in_reply_to_status_id=tid) @@ -641,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.')) @@ -1289,7 +1316,7 @@ def switch(): return # Kill old thread g['stream_stop'] = True - try: + try: stuff = g['stuff'].split()[1] except: stuff = None @@ -1752,6 +1779,7 @@ cmdset = [ 't', 'rt', 'quote', + 'mytw', 'allrt', 'conversation', 'fav', @@ -1800,6 +1828,7 @@ funcset = [ tweet, retweet, quote, + view_my_tweets, allretweet, conversation, favorite, @@ -1861,6 +1890,7 @@ def listen(): [], # tweet [], # retweet [], # quote + [], # view_my_tweets [], # allretweet [], # conversation [], # favorite @@ -1939,6 +1969,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 @@ -1950,9 +1981,11 @@ def listen(): 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.')) def reconn_notice(): @@ -2077,7 +2110,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() @@ -2207,7 +2240,7 @@ def fly(): # Spawn stream thread target = args.stream.split()[0] - if target == 'mine' : + if target == 'mine': spawn_personal_stream(args) else: try: