summaryrefslogtreecommitdiffstats
path: root/acf2/persistence/init.lua
diff options
context:
space:
mode:
Diffstat (limited to 'acf2/persistence/init.lua')
-rw-r--r--acf2/persistence/init.lua18
1 files changed, 11 insertions, 7 deletions
diff --git a/acf2/persistence/init.lua b/acf2/persistence/init.lua
index 1cdea75..74ca447 100644
--- a/acf2/persistence/init.lua
+++ b/acf2/persistence/init.lua
@@ -27,11 +27,11 @@ function DataStore:init()
function(m) return m() end,
loadmods('persistence/backends')
)
- self.triggers = {}
+ self.triggers = {pre={}, post={}}
end
-function DataStore:trigger(path, func)
- local funcs = setdefault(self.triggers, path, {})
+function DataStore:trigger(phase, path, func)
+ local funcs = setdefault(self.triggers[phase], path, {})
if not contains(funcs, func) then table.insert(funcs, func) end
end
@@ -98,11 +98,15 @@ function DataStore:_set_multiple(mods)
table.insert(setdefault(bms, backend, {}), {comps, value})
end
- for backend, bm in pairs(bms) do backend:set(bm) end
-
- for path, _ in pairs(trigger) do
- for _, func in ipairs(self.triggers[path] or {}) do func() end
+ local function exec_triggers(phase)
+ for path, _ in pairs(trigger) do
+ for _, func in ipairs(self.triggers[phase][path] or {}) do func() end
+ end
end
+
+ exec_triggers('pre')
+ for backend, bm in pairs(bms) do backend:set(bm) end
+ exec_triggers('post')
end