Look into system hook dir if scripts not found in homedir
authorEnrico Zini <enrico@enricozini.org>
Sat, 27 Mar 2010 15:50:06 +0000 (15:50 +0000)
committerEnrico Zini <enrico@enricozini.org>
Sat, 27 Mar 2010 15:50:06 +0000 (15:50 +0000)
src/config.vala
src/core.vala

index 444bbc2e2a96dc23bb61e8cde1a1e96270d04936..5a982be81cb5d75cf02a99ea1a5e3162e8c2988b 100644 (file)
@@ -228,6 +228,24 @@ public class Config
         refresh_from_lua();
     }
 
+    /**
+     * Find a zavai script.
+     * 
+     * ~/.zavai/NAME is searched first, then /usr/share/zavai/hooks/
+     *
+     * If the script is not found, NULL is returned
+     */
+    public string find_script(string name)
+    {
+        string candidate = homedir + "/" + name;
+        if (FileUtils.test(candidate, FileTest.EXISTS))
+            return candidate;
+        candidate = "/usr/share/zavai/hooks/" + name;
+        if (FileUtils.test(candidate, FileTest.EXISTS))
+            return candidate;
+        return null;
+    }
+
     public void run_script(string command)
     {
         zavai.log.info("Run program: " + command);
index 3c31ccde9b6ad22b1858c6e6fea2b924fe6ebfa5..c971a29b5d5fef6c75649673ca5be662c78b0127 100644 (file)
@@ -153,26 +153,40 @@ public abstract class Service : Object, Resource {
 
 public abstract class ScriptService : Service
 {
+    protected string script;
+
     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(zavai.config.homedir + "/" + name + " start");
+            zavai.config.run_script(script + " start");
             return true;
         } catch (Error e) {
-            zavai.log.error("Running " + zavai.config.homedir + "/" + name + " start: " + e.message);
+            zavai.log.error("Running " + script + " 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(zavai.config.homedir + "/" + name + " stop");
+            zavai.config.run_script(script + " stop");
             return true;
         } catch (Error e) {
-            zavai.log.error("Running " + zavai.config.homedir + "/" + name + " stop: " + e.message);
+            zavai.log.error("Running " + script + " stop: " + e.message);
             return false;
         }
     }
@@ -181,7 +195,13 @@ public abstract class ScriptService : Service
     {
         string std_out;
         string std_err;
-        string command = zavai.config.homedir + "/" + name + " status";
+        string script = zavai.config.find_script(name);
+        if (script == null)
+        {
+            zavai.log.error("Hook " + name + " does not exist");
+            return false;
+        }
+        string command = script + " status";
         int res = zavai.config.run_script_sync(command, out std_out, out std_err);
         if (res != 0)
         {