equal
deleted
inserted
replaced
|
1 local auto_purge_enabled = module:get_option_boolean("storage_memory_temporary", false); |
|
2 local auto_purge_stores = module:get_option_set("storage_memory_temporary_stores", {}); |
1 |
3 |
2 local memory = setmetatable({}, { |
4 local memory = setmetatable({}, { |
3 __index = function(t, k) |
5 __index = function(t, k) |
4 local store = module:shared(k) |
6 local store = module:shared(k) |
5 t[k] = store; |
7 t[k] = store; |
169 return setmetatable({ store = memory[store] }, store_mt); |
171 return setmetatable({ store = memory[store] }, store_mt); |
170 end |
172 end |
171 return nil, "unsupported-store"; |
173 return nil, "unsupported-store"; |
172 end |
174 end |
173 |
175 |
|
176 if auto_purge_enabled then |
|
177 module:hook("resource-unbind", function (event) |
|
178 local user_bare_jid = event.session.username.."@"..event.session.host; |
|
179 if not prosody.bare_sessions[user_bare_jid] then -- User went offline |
|
180 module:log("debug", "Clearing store for offline user %s", user_bare_jid); |
|
181 local f, s, v; |
|
182 if auto_purge_stores:empty() then |
|
183 f, s, v = pairs(memory); |
|
184 else |
|
185 f, s, v = auto_purge_stores:items(); |
|
186 end |
|
187 |
|
188 for store_name in f, s, v do |
|
189 if memory[store_name] then |
|
190 memory[store_name][event.session.username] = nil; |
|
191 end |
|
192 end |
|
193 end |
|
194 end); |
|
195 end |
|
196 |
174 module:provides("storage", driver); |
197 module:provides("storage", driver); |