Utils for dynamically loading themes.
authorAmir Taaki <genjix@riseup.net>
Sat, 18 Aug 2012 07:21:58 +0000 (08:21 +0100)
committerAmir Taaki <genjix@riseup.net>
Sat, 18 Aug 2012 07:21:58 +0000 (08:21 +0100)
lib/util.py

index 1809882..98a820c 100644 (file)
@@ -5,7 +5,6 @@ import sys
 def print_error(*args):
     for item in args:
       sys.stderr.write(str(item))
-
     sys.stderr.write("\n")
     sys.stderr.flush()
 
@@ -23,3 +22,38 @@ def appdata_dir():
 def get_resource_path(*args):
     return os.path.join(".", *args)
 
+def local_data_dir():
+    assert sys.argv
+    prefix_path = os.path.dirname(sys.argv[0])
+    local_data = os.path.join(prefix_path, "data")
+    return local_data
+
+def load_theme_name(theme_path):
+    try:
+        with open(os.path.join(theme_path, "name.cfg")) as name_cfg_file:
+            return name_cfg_file.read().rstrip("\n").strip()
+    except IOError:
+        return None
+
+def theme_dirs_from_prefix(prefix):
+    if not os.path.exists(prefix):
+        return []
+    theme_paths = {}
+    for potential_theme in os.listdir(prefix):
+        theme_full_path = os.path.join(prefix, potential_theme)
+        theme_css = os.path.join(theme_full_path, "style.css")
+        if not os.path.exists(theme_css):
+            continue
+        theme_name = load_theme_name(theme_full_path)
+        if theme_name is None:
+            continue
+        theme_paths[theme_name] = prefix, potential_theme
+    return theme_paths
+
+def load_theme_paths():
+    theme_paths = {}
+    prefixes = (local_data_dir(), appdata_dir())
+    for prefix in prefixes:
+        theme_paths.update(theme_dirs_from_prefix(prefix))
+    return theme_paths
+