# Lock for streams
StreamLock = threading.Lock()
-# Commands
-cmdset = [
- 'switch',
- 'trend',
- 'home',
- 'view',
- 'mentions',
- 't',
- 'rt',
- 'quote',
- 'allrt',
- 'fav',
- 'rep',
- 'del',
- 'ufav',
- 's',
- 'mes',
- 'show',
- 'open',
- 'ls',
- 'inbox',
- 'sent',
- 'trash',
- 'whois',
- 'fl',
- 'ufl',
- 'mute',
- 'unmute',
- 'muting',
- 'block',
- 'unblock',
- 'report',
- 'list',
- 'cal',
- 'config',
- 'theme',
- 'h',
- 'p',
- 'r',
- 'c',
- 'q'
-]
-
def parse_arguments():
"""
'-to',
'--timeout',
help='Timeout for the stream (seconds).')
- parser.add_argument(
- '-ht',
- '--heartbeat-timeout',
- help='Set heartbeat timeout.',
- default=90)
- parser.add_argument(
- '-nb',
- '--no-block',
- action='store_true',
- help='Set stream to non-blocking.')
parser.add_argument(
'-tt',
'--track-keywords',
themes = [f.split('.')[0] for f in files if f.split('.')[-1] == 'json']
g['themes'] = themes
# Startup cmd
- g['previous_cmd'] = ''
+ g['cmd'] = ''
# Semaphore init
c['lock'] = False
c['pause'] = False
"""
Quote a tweet
"""
+ # Get tweet
t = Twitter(auth=authen())
try:
id = int(g['stuff'].split()[0])
return
tid = c['tweet_dict'][id]
tweet = t.statuses.show(id=tid)
- screen_name = tweet['user']['screen_name']
- text = tweet['text']
- quote = '\"@' + screen_name + ': ' + text + '\"'
- quote = quote.encode('utf8')
- notice = light_magenta('Compose mode ')
- notice += light_yellow('(Enter nothing will cancel the quote)')
- notice += light_magenta(':')
- printNicely(notice)
- extra = raw_input(quote)
- if extra:
- t.statuses.update(status=quote + extra)
+ # Get formater
+ formater = format_quote(tweet)
+ if not formater:
+ return
+ # Get comment
+ prefix = light_magenta('Compose your ') + light_green('#comment: ')
+ comment = raw_input(prefix)
+ if comment:
+ quote = comment.join(formater.split('#comment'))
+ t.statuses.update(status=quote)
else:
printNicely(light_magenta('No text added.'))
tid = c['tweet_dict'][id]
user = t.statuses.show(id=tid)['user']['screen_name']
status = ' '.join(g['stuff'].split()[1:])
- status = '@' + user + ' ' + unc(status)
+ status = '@' + user + ' ' + str2u(status)
t.statuses.update(status=status, in_reply_to_status_id=tid)
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'
+ usage += s + 'In addition, following commands are available right now:\n'
# Twitter help section
usage += '\n'
usage += s + grey(u'\u266A' + ' Twitter help\n')
pass
+# Command set
+cmdset = [
+ 'switch',
+ 'trend',
+ 'home',
+ 'view',
+ 'mentions',
+ 't',
+ 'rt',
+ 'quote',
+ 'allrt',
+ 'fav',
+ 'rep',
+ 'del',
+ 'ufav',
+ 's',
+ 'mes',
+ 'show',
+ 'open',
+ 'ls',
+ 'inbox',
+ 'sent',
+ 'trash',
+ 'whois',
+ 'fl',
+ 'ufl',
+ 'mute',
+ 'unmute',
+ 'muting',
+ 'block',
+ 'unblock',
+ 'report',
+ 'list',
+ 'cal',
+ 'config',
+ 'theme',
+ 'h',
+ 'p',
+ 'r',
+ 'c',
+ 'q'
+]
+
+# Handle function set
+funcset = [
+ switch,
+ trend,
+ home,
+ view,
+ mentions,
+ tweet,
+ retweet,
+ quote,
+ allretweet,
+ favorite,
+ reply,
+ delete,
+ unfavorite,
+ search,
+ message,
+ show,
+ urlopen,
+ ls,
+ inbox,
+ sent,
+ trash,
+ whois,
+ follow,
+ unfollow,
+ mute,
+ unmute,
+ muting,
+ block,
+ unblock,
+ report,
+ twitterlist,
+ cal,
+ config,
+ theme,
+ help,
+ pause,
+ replay,
+ clear,
+ quit
+]
+
+
def process(cmd):
"""
Process switch
"""
- return dict(zip(
- cmdset,
- [
- switch,
- trend,
- home,
- view,
- mentions,
- tweet,
- retweet,
- quote,
- allretweet,
- favorite,
- reply,
- delete,
- unfavorite,
- search,
- message,
- show,
- urlopen,
- ls,
- inbox,
- sent,
- trash,
- whois,
- follow,
- unfollow,
- mute,
- unmute,
- muting,
- block,
- unblock,
- report,
- twitterlist,
- cal,
- config,
- theme,
- help,
- pause,
- replay,
- clear,
- quit
- ]
- )).get(cmd, reset)
+ return dict(zip(cmdset, funcset)).get(cmd, reset)
def listen():
line = raw_input(g['decorated_name'](c['PREFIX']))
else:
line = raw_input()
- # Save previous cmd in order to compare with readline buffer
- g['previous_cmd'] = line.strip()
- # Get short cmd to filter
+ # Save cmd to compare with readline buffer
+ g['cmd'] = line.strip()
+ # Get short cmd to pass to handle function
try:
cmd = line.split()[0]
except:
cmd = ''
- # Save whold the entire cmd
- g['cmd'] = line
try:
# Lock the semaphore
c['lock'] = True
# These arguments are optional:
stream_args = dict(
timeout=0.5, # To check g['stream_stop'] after each 0.5 s
- block=not args.no_block,
- heartbeat_timeout=args.heartbeat_timeout)
+ block=True,
+ heartbeat_timeout=c['HEARTBEAT_TIMEOUT'] * 60)
# Track keyword
query_args = dict()
if args.track_keywords:
break
elif tweet is HeartbeatTimeout:
printNicely("-- Heartbeat Timeout --")
+ guide = light_magenta("You can use ") + \
+ light_green("switch") + \
+ light_magenta(" command to return to your stream.\n")
+ guide += light_magenta("Type ") + \
+ light_green("h stream") + \
+ light_magenta(" for more details.")
+ printNicely(guide)
+ sys.stdout.write(g['decorated_name'](c['PREFIX']))
+ sys.stdout.flush()
+ StreamLock.release()
+ break
elif tweet is Hangup:
printNicely("-- Hangup --")
elif tweet.get('text'):
# 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:
+ if current_buffer and g['cmd'] != current_buffer:
sys.stdout.write(
- g['decorated_name'](c['PREFIX']) + unc(current_buffer))
+ g['decorated_name'](c['PREFIX']) + str2u(current_buffer))
sys.stdout.flush()
elif not c['HIDE_PROMPT']:
sys.stdout.write(g['decorated_name'](c['PREFIX']))