From d6cc4c67f3bf71ea6a434fdb438d23a08ff814e9 Mon Sep 17 00:00:00 2001 From: Orakaro Date: Sun, 27 Jul 2014 20:26:31 +0900 Subject: [PATCH] pause + replay --- docs/index.rst | 8 ++++-- rainbowstream/colorset/config | 2 +- rainbowstream/db.py | 32 +++++++++++++++++---- rainbowstream/draw.py | 8 ++++-- rainbowstream/rainbow.py | 54 +++++++++++++++++++++++++---------- rainbowstream/table_def.py | 4 ++- setup.py | 2 +- 7 files changed, 82 insertions(+), 28 deletions(-) diff --git a/docs/index.rst b/docs/index.rst index fc306ad..a9a3e00 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -61,7 +61,7 @@ You can try it with: rainbowstream -iot # Or rainbowstream --image-on-term -You also can change the config key ``IMAGE_ON_TERM`` to ``True`` inside the app +You also can change the config key ``IMAGE_ON_TERM`` to ``True`` inside the app to enable above feature (see `config management`_ section). In the first time you will be asked for authorization of Rainbow Stream @@ -233,6 +233,10 @@ Here is full list of supported command: - ``h`` will show the help. +- ``p`` will pause the stream. + +- ``r`` will unpause the stream. + - ``c`` will clear the screen. - ``q`` will quit. @@ -311,7 +315,7 @@ You can view or set a new value of every config key by ``config`` command (See * + ``CLOCK_FORMAT``: time format, see `Python's strftime format`_. + ``DISPLAY``: decide how tweet will be printed. - + + ``#name``: Twitter's name + ``#nick``: Twitter's screen name + ``#clock``: Datetime diff --git a/rainbowstream/colorset/config b/rainbowstream/colorset/config index d2388d8..173f522 100644 --- a/rainbowstream/colorset/config +++ b/rainbowstream/colorset/config @@ -35,7 +35,7 @@ "FORMAT": { "TWEET": { "CLOCK_FORMAT" : "%Y/%m/%d %H:%M:%S", - "DISPLAY" : "\n #name #nick:\n [#clock] [id=#id] #fav\n #tweet" + "DISPLAY" : "\n #name #nick :\n [#clock] [id=#id] #fav\n #tweet" }, "MESSAGE": { "CLOCK_FORMAT" : "%Y/%m/%d %H:%M:%S", diff --git a/rainbowstream/db.py b/rainbowstream/db.py index 8f4ce40..58cc4b5 100644 --- a/rainbowstream/db.py +++ b/rainbowstream/db.py @@ -113,18 +113,18 @@ class RainbowDB(): return res - def semaphore_store(self, flag): + def semaphore_store(self, flag, pause): """ Store semaphore flag """ Session = sessionmaker(bind=self.engine) session = Session() - th = Semaphore(flag) + th = Semaphore(flag, pause) session.add(th) session.commit() - def semaphore_update(self, flag): + def semaphore_update_flag(self, flag): """ Update semaphore flag """ @@ -136,11 +136,33 @@ class RainbowDB(): session.commit() - def semaphore_query(self): + def semaphore_update_pause(self, pause): """ - Query semaphore + Update semaphore pause + """ + Session = sessionmaker(bind=self.engine) + session = Session() + res = session.query(Semaphore).all() + for r in res: + r.pause = pause + session.commit() + + + def semaphore_query_flag(self): + """ + Query semaphore flag """ Session = sessionmaker(bind=self.engine) session = Session() res = session.query(Semaphore).all() return res[0].flag + + + def semaphore_query_pause(self): + """ + Query semaphore pause + """ + Session = sessionmaker(bind=self.engine) + session = Session() + res = session.query(Semaphore).all() + return res[0].pause diff --git a/rainbowstream/draw.py b/rainbowstream/draw.py index 0140137..0be6ece 100644 --- a/rainbowstream/draw.py +++ b/rainbowstream/draw.py @@ -234,7 +234,7 @@ def draw(t, keyword=None, check_semaphore=False, fil=[], ig=[]): # Format info name = cycle_color(name) - nick = color_func(c['TWEET']['nick'])(' ' + screen_name + ' ') + nick = color_func(c['TWEET']['nick'])(screen_name) clock = clock id = str(rid) fav = '' @@ -294,9 +294,11 @@ def draw(t, keyword=None, check_semaphore=False, fil=[], ig=[]): printNicely(red('Wrong format in config.')) return - # Check the semaphore lock + # Check the semaphore lock (stream process only) if check_semaphore: - while db.semaphore_query(): + if db.semaphore_query_pause(): + return + while db.semaphore_query_flag(): time.sleep(0.5) # Draw diff --git a/rainbowstream/rainbow.py b/rainbowstream/rainbow.py index 102b1e4..4a1e3d7 100644 --- a/rainbowstream/rainbow.py +++ b/rainbowstream/rainbow.py @@ -70,6 +70,8 @@ cmdset = [ 'config', 'theme', 'h', + 'p', + 'r', 'c', 'q' ] @@ -156,7 +158,7 @@ def init(args): g['themes'] = themes db.theme_store(c['THEME']) # Semaphore init - db.semaphore_store(False) + db.semaphore_store(False, False) # Image on term c['IMAGE_ON_TERM'] = args.image_on_term @@ -911,7 +913,7 @@ def list_add(t): slug=slug, owner_screen_name=owner, screen_name=user_name) - printNicely(light_green('Added.')) + printNicely(green('Added.')) except: printNicely(light_magenta('I\'m sorry we can not add him/her.')) @@ -930,7 +932,7 @@ def list_remove(t): slug=slug, owner_screen_name=owner, screen_name=user_name) - printNicely(light_green('Gone.')) + printNicely(green('Gone.')) except: printNicely(light_magenta('I\'m sorry we can not remove him/her.')) @@ -945,7 +947,7 @@ def list_subscribe(t): t.lists.subscribers.create( slug=slug, owner_screen_name=owner) - printNicely(light_green('Done.')) + printNicely(green('Done.')) except: printNicely( light_magenta('I\'m sorry you can not subscribe to this list.')) @@ -961,7 +963,7 @@ def list_unsubscribe(t): t.lists.subscribers.destroy( slug=slug, owner_screen_name=owner) - printNicely(light_green('Done.')) + printNicely(green('Done.')) except: printNicely( light_magenta('I\'m sorry you can not unsubscribe to this list.')) @@ -997,7 +999,7 @@ def list_new(t): name=name, mode=mode, description=description) - printNicely(light_green(name + ' list is created.')) + printNicely(green(name + ' list is created.')) except: printNicely(red('Oops something is wrong with Twitter :(')) @@ -1024,7 +1026,7 @@ def list_update(t): owner_screen_name=g['original_name'], mode=mode, description=description) - printNicely(light_green(slug + ' list is updated.')) + printNicely(green(slug + ' list is updated.')) except: printNicely(red('Oops something is wrong with Twitter :(')) @@ -1038,7 +1040,7 @@ def list_delete(t): t.lists.destroy( slug='-'.join(slug.split()), owner_screen_name=g['original_name']) - printNicely(light_green(slug + ' list is deleted.')) + printNicely(green(slug + ' list is deleted.')) except: printNicely(red('Oops something is wrong with Twitter :(')) @@ -1095,7 +1097,7 @@ def config(): if not g['stuff']: for k in all_config: line = ' ' * 2 + \ - light_green(k) + ': ' + light_yellow(str(all_config[k])) + green(k) + ': ' + light_yellow(str(all_config[k])) printNicely(line) guide = 'Detailed explanation can be found at ' + \ color_func(c['TWEET']['link'])( @@ -1106,7 +1108,7 @@ def config(): if g['stuff'] in all_config: k = g['stuff'] line = ' ' * 2 + \ - light_green(k) + ': ' + light_yellow(str(all_config[k])) + green(k) + ': ' + light_yellow(str(all_config[k])) printNicely(line) else: printNicely(red('No such config key.')) @@ -1115,7 +1117,7 @@ def config(): key = g['stuff'].split()[0] try: value = get_default_config(key) - line = ' ' * 2 + light_green(key) + ': ' + light_magenta(value) + line = ' ' * 2 + green(key) + ': ' + light_magenta(value) printNicely(line) except: printNicely( @@ -1125,7 +1127,7 @@ def config(): key = g['stuff'].split()[0] try: delete_config(key) - printNicely(light_green('Config key is dropped.')) + printNicely(green('Config key is dropped.')) except: printNicely(red('No such config key.')) # Set specific config @@ -1143,7 +1145,7 @@ def config(): g['decorated_name'] = lambda x: color_func( c['DECORATED_NAME'])( '[' + x + ']: ') - printNicely(light_green('Updated successfully.')) + printNicely(green('Updated successfully.')) except: printNicely(light_magenta('Not valid value.')) return @@ -1416,6 +1418,8 @@ def help(): 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('p') + ' will pause the stream.\n' + usage += s * 2 + light_green('r') + ' will unpause the stream.\n' usage += s * 2 + light_green('c') + ' will clear the screen.\n' usage += s * 2 + light_green('q') + ' will quit.\n' # End @@ -1437,6 +1441,22 @@ def help(): printNicely(usage) +def pause(): + """ + Pause stream display + """ + db.semaphore_update_pause(True) + printNicely(green('Stream is paused')) + + +def replay(): + """ + Replay stream + """ + db.semaphore_update_pause(False) + printNicely(green('Stream is running back now')) + + def clear(): """ Clear screen @@ -1509,6 +1529,8 @@ def process(cmd): config, theme, help, + pause, + replay, clear, quit ] @@ -1576,6 +1598,8 @@ def listen(): 'list', 'stream' ], # help + [], # pause + [], # reconnect [], # clear [], # quit ] @@ -1595,7 +1619,7 @@ def listen(): g['cmd'] = cmd try: # Lock the semaphore - db.semaphore_update(True) + db.semaphore_update_flag(True) # Save cmd to global variable and call process g['stuff'] = ' '.join(line.split()[1:]) # Process the command @@ -1606,7 +1630,7 @@ def listen(): else: g['prefix'] = True # Release the semaphore lock - db.semaphore_update(False) + db.semaphore_update_flag(False) except Exception: printNicely(red('OMG something is wrong with Twitter right now.')) diff --git a/rainbowstream/table_def.py b/rainbowstream/table_def.py index 822fa1c..b16f175 100644 --- a/rainbowstream/table_def.py +++ b/rainbowstream/table_def.py @@ -44,9 +44,11 @@ class Semaphore(Base): semaphore_id = Column(Integer, primary_key=True) flag = Column(Boolean) + pause = Column(Boolean) - def __init__(self, flag): + def __init__(self, flag, pause): self.flag = flag + self.pause = pause def init_db(): diff --git a/setup.py b/setup.py index b4e026c..51306bc 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from setuptools import setup, find_packages import os, os.path, sys # Bumped version -version = '0.5.2' +version = '0.5.3' # Require install_requires = [ -- 2.25.1