Diff

util/datamanager.lua @ 2583:cb1f9266130b

util.datamanager: Added support for hooks to override behavior.
author Waqas Hussain <waqas20@gmail.com>
date Thu, 11 Feb 2010 05:21:03 +0500
parent 2444:267d6482bac6
child 2626:39a2e8ff0b0f
line wrap: on
line diff
--- a/util/datamanager.lua	Wed Feb 10 19:17:45 2010 +0000
+++ b/util/datamanager.lua	Thu Feb 11 05:21:03 2010 +0500
@@ -60,7 +60,9 @@
 
 ------- 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 @@
 	
 	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 @@
 	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 @@
 	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 @@
 	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 @@
 	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 @@
 	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 @@
 	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 @@
 	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;