pause + replay
authorOrakaro <nhatminh_179@hotmail.com>
Sun, 27 Jul 2014 11:26:31 +0000 (20:26 +0900)
committerOrakaro <nhatminh_179@hotmail.com>
Sun, 27 Jul 2014 11:26:31 +0000 (20:26 +0900)
docs/index.rst
rainbowstream/colorset/config
rainbowstream/db.py
rainbowstream/draw.py
rainbowstream/rainbow.py
rainbowstream/table_def.py
setup.py

index fc306ad..a9a3e00 100644 (file)
@@ -61,7 +61,7 @@ You can try it with:
 \r
     rainbowstream -iot # Or rainbowstream --image-on-term\r
 \r
-You also can change the config key ``IMAGE_ON_TERM`` to ``True`` inside the app \r
+You also can change the config key ``IMAGE_ON_TERM`` to ``True`` inside the app\r
 to enable above feature (see `config management`_ section).\r
 \r
 In the first time you will be asked for authorization of Rainbow Stream\r
@@ -233,6 +233,10 @@ Here is full list of supported command:
 \r
 -  ``h`` will show the help.\r
 \r
+-  ``p`` will pause the stream.\r
+\r
+-  ``r`` will unpause the stream.\r
+\r
 -  ``c`` will clear the screen.\r
 \r
 -  ``q`` will quit.\r
@@ -311,7 +315,7 @@ You can view or set a new value of every config key by ``config`` command (See *
 \r
   + ``CLOCK_FORMAT``: time format, see `Python's strftime format`_.\r
   + ``DISPLAY``: decide how tweet will be printed.\r
\r
+\r
     + ``#name``: Twitter's name\r
     + ``#nick``: Twitter's screen name\r
     + ``#clock``: Datetime\r
index d2388d8..173f522 100644 (file)
@@ -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",
index 8f4ce40..58cc4b5 100644 (file)
@@ -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
index 0140137..0be6ece 100644 (file)
@@ -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
index 102b1e4..4a1e3d7 100644 (file)
@@ -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.'))
 
index 822fa1c..b16f175 100644 (file)
@@ -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():
index b4e026c..51306bc 100644 (file)
--- 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 = [