fix serious bug in import HTMLParser in Python > 3.4
[rainbowstream.git] / rainbowstream / draw.py
index f23e4cacd70d8ab9558573289590a924673e3a8e..3bf392076185dc969a1adad6a63e657991af5515 100644 (file)
@@ -20,11 +20,6 @@ db = RainbowDB()
 g = {}
 
 
-def unescape(s):
-    p = HTMLParser()
-    return p.unescape(s)
-
-
 def init_cycle():
     """
     Init the cycle
@@ -116,23 +111,48 @@ def show_calendar(month, date, rel):
         printNicely(' '.join(ary))
 
 
-def check_theme():
+def check_config():
+    """
+    Check if config is changed
+    """
+    changed = False
+    data = get_all_config()
+    for key in c:
+        if key in data:
+            if data[key] != c[key]:
+                changed = True
+    if changed:
+        reload_config()
+
+
+def validate_theme(theme):
+    """
+    Validate a theme exists or not
+    """
+    # Theme changed check
+    files = os.listdir(os.path.dirname(__file__) + '/colorset')
+    themes = [f.split('.')[0] for f in files if f.split('.')[-1] == 'json']
+    return theme in themes
+
+
+def reload_theme(current_config):
     """
     Check current theme and update if necessary
     """
     exists = db.theme_query()
     themes = [t.theme_name for t in exists]
-    if c['THEME'] != themes[0]:
-        c['THEME'] = themes[0]
+    if current_config != themes[0]:
         config = os.path.dirname(
-            __file__) + '/colorset/' + c['THEME'] + '.json'
+            __file__) + '/colorset/' + current_config + '.json'
         # Load new config
         data = load_config(config)
         if data:
             for d in data:
                 c[d] = data[d]
-        # Re-init color cycle
-        g['cyc'] = init_cycle()
+        # Restart color cycle and update db/config
+        start_cycle()
+        db.theme_update(current_config)
+        set_config('THEME', current_config)
 
 
 def color_func(func_name):
@@ -144,12 +164,13 @@ def color_func(func_name):
     return globals()[func_name]
 
 
-def draw(t, iot=False, keyword=None, check_semaphore=False, fil=[], ig=[]):
+def draw(t, keyword=None, check_semaphore=False, fil=[], ig=[]):
     """
     Draw the rainbow
     """
 
-    check_theme()
+    check_config()
+    reload_theme(c['THEME'])
     # Retrieve tweet
     tid = t['id']
     text = t['text']
@@ -163,11 +184,12 @@ def draw(t, iot=False, keyword=None, check_semaphore=False, fil=[], ig=[]):
 
     # Pull extended retweet text
     try:
-        text = 'RT @{0}: {1}'.format(t['retweeted_status']['user']['screen_name'],
-                                     t['retweeted_status']['text'])
+        text = 'RT @' + t['retweeted_status']['user']['screen_name'] + ': ' +\
+            t['retweeted_status']['text']
     except:
         pass
 
+    # Unescape HTML character
     text = unescape(text)
 
     # Get expanded url
@@ -236,12 +258,12 @@ def draw(t, iot=False, keyword=None, check_semaphore=False, fil=[], ig=[]):
     # Highlight keyword
     tweet = ' '.join(tweet)
     if keyword:
-        roj = re.search(keyword,tweet,re.IGNORECASE)
+        roj = re.search(keyword, tweet, re.IGNORECASE)
         if roj:
             occur = roj.group()
             ary = tweet.split(occur)
-            delimeter = color_func(c['TWEET']['keyword'])(occur)
-            tweet = delimeter.join(ary)
+            delimiter = color_func(c['TWEET']['keyword'])(occur)
+            tweet = delimiter.join(ary)
 
     # Draw rainbow
     line1 = u"{u:>{uw}}:".format(
@@ -266,7 +288,7 @@ def draw(t, iot=False, keyword=None, check_semaphore=False, fil=[], ig=[]):
     printNicely(line3)
 
     # Display Image
-    if iot and media_url:
+    if c['IMAGE_ON_TERM'] and media_url:
         for mu in media_url:
             try:
                 response = requests.get(mu)
@@ -327,7 +349,7 @@ def print_message(m):
     printNicely(line3)
 
 
-def show_profile(u, iot=False):
+def show_profile(u):
     """
     Show a profile
     """
@@ -400,7 +422,7 @@ def show_profile(u, iot=False):
     # Display
     printNicely('')
     printNicely(line1)
-    if iot:
+    if c['IMAGE_ON_TERM']:
         try:
             response = requests.get(profile_image_url)
             image_to_display(BytesIO(response.content), 2, 20)