diff options
author | Waqas Hussain <waqas20@gmail.com> | 2010-02-11 05:21:03 +0500 |
---|---|---|
committer | Waqas Hussain <waqas20@gmail.com> | 2010-02-11 05:21:03 +0500 |
commit | 3b288052d51c3aa753ace60140b901af423e74b7 (patch) | |
tree | a381ca016edfd9cece01cc1e001edbb5f35c995b /util | |
parent | 7f10afa423ab7915837f80af3f3e69d9b98e303b (diff) | |
download | prosody-3b288052d51c3aa753ace60140b901af423e74b7.tar.gz prosody-3b288052d51c3aa753ace60140b901af423e74b7.zip |
util.datamanager: Added support for hooks to override behavior.
Diffstat (limited to 'util')
-rw-r--r-- | util/datamanager.lua | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/util/datamanager.lua b/util/datamanager.lua index a2da0aa3..3982a710 100644 --- a/util/datamanager.lua +++ b/util/datamanager.lua @@ -60,7 +60,9 @@ local callbacks = {}; ------- API ------------- +local _set_data_path; function set_data_path(path) + if _set_data_path then return _set_data_path(path); end log("debug", "Setting data path to: %s", path); data_path = path; end @@ -73,14 +75,18 @@ local function callback(username, host, datastore, data) return username, host, datastore, data; end +local _add_callback; function add_callback(func) + if _add_callback then return _add_callback(func); end if not callbacks[func] then -- Would you really want to set the same callback more than once? callbacks[func] = true; callbacks[#callbacks+1] = func; return true; end end +local _remove_callback; function remove_callback(func) + if _remove_callback then return _remove_callback(func); end if callbacks[func] then for i, f in ipairs(callbacks) do if f == func then @@ -92,7 +98,9 @@ function remove_callback(func) end end +local _getpath; function getpath(username, host, datastore, ext, create) + if _getpath then return _getpath(username, host, datastore, ext, create); end ext = ext or "dat"; host = (host and encode(host)) or "_global"; username = username and encode(username); @@ -108,7 +116,9 @@ function getpath(username, host, datastore, ext, create) end end +local _load; function load(username, host, datastore) + if _load then return _load(username, host, datastore); end local data, ret = loadfile(getpath(username, host, datastore)); if not data then log("debug", "Failed to load "..datastore.." storage ('"..ret.."') for user: "..(username or "nil").."@"..(host or "nil")); @@ -123,7 +133,9 @@ function load(username, host, datastore) return ret; end +local _store; function store(username, host, datastore, data) + if _store then return _store(username, host, datastore, data); end if not data then data = {}; end @@ -151,7 +163,9 @@ function store(username, host, datastore, data) return true; end +local _list_append; function list_append(username, host, datastore, data) + if _list_append then return _list_append(username, host, datastore, data); end if not data then return; end if callback(username, host, datastore) == false then return true; end -- save the datastore @@ -167,7 +181,9 @@ function list_append(username, host, datastore, data) return true; end +local _list_store; function list_store(username, host, datastore, data) + if _list_store then return _list_store(username, host, datastore, data); end if not data then data = {}; end @@ -193,7 +209,9 @@ function list_store(username, host, datastore, data) return true; end +local _list_load; function list_load(username, host, datastore) + if _list_load then return _list_load(username, host, datastore); end local data, ret = loadfile(getpath(username, host, datastore, "list")); if not data then log("debug", "Failed to load "..datastore.." storage ('"..ret.."') for user: "..(username or "nil").."@"..(host or "nil")); @@ -209,4 +227,29 @@ function list_load(username, host, datastore) return items; end +function set(t) + _set_data_path = t.set_data_path; + _add_callback = t.add_callback; + _remove_callback = t.remove_callback; + _getpath = t.getpath; + _load = t.load; + _store = t.store; + _list_append = t.list_append; + _list_store = t.list_store; + _list_load = t.list_load; +end +function get() + return { + set_data_path = _set_data_path; + add_callback = _add_callback; + remove_callback = _remove_callback; + getpath = _getpath; + load = _load; + store = _store; + list_append = _list_append; + list_store = _list_store; + list_load = _list_load; + }; +end + return _M; |