X-Git-Url: https://vcs.fsf.org/?p=rainbowstream.git;a=blobdiff_plain;f=rainbowstream%2Fdraw.py;h=a94750682dda5753ead9be7092acc3a48cad3e90;hp=e8cbcaf031745e445f85c115f2583fea4c01aa22;hb=66fe9f758d24e00cc7f4264a420e2a1507aac0af;hpb=1185824138756716dcce73b834cdbd23c8e233c0 diff --git a/rainbowstream/draw.py b/rainbowstream/draw.py index e8cbcaf..a947506 100644 --- a/rainbowstream/draw.py +++ b/rainbowstream/draw.py @@ -15,6 +15,7 @@ from .c_image import * from .colors import * from .config import * from .py3patch import * +from .emoji import * # Draw global variables dg = {} @@ -37,6 +38,7 @@ def start_cycle(): """ dg['cyc'] = init_cycle() dg['cache'] = {} + dg['humanize_unsupported'] = False def order_rainbow(s): @@ -145,6 +147,33 @@ def color_func(func_name): return globals()[func_name] +def fallback_humanize(date, fallback_format=None, use_fallback=False): + """ + Format date with arrow and a fallback format + """ + # Convert to local timezone + date = arrow.get(date).to('local') + # Set default fallback format + if not fallback_format: + fallback_format = '%Y/%m/%d %H:%M:%S' + # Determine using fallback format or not by a variable + if use_fallback: + return date.datetime.strftime(fallback_format) + try: + # Use Arrow's humanize function + lang, encode = locale.getdefaultlocale() + clock = date.humanize(locale=lang) + except: + # Notice at the 1st time only + if not dg['humanize_unsupported']: + dg['humanize_unsupported'] = True + printNicely( + light_magenta('Humanized date display method does not support your $LC_ALL.')) + # Fallback when LC_ALL is not supported + clock = date.datetime.strftime(fallback_format) + return clock + + def draw(t, keyword=None, humanize=True, noti=False, fil=[], ig=[]): """ Draw the rainbow @@ -161,17 +190,13 @@ def draw(t, keyword=None, humanize=True, noti=False, fil=[], ig=[]): favorited = t['favorited'] retweet_count = t['retweet_count'] favorite_count = t['favorite_count'] + client = t['source'] date = parser.parse(created_at) - date = arrow.get(date).to('local') - if humanize: - lang, encode = locale.getdefaultlocale() - clock = arrow.get(date).to('local').humanize(locale=lang) - else: - try: - clock_format = c['FORMAT']['TWEET']['CLOCK_FORMAT'] - except: - clock_format = '%Y/%m/%d %H:%M:%S' - clock = date.datetime.strftime(clock_format) + try: + clock_format = c['FORMAT']['TWEET']['CLOCK_FORMAT'] + except: + clock_format = '%Y/%m/%d %H:%M:%S' + clock = fallback_humanize(date, clock_format, not humanize) # Pull extended retweet text try: @@ -191,6 +216,12 @@ def draw(t, keyword=None, humanize=True, noti=False, fil=[], ig=[]): # Unescape HTML character text = unescape(text) + # Get client name + try: + client = client.split('>')[-2].split('<')[0] + except: + client = None + # Get expanded url try: expanded_url = [] @@ -297,6 +328,7 @@ def draw(t, keyword=None, humanize=True, noti=False, fil=[], ig=[]): formater = nick.join(formater.split('#nick')) formater = fav.join(formater.split('#fav')) formater = tweet.join(formater.split('#tweet')) + formater = emojize(formater) # Change clock word word = [wo for wo in formater.split() if '#clock' in wo][0] delimiter = color_func(c['TWEET']['clock'])( @@ -316,6 +348,11 @@ def draw(t, keyword=None, humanize=True, noti=False, fil=[], ig=[]): delimiter = color_func(c['TWEET']['favorite_count'])( str(favorite_count).join(word.split('#fa_count'))) formater = delimiter.join(formater.split(word)) + # Change client word + word = [wo for wo in formater.split() if '#client' in wo][0] + delimiter = color_func(c['TWEET']['client'])( + client.join(word.split('#client'))) + formater = delimiter.join(formater.split(word)) except: pass @@ -460,6 +497,7 @@ def print_right_message(m): word = [wo for wo in formater.split() if '#id' in wo][0] delimiter = color_func(c['MESSAGE']['id'])(id.join(word.split('#id'))) formater = delimiter.join(formater.split(word)) + formater = emojize(formater) except Exception: printNicely(red('Wrong format in config.')) return @@ -524,6 +562,7 @@ def print_left_message(m): word = [wo for wo in formater.split() if '#id' in wo][0] delimiter = color_func(c['MESSAGE']['id'])(id.join(word.split('#id'))) formater = delimiter.join(formater.split(word)) + formater = emojize(formater) except Exception: printNicely(red('Wrong format in config.')) return @@ -589,6 +628,7 @@ def print_message(m): word = [wo for wo in formater.split() if '#id' in wo][0] delimiter = color_func(c['MESSAGE']['id'])(id.join(word.split('#id'))) formater = delimiter.join(formater.split(word)) + formater = emojize(formater) except: printNicely(red('Wrong format in config.')) return @@ -610,14 +650,13 @@ def notify_retweet(t): notify = color_func(c['NOTIFICATION']['notify'])( 'retweeted your tweet') date = parser.parse(created_at) - date = arrow.get(date).to('local') - lang, encode = locale.getdefaultlocale() - clock = arrow.get(date).to('local').humanize(locale=lang) + clock = fallback_humanize(date) clock = color_func(c['NOTIFICATION']['clock'])(clock) meta = c['NOTIFY_FORMAT'] meta = source_user.join(meta.split('#source_user')) meta = notify.join(meta.split('#notify')) meta = clock.join(meta.split('#clock')) + meta = emojize(meta) # Output printNicely('') printNicely(meta) @@ -642,14 +681,13 @@ def notify_favorite(e): notify = color_func(c['NOTIFICATION']['notify'])( 'favorited your tweet') date = parser.parse(created_at) - date = arrow.get(date).to('local') - lang, encode = locale.getdefaultlocale() - clock = arrow.get(date).to('local').humanize(locale=lang) + clock = fallback_humanize(date) clock = color_func(c['NOTIFICATION']['clock'])(clock) meta = c['NOTIFY_FORMAT'] meta = source_user.join(meta.split('#source_user')) meta = notify.join(meta.split('#notify')) meta = clock.join(meta.split('#clock')) + meta = emojize(meta) # Output printNicely('') printNicely(meta) @@ -674,14 +712,13 @@ def notify_unfavorite(e): notify = color_func(c['NOTIFICATION']['notify'])( 'unfavorited your tweet') date = parser.parse(created_at) - date = arrow.get(date).to('local') - lang, encode = locale.getdefaultlocale() - clock = arrow.get(date).to('local').humanize(locale=lang) + clock = fallback_humanize(date) clock = color_func(c['NOTIFICATION']['clock'])(clock) meta = c['NOTIFY_FORMAT'] meta = source_user.join(meta.split('#source_user')) meta = notify.join(meta.split('#notify')) meta = clock.join(meta.split('#clock')) + meta = emojize(meta) # Output printNicely('') printNicely(meta) @@ -705,14 +742,13 @@ def notify_follow(e): notify = color_func(c['NOTIFICATION']['notify'])( 'followed you') date = parser.parse(created_at) - date = arrow.get(date).to('local') - lang, encode = locale.getdefaultlocale() - clock = arrow.get(date).to('local').humanize(locale=lang) + clock = fallback_humanize(date) clock = color_func(c['NOTIFICATION']['clock'])(clock) meta = c['NOTIFY_FORMAT'] meta = source_user.join(meta.split('#source_user')) meta = notify.join(meta.split('#notify')) meta = clock.join(meta.split('#clock')) + meta = emojize(meta) # Output printNicely('') printNicely(meta) @@ -736,14 +772,13 @@ def notify_list_member_added(e): notify = color_func(c['NOTIFICATION']['notify'])( 'added you to a list') date = parser.parse(created_at) - date = arrow.get(date).to('local') - lang, encode = locale.getdefaultlocale() - clock = arrow.get(date).to('local').humanize(locale=lang) + clock = fallback_humanize(date) clock = color_func(c['NOTIFICATION']['clock'])(clock) meta = c['NOTIFY_FORMAT'] meta = source_user.join(meta.split('#source_user')) meta = notify.join(meta.split('#notify')) meta = clock.join(meta.split('#clock')) + meta = emojize(meta) # Output printNicely('') printNicely(meta) @@ -768,14 +803,13 @@ def notify_list_member_removed(e): notify = color_func(c['NOTIFICATION']['notify'])( 'removed you from a list') date = parser.parse(created_at) - date = arrow.get(date).to('local') - lang, encode = locale.getdefaultlocale() - clock = arrow.get(date).to('local').humanize(locale=lang) + clock = fallback_humanize(date) clock = color_func(c['NOTIFICATION']['clock'])(clock) meta = c['NOTIFY_FORMAT'] meta = source_user.join(meta.split('#source_user')) meta = notify.join(meta.split('#notify')) meta = clock.join(meta.split('#clock')) + meta = emojize(meta) # Output printNicely('') printNicely(meta) @@ -800,14 +834,13 @@ def notify_list_user_subscribed(e): notify = color_func(c['NOTIFICATION']['notify'])( 'subscribed to your list') date = parser.parse(created_at) - date = arrow.get(date).to('local') - lang, encode = locale.getdefaultlocale() - clock = arrow.get(date).to('local').humanize(locale=lang) + clock = fallback_humanize(date) clock = color_func(c['NOTIFICATION']['clock'])(clock) meta = c['NOTIFY_FORMAT'] meta = source_user.join(meta.split('#source_user')) meta = notify.join(meta.split('#notify')) meta = clock.join(meta.split('#clock')) + meta = emojize(meta) # Output printNicely('') printNicely(meta) @@ -832,27 +865,19 @@ def notify_list_user_unsubscribed(e): notify = color_func(c['NOTIFICATION']['notify'])( 'unsubscribed from your list') date = parser.parse(created_at) - date = arrow.get(date).to('local') - lang, encode = locale.getdefaultlocale() - clock = arrow.get(date).to('local').humanize(locale=lang) + clock = fallback_humanize(date) clock = color_func(c['NOTIFICATION']['clock'])(clock) meta = c['NOTIFY_FORMAT'] meta = source_user.join(meta.split('#source_user')) meta = notify.join(meta.split('#notify')) meta = clock.join(meta.split('#clock')) + meta = emojize(meta) # Output printNicely('') printNicely(meta) print_list(target_object, noti=True) -def nothing(e): - """ - Do nothing for other event - """ - return - - def print_event(e): """ Notify an event @@ -867,7 +892,7 @@ def print_event(e): 'list_user_subscribed': notify_list_user_subscribed, 'list_user_unsubscribed': notify_list_user_unsubscribed, } - event_dict.get(e['event'],nothing)(e) + event_dict.get(e['event'], lambda *args: None)(e) def show_profile(u): @@ -910,8 +935,7 @@ def show_profile(u): location = 'Location : ' + color_func(c['PROFILE']['location'])(location) url = 'URL : ' + (color_func(c['PROFILE']['url'])(url) if url else '') date = parser.parse(created_at) - lang, encode = locale.getdefaultlocale() - clock = arrow.get(date).to('local').humanize(locale=lang) + clock = fallback_humanize(date) clock = 'Join at ' + color_func(c['PROFILE']['clock'])(clock) # Format @@ -989,8 +1013,7 @@ def print_list(group, noti=False): mode = color_func(c['GROUP']['mode'])('Type: ' + mode) created_at = grp['created_at'] date = parser.parse(created_at) - lang, encode = locale.getdefaultlocale() - clock = arrow.get(date).to('local').humanize(locale=lang) + clock = fallback_humanize(date) clock = 'Created at ' + color_func(c['GROUP']['clock'])(clock) prefix = ' ' * 2 @@ -1055,6 +1078,7 @@ def format_quote(tweet): formater = screen_name.join(formater.split('#owner')) formater = text.join(formater.split('#tweet')) formater = u2str(formater) + formater = emojize(formater) except: pass # Highlight like a tweet