Software /
code /
prosody
Annotate
util/datamanager.lua @ 522:fc3df507afa2
Converted prosody.cfg.lua.dist to use windows end-of-lines
author | Waqas Hussain <waqas20@gmail.com> |
---|---|
date | Wed, 03 Dec 2008 19:56:05 +0500 |
parent | 456:27cb85d4059e |
child | 519:cccd610a0ef9 |
rev | line source |
---|---|
0 | 1 local format = string.format; |
2 local setmetatable, type = setmetatable, type; | |
247
681b29aa134f
Added support for storing (and removing), loading and appending to lists of data to datamanager (for supporting offline messages)
Waqas Hussain <waqas20@gmail.com>
parents:
206
diff
changeset
|
3 local pairs, ipairs = pairs, ipairs; |
0 | 4 local char = string.char; |
5 local loadfile, setfenv, pcall = loadfile, setfenv, pcall; | |
456
27cb85d4059e
Fixed logging in datamanager
Waqas Hussain <waqas20@gmail.com>
parents:
452
diff
changeset
|
6 local log = require "util.logger".init("datamanager"); |
0 | 7 local io_open = io.open; |
206
e30d0e30a0ff
Datamanager now deletes files with no data
Waqas Hussain <waqas20@gmail.com>
parents:
182
diff
changeset
|
8 local os_remove = os.remove; |
267 | 9 local tostring, tonumber = tostring, tonumber; |
177
606c433955e7
Bug fixes and checks for presence subscriptions, etc
Waqas Hussain <waqas20@gmail.com>
parents:
129
diff
changeset
|
10 local error = error; |
206
e30d0e30a0ff
Datamanager now deletes files with no data
Waqas Hussain <waqas20@gmail.com>
parents:
182
diff
changeset
|
11 local next = next; |
247
681b29aa134f
Added support for storing (and removing), loading and appending to lists of data to datamanager (for supporting offline messages)
Waqas Hussain <waqas20@gmail.com>
parents:
206
diff
changeset
|
12 local t_insert = table.insert; |
0 | 13 |
182
f5cb6b5a6eb7
Datamanager Fixes and improvements
Waqas Hussain <waqas20@gmail.com>
parents:
177
diff
changeset
|
14 local indent = function(f, i) |
f5cb6b5a6eb7
Datamanager Fixes and improvements
Waqas Hussain <waqas20@gmail.com>
parents:
177
diff
changeset
|
15 for n = 1, i do |
f5cb6b5a6eb7
Datamanager Fixes and improvements
Waqas Hussain <waqas20@gmail.com>
parents:
177
diff
changeset
|
16 f:write("\t"); |
f5cb6b5a6eb7
Datamanager Fixes and improvements
Waqas Hussain <waqas20@gmail.com>
parents:
177
diff
changeset
|
17 end |
f5cb6b5a6eb7
Datamanager Fixes and improvements
Waqas Hussain <waqas20@gmail.com>
parents:
177
diff
changeset
|
18 end |
f5cb6b5a6eb7
Datamanager Fixes and improvements
Waqas Hussain <waqas20@gmail.com>
parents:
177
diff
changeset
|
19 |
452
613c5c6bdce4
Added option core.data_path
Waqas Hussain <waqas20@gmail.com>
parents:
267
diff
changeset
|
20 local data_path = "data"; |
613c5c6bdce4
Added option core.data_path
Waqas Hussain <waqas20@gmail.com>
parents:
267
diff
changeset
|
21 |
0 | 22 module "datamanager" |
23 | |
24 | |
25 ---- utils ----- | |
26 local encode, decode; | |
27 | |
28 do | |
29 local urlcodes = setmetatable({}, { __index = function (t, k) t[k] = char(tonumber("0x"..k)); return t[k]; end }); | |
30 | |
31 decode = function (s) | |
32 return s and (s:gsub("+", " "):gsub("%%([a-fA-F0-9][a-fA-F0-9])", urlcodes)); | |
33 end | |
34 | |
35 encode = function (s) | |
36 return s and (s:gsub("%W", function (c) return format("%%%x", c:byte()); end)); | |
37 end | |
38 end | |
39 | |
40 local function basicSerialize (o) | |
182
f5cb6b5a6eb7
Datamanager Fixes and improvements
Waqas Hussain <waqas20@gmail.com>
parents:
177
diff
changeset
|
41 if type(o) == "number" or type(o) == "boolean" then |
f5cb6b5a6eb7
Datamanager Fixes and improvements
Waqas Hussain <waqas20@gmail.com>
parents:
177
diff
changeset
|
42 return tostring(o); |
f5cb6b5a6eb7
Datamanager Fixes and improvements
Waqas Hussain <waqas20@gmail.com>
parents:
177
diff
changeset
|
43 else -- assume it is a string -- FIXME make sure it's a string. throw an error otherwise. |
f5cb6b5a6eb7
Datamanager Fixes and improvements
Waqas Hussain <waqas20@gmail.com>
parents:
177
diff
changeset
|
44 return (format("%q", tostring(o)):gsub("\\\n", "\\n")); |
f5cb6b5a6eb7
Datamanager Fixes and improvements
Waqas Hussain <waqas20@gmail.com>
parents:
177
diff
changeset
|
45 end |
0 | 46 end |
47 | |
48 | |
182
f5cb6b5a6eb7
Datamanager Fixes and improvements
Waqas Hussain <waqas20@gmail.com>
parents:
177
diff
changeset
|
49 local function simplesave (f, o, ind) |
f5cb6b5a6eb7
Datamanager Fixes and improvements
Waqas Hussain <waqas20@gmail.com>
parents:
177
diff
changeset
|
50 if type(o) == "number" then |
f5cb6b5a6eb7
Datamanager Fixes and improvements
Waqas Hussain <waqas20@gmail.com>
parents:
177
diff
changeset
|
51 f:write(o) |
f5cb6b5a6eb7
Datamanager Fixes and improvements
Waqas Hussain <waqas20@gmail.com>
parents:
177
diff
changeset
|
52 elseif type(o) == "string" then |
f5cb6b5a6eb7
Datamanager Fixes and improvements
Waqas Hussain <waqas20@gmail.com>
parents:
177
diff
changeset
|
53 f:write((format("%q", o):gsub("\\\n", "\\n"))) |
f5cb6b5a6eb7
Datamanager Fixes and improvements
Waqas Hussain <waqas20@gmail.com>
parents:
177
diff
changeset
|
54 elseif type(o) == "table" then |
f5cb6b5a6eb7
Datamanager Fixes and improvements
Waqas Hussain <waqas20@gmail.com>
parents:
177
diff
changeset
|
55 f:write("{\n") |
f5cb6b5a6eb7
Datamanager Fixes and improvements
Waqas Hussain <waqas20@gmail.com>
parents:
177
diff
changeset
|
56 for k,v in pairs(o) do |
f5cb6b5a6eb7
Datamanager Fixes and improvements
Waqas Hussain <waqas20@gmail.com>
parents:
177
diff
changeset
|
57 indent(f, ind); |
f5cb6b5a6eb7
Datamanager Fixes and improvements
Waqas Hussain <waqas20@gmail.com>
parents:
177
diff
changeset
|
58 f:write("[", basicSerialize(k), "] = ") |
f5cb6b5a6eb7
Datamanager Fixes and improvements
Waqas Hussain <waqas20@gmail.com>
parents:
177
diff
changeset
|
59 simplesave(f, v, ind+1) |
f5cb6b5a6eb7
Datamanager Fixes and improvements
Waqas Hussain <waqas20@gmail.com>
parents:
177
diff
changeset
|
60 f:write(",\n") |
f5cb6b5a6eb7
Datamanager Fixes and improvements
Waqas Hussain <waqas20@gmail.com>
parents:
177
diff
changeset
|
61 end |
f5cb6b5a6eb7
Datamanager Fixes and improvements
Waqas Hussain <waqas20@gmail.com>
parents:
177
diff
changeset
|
62 indent(f, ind-1); |
f5cb6b5a6eb7
Datamanager Fixes and improvements
Waqas Hussain <waqas20@gmail.com>
parents:
177
diff
changeset
|
63 f:write("}") |
f5cb6b5a6eb7
Datamanager Fixes and improvements
Waqas Hussain <waqas20@gmail.com>
parents:
177
diff
changeset
|
64 elseif type(o) == "boolean" then |
f5cb6b5a6eb7
Datamanager Fixes and improvements
Waqas Hussain <waqas20@gmail.com>
parents:
177
diff
changeset
|
65 f:write(o and "true" or "false"); |
f5cb6b5a6eb7
Datamanager Fixes and improvements
Waqas Hussain <waqas20@gmail.com>
parents:
177
diff
changeset
|
66 else |
f5cb6b5a6eb7
Datamanager Fixes and improvements
Waqas Hussain <waqas20@gmail.com>
parents:
177
diff
changeset
|
67 error("cannot serialize a " .. type(o)) |
f5cb6b5a6eb7
Datamanager Fixes and improvements
Waqas Hussain <waqas20@gmail.com>
parents:
177
diff
changeset
|
68 end |
f5cb6b5a6eb7
Datamanager Fixes and improvements
Waqas Hussain <waqas20@gmail.com>
parents:
177
diff
changeset
|
69 end |
f5cb6b5a6eb7
Datamanager Fixes and improvements
Waqas Hussain <waqas20@gmail.com>
parents:
177
diff
changeset
|
70 |
0 | 71 ------- API ------------- |
72 | |
452
613c5c6bdce4
Added option core.data_path
Waqas Hussain <waqas20@gmail.com>
parents:
267
diff
changeset
|
73 function set_data_path(path) |
613c5c6bdce4
Added option core.data_path
Waqas Hussain <waqas20@gmail.com>
parents:
267
diff
changeset
|
74 data_path = path; |
613c5c6bdce4
Added option core.data_path
Waqas Hussain <waqas20@gmail.com>
parents:
267
diff
changeset
|
75 end |
613c5c6bdce4
Added option core.data_path
Waqas Hussain <waqas20@gmail.com>
parents:
267
diff
changeset
|
76 |
247
681b29aa134f
Added support for storing (and removing), loading and appending to lists of data to datamanager (for supporting offline messages)
Waqas Hussain <waqas20@gmail.com>
parents:
206
diff
changeset
|
77 function getpath(username, host, datastore, ext) |
681b29aa134f
Added support for storing (and removing), loading and appending to lists of data to datamanager (for supporting offline messages)
Waqas Hussain <waqas20@gmail.com>
parents:
206
diff
changeset
|
78 ext = ext or "dat"; |
84
d0a0bac6815e
Added: Datastore support for hosts and global data in addition to users
Waqas Hussain <waqas20@gmail.com>
parents:
0
diff
changeset
|
79 if username then |
452
613c5c6bdce4
Added option core.data_path
Waqas Hussain <waqas20@gmail.com>
parents:
267
diff
changeset
|
80 return format("%s/%s/%s/%s.%s", data_path, encode(host), datastore, encode(username), ext); |
84
d0a0bac6815e
Added: Datastore support for hosts and global data in addition to users
Waqas Hussain <waqas20@gmail.com>
parents:
0
diff
changeset
|
81 elseif host then |
452
613c5c6bdce4
Added option core.data_path
Waqas Hussain <waqas20@gmail.com>
parents:
267
diff
changeset
|
82 return format("%s/%s/%s.%s", data_path, encode(host), datastore, ext); |
84
d0a0bac6815e
Added: Datastore support for hosts and global data in addition to users
Waqas Hussain <waqas20@gmail.com>
parents:
0
diff
changeset
|
83 else |
452
613c5c6bdce4
Added option core.data_path
Waqas Hussain <waqas20@gmail.com>
parents:
267
diff
changeset
|
84 return format("%s/%s.%s", data_path, datastore, ext); |
84
d0a0bac6815e
Added: Datastore support for hosts and global data in addition to users
Waqas Hussain <waqas20@gmail.com>
parents:
0
diff
changeset
|
85 end |
0 | 86 end |
87 | |
88 function load(username, host, datastore) | |
89 local data, ret = loadfile(getpath(username, host, datastore)); | |
117
8e5c5e6a3240
Fixed: datamanager.store and datamanager.load could crash when username or host arguments were nil. (useful for server specific and global data).
Waqas Hussain <waqas20@gmail.com>
parents:
88
diff
changeset
|
90 if not data then |
182
f5cb6b5a6eb7
Datamanager Fixes and improvements
Waqas Hussain <waqas20@gmail.com>
parents:
177
diff
changeset
|
91 log("warn", "Failed to load "..datastore.." storage ('"..ret.."') for user: "..(username or "nil").."@"..(host or "nil")); |
117
8e5c5e6a3240
Fixed: datamanager.store and datamanager.load could crash when username or host arguments were nil. (useful for server specific and global data).
Waqas Hussain <waqas20@gmail.com>
parents:
88
diff
changeset
|
92 return nil; |
8e5c5e6a3240
Fixed: datamanager.store and datamanager.load could crash when username or host arguments were nil. (useful for server specific and global data).
Waqas Hussain <waqas20@gmail.com>
parents:
88
diff
changeset
|
93 end |
0 | 94 setfenv(data, {}); |
95 local success, ret = pcall(data); | |
117
8e5c5e6a3240
Fixed: datamanager.store and datamanager.load could crash when username or host arguments were nil. (useful for server specific and global data).
Waqas Hussain <waqas20@gmail.com>
parents:
88
diff
changeset
|
96 if not success then |
182
f5cb6b5a6eb7
Datamanager Fixes and improvements
Waqas Hussain <waqas20@gmail.com>
parents:
177
diff
changeset
|
97 log("error", "Unable to load "..datastore.." storage ('"..ret.."') for user: "..(username or "nil").."@"..(host or "nil")); |
117
8e5c5e6a3240
Fixed: datamanager.store and datamanager.load could crash when username or host arguments were nil. (useful for server specific and global data).
Waqas Hussain <waqas20@gmail.com>
parents:
88
diff
changeset
|
98 return nil; |
8e5c5e6a3240
Fixed: datamanager.store and datamanager.load could crash when username or host arguments were nil. (useful for server specific and global data).
Waqas Hussain <waqas20@gmail.com>
parents:
88
diff
changeset
|
99 end |
0 | 100 return ret; |
101 end | |
102 | |
103 function store(username, host, datastore, data) | |
206
e30d0e30a0ff
Datamanager now deletes files with no data
Waqas Hussain <waqas20@gmail.com>
parents:
182
diff
changeset
|
104 if not data then |
e30d0e30a0ff
Datamanager now deletes files with no data
Waqas Hussain <waqas20@gmail.com>
parents:
182
diff
changeset
|
105 data = {}; |
e30d0e30a0ff
Datamanager now deletes files with no data
Waqas Hussain <waqas20@gmail.com>
parents:
182
diff
changeset
|
106 end |
e30d0e30a0ff
Datamanager now deletes files with no data
Waqas Hussain <waqas20@gmail.com>
parents:
182
diff
changeset
|
107 -- save the datastore |
0 | 108 local f, msg = io_open(getpath(username, host, datastore), "w+"); |
117
8e5c5e6a3240
Fixed: datamanager.store and datamanager.load could crash when username or host arguments were nil. (useful for server specific and global data).
Waqas Hussain <waqas20@gmail.com>
parents:
88
diff
changeset
|
109 if not f then |
182
f5cb6b5a6eb7
Datamanager Fixes and improvements
Waqas Hussain <waqas20@gmail.com>
parents:
177
diff
changeset
|
110 log("error", "Unable to write to "..datastore.." storage ('"..msg.."') for user: "..(username or "nil").."@"..(host or "nil")); |
206
e30d0e30a0ff
Datamanager now deletes files with no data
Waqas Hussain <waqas20@gmail.com>
parents:
182
diff
changeset
|
111 return; |
117
8e5c5e6a3240
Fixed: datamanager.store and datamanager.load could crash when username or host arguments were nil. (useful for server specific and global data).
Waqas Hussain <waqas20@gmail.com>
parents:
88
diff
changeset
|
112 end |
0 | 113 f:write("return "); |
182
f5cb6b5a6eb7
Datamanager Fixes and improvements
Waqas Hussain <waqas20@gmail.com>
parents:
177
diff
changeset
|
114 simplesave(f, data, 1); |
0 | 115 f:close(); |
206
e30d0e30a0ff
Datamanager now deletes files with no data
Waqas Hussain <waqas20@gmail.com>
parents:
182
diff
changeset
|
116 if not next(data) then -- try to delete empty datastore |
e30d0e30a0ff
Datamanager now deletes files with no data
Waqas Hussain <waqas20@gmail.com>
parents:
182
diff
changeset
|
117 os_remove(getpath(username, host, datastore)); |
e30d0e30a0ff
Datamanager now deletes files with no data
Waqas Hussain <waqas20@gmail.com>
parents:
182
diff
changeset
|
118 end |
e30d0e30a0ff
Datamanager now deletes files with no data
Waqas Hussain <waqas20@gmail.com>
parents:
182
diff
changeset
|
119 -- we write data even when we are deleting because lua doesn't have a |
e30d0e30a0ff
Datamanager now deletes files with no data
Waqas Hussain <waqas20@gmail.com>
parents:
182
diff
changeset
|
120 -- platform independent way of checking for non-exisitng files |
0 | 121 return true; |
122 end | |
123 | |
247
681b29aa134f
Added support for storing (and removing), loading and appending to lists of data to datamanager (for supporting offline messages)
Waqas Hussain <waqas20@gmail.com>
parents:
206
diff
changeset
|
124 function list_append(username, host, datastore, data) |
681b29aa134f
Added support for storing (and removing), loading and appending to lists of data to datamanager (for supporting offline messages)
Waqas Hussain <waqas20@gmail.com>
parents:
206
diff
changeset
|
125 if not data then return; end |
681b29aa134f
Added support for storing (and removing), loading and appending to lists of data to datamanager (for supporting offline messages)
Waqas Hussain <waqas20@gmail.com>
parents:
206
diff
changeset
|
126 -- save the datastore |
681b29aa134f
Added support for storing (and removing), loading and appending to lists of data to datamanager (for supporting offline messages)
Waqas Hussain <waqas20@gmail.com>
parents:
206
diff
changeset
|
127 local f, msg = io_open(getpath(username, host, datastore, "list"), "a+"); |
681b29aa134f
Added support for storing (and removing), loading and appending to lists of data to datamanager (for supporting offline messages)
Waqas Hussain <waqas20@gmail.com>
parents:
206
diff
changeset
|
128 if not f then |
681b29aa134f
Added support for storing (and removing), loading and appending to lists of data to datamanager (for supporting offline messages)
Waqas Hussain <waqas20@gmail.com>
parents:
206
diff
changeset
|
129 log("error", "Unable to write to "..datastore.." storage ('"..msg.."') for user: "..(username or "nil").."@"..(host or "nil")); |
681b29aa134f
Added support for storing (and removing), loading and appending to lists of data to datamanager (for supporting offline messages)
Waqas Hussain <waqas20@gmail.com>
parents:
206
diff
changeset
|
130 return; |
681b29aa134f
Added support for storing (and removing), loading and appending to lists of data to datamanager (for supporting offline messages)
Waqas Hussain <waqas20@gmail.com>
parents:
206
diff
changeset
|
131 end |
681b29aa134f
Added support for storing (and removing), loading and appending to lists of data to datamanager (for supporting offline messages)
Waqas Hussain <waqas20@gmail.com>
parents:
206
diff
changeset
|
132 f:write("item("); |
681b29aa134f
Added support for storing (and removing), loading and appending to lists of data to datamanager (for supporting offline messages)
Waqas Hussain <waqas20@gmail.com>
parents:
206
diff
changeset
|
133 simplesave(f, data, 1); |
681b29aa134f
Added support for storing (and removing), loading and appending to lists of data to datamanager (for supporting offline messages)
Waqas Hussain <waqas20@gmail.com>
parents:
206
diff
changeset
|
134 f:write(");\n"); |
681b29aa134f
Added support for storing (and removing), loading and appending to lists of data to datamanager (for supporting offline messages)
Waqas Hussain <waqas20@gmail.com>
parents:
206
diff
changeset
|
135 f:close(); |
681b29aa134f
Added support for storing (and removing), loading and appending to lists of data to datamanager (for supporting offline messages)
Waqas Hussain <waqas20@gmail.com>
parents:
206
diff
changeset
|
136 return true; |
681b29aa134f
Added support for storing (and removing), loading and appending to lists of data to datamanager (for supporting offline messages)
Waqas Hussain <waqas20@gmail.com>
parents:
206
diff
changeset
|
137 end |
681b29aa134f
Added support for storing (and removing), loading and appending to lists of data to datamanager (for supporting offline messages)
Waqas Hussain <waqas20@gmail.com>
parents:
206
diff
changeset
|
138 |
681b29aa134f
Added support for storing (and removing), loading and appending to lists of data to datamanager (for supporting offline messages)
Waqas Hussain <waqas20@gmail.com>
parents:
206
diff
changeset
|
139 function list_store(username, host, datastore, data) |
681b29aa134f
Added support for storing (and removing), loading and appending to lists of data to datamanager (for supporting offline messages)
Waqas Hussain <waqas20@gmail.com>
parents:
206
diff
changeset
|
140 if not data then |
681b29aa134f
Added support for storing (and removing), loading and appending to lists of data to datamanager (for supporting offline messages)
Waqas Hussain <waqas20@gmail.com>
parents:
206
diff
changeset
|
141 data = {}; |
681b29aa134f
Added support for storing (and removing), loading and appending to lists of data to datamanager (for supporting offline messages)
Waqas Hussain <waqas20@gmail.com>
parents:
206
diff
changeset
|
142 end |
681b29aa134f
Added support for storing (and removing), loading and appending to lists of data to datamanager (for supporting offline messages)
Waqas Hussain <waqas20@gmail.com>
parents:
206
diff
changeset
|
143 -- save the datastore |
681b29aa134f
Added support for storing (and removing), loading and appending to lists of data to datamanager (for supporting offline messages)
Waqas Hussain <waqas20@gmail.com>
parents:
206
diff
changeset
|
144 local f, msg = io_open(getpath(username, host, datastore, "list"), "w+"); |
681b29aa134f
Added support for storing (and removing), loading and appending to lists of data to datamanager (for supporting offline messages)
Waqas Hussain <waqas20@gmail.com>
parents:
206
diff
changeset
|
145 if not f then |
681b29aa134f
Added support for storing (and removing), loading and appending to lists of data to datamanager (for supporting offline messages)
Waqas Hussain <waqas20@gmail.com>
parents:
206
diff
changeset
|
146 log("error", "Unable to write to "..datastore.." storage ('"..msg.."') for user: "..(username or "nil").."@"..(host or "nil")); |
681b29aa134f
Added support for storing (and removing), loading and appending to lists of data to datamanager (for supporting offline messages)
Waqas Hussain <waqas20@gmail.com>
parents:
206
diff
changeset
|
147 return; |
681b29aa134f
Added support for storing (and removing), loading and appending to lists of data to datamanager (for supporting offline messages)
Waqas Hussain <waqas20@gmail.com>
parents:
206
diff
changeset
|
148 end |
681b29aa134f
Added support for storing (and removing), loading and appending to lists of data to datamanager (for supporting offline messages)
Waqas Hussain <waqas20@gmail.com>
parents:
206
diff
changeset
|
149 for _, d in ipairs(data) do |
681b29aa134f
Added support for storing (and removing), loading and appending to lists of data to datamanager (for supporting offline messages)
Waqas Hussain <waqas20@gmail.com>
parents:
206
diff
changeset
|
150 f:write("item("); |
681b29aa134f
Added support for storing (and removing), loading and appending to lists of data to datamanager (for supporting offline messages)
Waqas Hussain <waqas20@gmail.com>
parents:
206
diff
changeset
|
151 simplesave(f, d, 1); |
681b29aa134f
Added support for storing (and removing), loading and appending to lists of data to datamanager (for supporting offline messages)
Waqas Hussain <waqas20@gmail.com>
parents:
206
diff
changeset
|
152 f:write(");\n"); |
681b29aa134f
Added support for storing (and removing), loading and appending to lists of data to datamanager (for supporting offline messages)
Waqas Hussain <waqas20@gmail.com>
parents:
206
diff
changeset
|
153 end |
681b29aa134f
Added support for storing (and removing), loading and appending to lists of data to datamanager (for supporting offline messages)
Waqas Hussain <waqas20@gmail.com>
parents:
206
diff
changeset
|
154 f:close(); |
681b29aa134f
Added support for storing (and removing), loading and appending to lists of data to datamanager (for supporting offline messages)
Waqas Hussain <waqas20@gmail.com>
parents:
206
diff
changeset
|
155 if not next(data) then -- try to delete empty datastore |
681b29aa134f
Added support for storing (and removing), loading and appending to lists of data to datamanager (for supporting offline messages)
Waqas Hussain <waqas20@gmail.com>
parents:
206
diff
changeset
|
156 os_remove(getpath(username, host, datastore, "list")); |
681b29aa134f
Added support for storing (and removing), loading and appending to lists of data to datamanager (for supporting offline messages)
Waqas Hussain <waqas20@gmail.com>
parents:
206
diff
changeset
|
157 end |
681b29aa134f
Added support for storing (and removing), loading and appending to lists of data to datamanager (for supporting offline messages)
Waqas Hussain <waqas20@gmail.com>
parents:
206
diff
changeset
|
158 -- we write data even when we are deleting because lua doesn't have a |
681b29aa134f
Added support for storing (and removing), loading and appending to lists of data to datamanager (for supporting offline messages)
Waqas Hussain <waqas20@gmail.com>
parents:
206
diff
changeset
|
159 -- platform independent way of checking for non-exisitng files |
681b29aa134f
Added support for storing (and removing), loading and appending to lists of data to datamanager (for supporting offline messages)
Waqas Hussain <waqas20@gmail.com>
parents:
206
diff
changeset
|
160 return true; |
681b29aa134f
Added support for storing (and removing), loading and appending to lists of data to datamanager (for supporting offline messages)
Waqas Hussain <waqas20@gmail.com>
parents:
206
diff
changeset
|
161 end |
681b29aa134f
Added support for storing (and removing), loading and appending to lists of data to datamanager (for supporting offline messages)
Waqas Hussain <waqas20@gmail.com>
parents:
206
diff
changeset
|
162 |
681b29aa134f
Added support for storing (and removing), loading and appending to lists of data to datamanager (for supporting offline messages)
Waqas Hussain <waqas20@gmail.com>
parents:
206
diff
changeset
|
163 function list_load(username, host, datastore) |
681b29aa134f
Added support for storing (and removing), loading and appending to lists of data to datamanager (for supporting offline messages)
Waqas Hussain <waqas20@gmail.com>
parents:
206
diff
changeset
|
164 local data, ret = loadfile(getpath(username, host, datastore, "list")); |
681b29aa134f
Added support for storing (and removing), loading and appending to lists of data to datamanager (for supporting offline messages)
Waqas Hussain <waqas20@gmail.com>
parents:
206
diff
changeset
|
165 if not data then |
681b29aa134f
Added support for storing (and removing), loading and appending to lists of data to datamanager (for supporting offline messages)
Waqas Hussain <waqas20@gmail.com>
parents:
206
diff
changeset
|
166 log("warn", "Failed to load "..datastore.." storage ('"..ret.."') for user: "..(username or "nil").."@"..(host or "nil")); |
681b29aa134f
Added support for storing (and removing), loading and appending to lists of data to datamanager (for supporting offline messages)
Waqas Hussain <waqas20@gmail.com>
parents:
206
diff
changeset
|
167 return nil; |
681b29aa134f
Added support for storing (and removing), loading and appending to lists of data to datamanager (for supporting offline messages)
Waqas Hussain <waqas20@gmail.com>
parents:
206
diff
changeset
|
168 end |
681b29aa134f
Added support for storing (and removing), loading and appending to lists of data to datamanager (for supporting offline messages)
Waqas Hussain <waqas20@gmail.com>
parents:
206
diff
changeset
|
169 local items = {}; |
681b29aa134f
Added support for storing (and removing), loading and appending to lists of data to datamanager (for supporting offline messages)
Waqas Hussain <waqas20@gmail.com>
parents:
206
diff
changeset
|
170 setfenv(data, {item = function(i) t_insert(items, i); end}); |
681b29aa134f
Added support for storing (and removing), loading and appending to lists of data to datamanager (for supporting offline messages)
Waqas Hussain <waqas20@gmail.com>
parents:
206
diff
changeset
|
171 local success, ret = pcall(data); |
681b29aa134f
Added support for storing (and removing), loading and appending to lists of data to datamanager (for supporting offline messages)
Waqas Hussain <waqas20@gmail.com>
parents:
206
diff
changeset
|
172 if not success then |
681b29aa134f
Added support for storing (and removing), loading and appending to lists of data to datamanager (for supporting offline messages)
Waqas Hussain <waqas20@gmail.com>
parents:
206
diff
changeset
|
173 log("error", "Unable to load "..datastore.." storage ('"..ret.."') for user: "..(username or "nil").."@"..(host or "nil")); |
681b29aa134f
Added support for storing (and removing), loading and appending to lists of data to datamanager (for supporting offline messages)
Waqas Hussain <waqas20@gmail.com>
parents:
206
diff
changeset
|
174 return nil; |
681b29aa134f
Added support for storing (and removing), loading and appending to lists of data to datamanager (for supporting offline messages)
Waqas Hussain <waqas20@gmail.com>
parents:
206
diff
changeset
|
175 end |
681b29aa134f
Added support for storing (and removing), loading and appending to lists of data to datamanager (for supporting offline messages)
Waqas Hussain <waqas20@gmail.com>
parents:
206
diff
changeset
|
176 return items; |
681b29aa134f
Added support for storing (and removing), loading and appending to lists of data to datamanager (for supporting offline messages)
Waqas Hussain <waqas20@gmail.com>
parents:
206
diff
changeset
|
177 end |
681b29aa134f
Added support for storing (and removing), loading and appending to lists of data to datamanager (for supporting offline messages)
Waqas Hussain <waqas20@gmail.com>
parents:
206
diff
changeset
|
178 |
681b29aa134f
Added support for storing (and removing), loading and appending to lists of data to datamanager (for supporting offline messages)
Waqas Hussain <waqas20@gmail.com>
parents:
206
diff
changeset
|
179 return _M; |