Read Lua configuration file
[gregoa/zavai.git] / src / config.vala
index f3de7489114cbb05d43623aeccbaf73b67f2ade4..387546e49d9210dc9263b023a5ec6516da8a3a9d 100644 (file)
@@ -22,33 +22,115 @@ namespace zavai {
 
 public class Config
 {
-    public string version { get; set; }
-    public string homedir { get; set; }
-    public string icondir { get; set; }
-    public int min_button_height { get; set; }
-    public string gprs_apn { get; set; }
-    public string gprs_user { get; set; }
-    public string gprs_pass { get; set; }
-    public int backlight_max { get; set; }
+    protected Lua.LuaVM lua;
+    protected weak string get_string(string name)
+    {
+        lua.get_global(name);
+        weak string res = lua.to_string(-1);
+        lua.pop(1);
+        return res;
+    }
+    protected void set_string(string name, string? val)
+    {
+        if (val == null)
+            lua.push_nil();
+        else
+            lua.push_string(val);
+        lua.set_global(name);
+    }
+    protected weak int get_int(string name)
+    {
+        lua.get_global(name);
+        int res = lua.to_integer(-1);
+        lua.pop(1);
+        return res;
+    }
+    protected void set_int(string name, int val)
+    {
+        lua.push_integer(val);
+        lua.set_global(name);
+    }
+
+    public string version
+    {
+        get { return get_string("version"); }
+        set { set_string("version", value); }
+    }
+    public string homedir
+    {
+        get { return get_string("homedir"); }
+        set { set_string("homedir", value); }
+    }
+    public string icondir
+    {
+        get { return get_string("icondir"); }
+        set { set_string("icondir", value); }
+    }
+    public int min_button_height
+    {
+        get { return get_int("min_button_height"); }
+        set { set_int("min_button_height", value); }
+    }
+    public string gprs_apn
+    {
+        get { return get_string("gprs_apn"); }
+        set { set_string("gprs_apn", value); }
+    }
+    public string gprs_user
+    {
+        get { return get_string("gprs_user"); }
+        set { set_string("gprs_user", value); }
+    }
+    public string gprs_pass
+    {
+        get { return get_string("gprs_pass"); }
+        set { set_string("gprs_pass", value); }
+    }
+    public int backlight_max
+    {
+        get;
+        set;
+    }
     private string _argv0;
     public string argv0 {
-           get { return _argv0; }
-           set { _argv0 = value; }
+        get { return _argv0; }
+        set { _argv0 = value; }
     }
 
     public Config()
     {
+        lua = new Lua.LuaVM();
+        lua.open_libs();
+
+stderr.printf("ZA1\n");
+
         // Set defaults
         version = "0.1";
+stderr.printf("ZA2\n");
         homedir = GLib.Environment.get_home_dir() + "/.zavai";
+stderr.printf("ZA3\n");
         icondir = GLib.Environment.get_variable("ZAVAI_ICONDIR");
+stderr.printf("ZA4\n");
         if (icondir == null)
                 icondir = "/usr/share/zavai/icons";
+stderr.printf("ZA5\n");
         min_button_height = 80;
+stderr.printf("ZA6\n");
         gprs_apn = "general.t-mobile.uk";
+stderr.printf("ZA7\n");
         gprs_user = "x";
+stderr.printf("ZA8\n");
         gprs_pass = "x";
-       backlight_max = 15;
+stderr.printf("ZA9\n");
+        backlight_max = 15;
+stderr.printf("ZA10\n");
+
+        // Read config
+        if (lua.do_file(homedir + "/config"))
+        {
+            zavai.log.error("Failed to parse " + homedir + "/config: " + lua.to_string(-1));
+        }
+stderr.printf("ZA11\n");
     }
 
 /*