check config and little refactoring
[rainbowstream.git] / rainbowstream / config.py
index b17a0e2f46734a9a91cb28c2d1d580bffcfe2de1..ff2d17df7e51db45591898f5ca442f46d5e853de 100644 (file)
@@ -2,6 +2,7 @@ import json
 import re
 import os
 import os.path
+from collections import OrderedDict
 
 # Regular expression for comments
 comment_re = re.compile(
@@ -9,7 +10,6 @@ comment_re = re.compile(
     re.DOTALL | re.MULTILINE
 )
 
-
 def load_config(filepath):
     """
     Load config from filepath
@@ -20,34 +20,22 @@ def load_config(filepath):
         while match:
             content = content[:match.start()] + content[match.end():]
             match = comment_re.search(content)
-    return json.loads(content)
+    return json.loads(content, object_pairs_hook=OrderedDict)
 
 # Config dictionary
 c = {}
-# Load default
-default_config = os.path.dirname(__file__) + '/colorset/default.json'
-data = load_config(default_config)
-for d in data:
-    c[d] = data[d]
-c['theme'] = 'default'
-# Load init if exist
+
+# Load the initial config
+config = os.path.dirname(
+    __file__) + '/colorset/config'
 try:
-    path = os.path.dirname(__file__) + '/colorset/init'
-    f = open(path)
-    lines = f.readlines()
-    if len(lines) > 1:
-        raise Exception('More than 1 default theme')
-    theme_name = lines[0].strip()
-    default_config = os.path.dirname(
-        __file__) + '/colorset/' + theme_name + '.json'
-    data = load_config(default_config)
+    data = load_config(config)
     for d in data:
         c[d] = data[d]
-    c['theme'] = theme_name
-    f.close()
 except:
     pass
-# Load user's colorset
+
+# Load user's config
 rainbow_config = os.environ.get(
     'HOME',
     os.environ.get(
@@ -57,6 +45,15 @@ try:
     data = load_config(rainbow_config)
     for d in data:
         c[d] = data[d]
-    c['theme'] = 'custom'
+except:
+    print('It seems that ~/.rainbow_config.json has wrong format :(')
+
+# Load default theme
+theme_file = os.path.dirname(
+    __file__) + '/colorset/' + c['THEME'] + '.json'
+try:
+    data = load_config(theme_file)
+    for d in data:
+        c[d] = data[d]
 except:
     pass