Use find_and_run_script more thoroughly
authorEnrico Zini <enrico@enricozini.org>
Sat, 27 Mar 2010 16:45:16 +0000 (16:45 +0000)
committerEnrico Zini <enrico@enricozini.org>
Sat, 27 Mar 2010 16:45:16 +0000 (16:45 +0000)
src/app_keyboard.vala
src/app_power.vala
src/config.vala
src/core.vala
src/zavai.vala

index c70b16f7f7ce814d450ecdb5b65243f648dad854..18efc2b70f47b8ea72b0616bfec5a8819f0e9ef9 100644 (file)
@@ -42,7 +42,10 @@ public class Keyboard : Service
 
     protected override void start()
     {
-        string[] args = { zavai.config.homedir + "/keyboard", null };
+        string script = zavai.config.find_script("keyboard");
+        if (script == null) return;
+
+        string[] args = { script, null };
         int opid;
         try {
             Gdk.spawn_on_screen(
index 8fedf3f4e5545ccd44a9e1d5238375f8e2f3c7c6..2e666030553b66e15c05369e4ffe03d9c6c8ccec 100644 (file)
@@ -485,7 +485,7 @@ public class Backlight: zavai.Service
     public void wiggle()
     {
         try {
-            zavai.config.run_script(zavai.config.homedir + "/display wiggle");
+            zavai.config.find_and_run_script("display", "wiggle");
         } catch (Error e) {
             zavai.log.error("Requesting/releasing resource Display: " + e.message);
         }
@@ -496,7 +496,7 @@ public class Backlight: zavai.Service
         if (!started)
         {
             try {
-                zavai.config.run_script(zavai.config.homedir + "/display lock_off");
+                zavai.config.find_and_run_script("display", "lock_off");
             } catch (GLib.Error e) {
                 zavai.log.error(e.message);
             }
@@ -506,7 +506,7 @@ public class Backlight: zavai.Service
     public void unlock_screen()
     {
         try {
-            zavai.config.run_script(zavai.config.homedir + "/display defaults");
+            zavai.config.find_and_run_script("display", "defaults");
         } catch (GLib.Error e) {
             zavai.log.error(e.message);
         }
@@ -516,7 +516,7 @@ public class Backlight: zavai.Service
     {
         if (started) return;
         try {
-            zavai.config.run_script(zavai.config.homedir + "/display lock_on");
+            zavai.config.find_and_run_script("display", "lock_on");
             zavai.log.info("Acquired display");
             base.start();
         } catch (GLib.Error e) {
@@ -529,7 +529,7 @@ public class Backlight: zavai.Service
     {
         if (!started) return;
         try {
-            zavai.config.run_script(zavai.config.homedir + "/display defaults");
+            zavai.config.find_and_run_script("display", "defaults");
             zavai.log.info("Released display");
             base.stop();
         } catch (GLib.Error e) {
index 5a982be81cb5d75cf02a99ea1a5e3162e8c2988b..c2a0e56e4a15913d7aac4b62dd6acd7162337eb8 100644 (file)
@@ -235,7 +235,7 @@ public class Config
      *
      * If the script is not found, NULL is returned
      */
-    public string find_script(string name)
+    public string? find_script(string name)
     {
         string candidate = homedir + "/" + name;
         if (FileUtils.test(candidate, FileTest.EXISTS))
@@ -246,34 +246,34 @@ public class Config
         return null;
     }
 
-    public void run_script(string command)
+    public void find_and_run_script(string script, string args) throws SpawnError
+    {
+        string cmd = find_script(script);
+        if (cmd == null)
+            throw new SpawnError.NOENT("hook '" + cmd + "' not found");
+        run_script(cmd + " " + args);
+    }
+
+    public void run_script(string command) throws SpawnError
     {
         zavai.log.info("Run program: " + command);
         string[] args = command.split(" ");
         Pid pid;
-        try {
-            Process.spawn_async(
-                Environment.get_home_dir(),
-                args,
-                null,
-                SpawnFlags.SEARCH_PATH,
-                null,
-                out pid);
-        } catch (SpawnError e) {
-            zavai.log.error("Running " + command + ": " + e.message);
-        }
+        Process.spawn_async(
+            Environment.get_home_dir(),
+            args,
+            null,
+            SpawnFlags.SEARCH_PATH,
+            null,
+            out pid);
     }
 
-    public int run_script_sync(string command, out string std_out, out string std_err)
+    public int run_script_sync(string command, out string std_out, out string std_err) throws SpawnError
     {
         int status = -1;
         zavai.log.info("Run program: " + command);
         string[] args = command.split(" ");
-        try {
-            bool res = Process.spawn_sync(Environment.get_home_dir(), args, null, SpawnFlags.SEARCH_PATH, null, out std_out, out std_err, out status);
-        } catch (SpawnError e) {
-            zavai.log.error("Running " + command + ": " + e.message);
-        }
+        bool res = Process.spawn_sync(Environment.get_home_dir(), args, null, SpawnFlags.SEARCH_PATH, null, out std_out, out std_err, out status);
         return status;
     }
 }
index c971a29b5d5fef6c75649673ca5be662c78b0127..ef1363f47982b94eab4b8ee22bcb39081d32139d 100644 (file)
@@ -157,36 +157,22 @@ public abstract class ScriptService : Service
 
     protected bool script_start()
     {
-        string script = zavai.config.find_script(name);
-        if (script == null)
-        {
-            zavai.log.error("Hook " + name + " does not exist");
-            return false;
-        }
         try {
-            // Then run our own script
-            zavai.config.run_script(script + " start");
+            zavai.config.find_and_run_script(name, "start");
             return true;
         } catch (Error e) {
-            zavai.log.error("Running " + script + " start: " + e.message);
+            zavai.log.error("Running " + name + " start: " + e.message);
             return false;
         }
     }
 
     protected bool script_stop()
     {
-        string script = zavai.config.find_script(name);
-        if (script == null)
-        {
-            zavai.log.error("Hook " + name + " does not exist");
-            return false;
-        }
         try {
-            // Then run our own script
-            zavai.config.run_script(script + " stop");
+            zavai.config.find_and_run_script(name, "stop");
             return true;
         } catch (Error e) {
-            zavai.log.error("Running " + script + " stop: " + e.message);
+            zavai.log.error("Running " + name + " stop: " + e.message);
             return false;
         }
     }
@@ -202,10 +188,15 @@ public abstract class ScriptService : Service
             return false;
         }
         string command = script + " status";
-        int res = zavai.config.run_script_sync(command, out std_out, out std_err);
-        if (res != 0)
-        {
-            zavai.log.error("Running " + command + ": " + std_err);
+        try {
+            int res = zavai.config.run_script_sync(command, out std_out, out std_err);
+            if (res != 0)
+            {
+                zavai.log.error("Running " + command + ": " + std_err);
+                return false;
+            }
+        } catch (SpawnError e) {
+            zavai.log.error("Running " + command + ": " + e.message);
             return false;
         }
 
index 3b467f0574fce38872c83ff80d8b64609060737a..ae8c3aa5edcef495c2c35201034c7324b43dce51 100644 (file)
@@ -211,7 +211,7 @@ static int main (string[] args) {
        zavai.ui.main.init();
        zavai.ui.gps.init();
        zavai.ui.gsm.init();
-       zavai.config.run_script(zavai.config.homedir + "/display init");
+       zavai.config.find_and_run_script("display", "init");
        zavai.ui.power.init();
        zavai.ui.aux.init();
        zavai.ui.kbd.init();