summaryrefslogtreecommitdiff
path: root/package/uci/trigger
diff options
context:
space:
mode:
Diffstat (limited to 'package/uci/trigger')
-rwxr-xr-x[-rw-r--r--]package/uci/trigger/apply_config10
-rw-r--r--package/uci/trigger/lib/trigger.lua56
2 files changed, 62 insertions, 4 deletions
diff --git a/package/uci/trigger/apply_config b/package/uci/trigger/apply_config
index 0d9c6cf15e..b2f48dacce 100644..100755
--- a/package/uci/trigger/apply_config
+++ b/package/uci/trigger/apply_config
@@ -9,6 +9,8 @@ function usage()
print(" -t: show matching UCI triggers")
print(" -s: show information about tasks to be executed")
print(" -r: reset all triggers")
+ print(" -C <trigger> [<section>]: force clear a trigger")
+ print(" -S <trigger> [<section>]: force set a trigger")
print("")
end
@@ -39,6 +41,14 @@ elseif arg[1] == "-a" then
uci.trigger.run()
elseif arg[1] == "-r" then
uci.trigger.reset_state()
+elseif arg[1] == "-S" then
+ local trigger = arg[2]
+ local section = arg[3]
+ uci.trigger.set_active(trigger, section)
+elseif arg[1] == "-C" then
+ local trigger = arg[2]
+ local section = arg[3]
+ uci.trigger.clear_active(trigger, section)
else
usage()
end
diff --git a/package/uci/trigger/lib/trigger.lua b/package/uci/trigger/lib/trigger.lua
index 6710211d00..104d27ae44 100644
--- a/package/uci/trigger/lib/trigger.lua
+++ b/package/uci/trigger/lib/trigger.lua
@@ -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()