ucitrigger: add options to force enable/disable specific triggers
[openwrt/openwrt.git] / package / uci / trigger / lib / trigger.lua
index 6710211..104d27a 100644 (file)
@@ -253,6 +253,17 @@ function add(ts)
        end
 end
 
+function save_trigger(name)
+       if triggers.active[name] then
+               local slist = get_names(triggers.active[name])
+               if #slist > 0 then
+                       tctx:set("uci_trigger", name, "sections", slist)
+               end
+       else
+               tctx:delete("uci_trigger", name)
+       end
+end
+
 function set(data, cursor)
        assert(data ~= nil)
        if cursor == nil then
@@ -296,10 +307,7 @@ function set(data, cursor)
                if section[".name"] then
                        active[section[".name"]] = true
                end
-               local slist = get_names(triggers.active[t.id])
-               if #slist > 0 then
-                       tctx:set("uci_trigger", t.id, "sections", slist)
-               end
+               save_trigger(t.id)
        end
        tctx:save("uci_trigger")
 end
@@ -335,6 +343,46 @@ function get_active()
        return slist
 end
 
+function set_active(trigger, sections)
+       if triggers == nil then
+               load_state()
+       end
+       if not triggers.list[trigger] then
+               return
+       end
+       if triggers.active[trigger] == nil then
+               tctx:set("uci_trigger", trigger, "trigger")
+               triggers.active[trigger] = {}
+       end
+       local active = triggers.active[trigger]
+       if triggers.list[trigger].section_only or sections ~= nil then
+               for i, t in ipairs(sections) do
+                       triggers.active[trigger][t] = true
+               end
+       end
+       save_trigger(trigger)
+       tctx:save("uci_trigger")
+end
+
+function clear_active(trigger, sections)
+       if triggers == nil then
+               load_state()
+       end
+       if triggers.list[trigger] == nil or triggers.active[trigger] == nil then
+               return
+       end
+       local active = triggers.active[trigger]
+       if not triggers.list[trigger].section_only or sections == nil then
+               triggers.active[trigger] = nil
+       else
+               for i, t in ipairs(sections) do
+                       triggers.active[trigger][t] = false
+               end
+       end
+       save_trigger(trigger)
+       tctx:save("uci_trigger")
+end
+
 function run(ts)
        if ts == nil then
                ts = get_active()