Software /
code /
prosody
Comparison
plugins/mod_mam/mod_mam.lua @ 7842:9332b43931f5
mod_mam: Add some comments explaining archive expiry
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Sat, 19 Nov 2016 18:26:09 +0100 |
parent | 7841:ca3bdb606b1f |
child | 7843:04b09fd144eb |
comparison
equal
deleted
inserted
replaced
7841:ca3bdb606b1f | 7842:9332b43931f5 |
---|---|
236 -- We store chat messages or normal messages that have a body | 236 -- We store chat messages or normal messages that have a body |
237 if not(orig_type == "chat" or (orig_type == "normal" and stanza:get_child("body")) ) then | 237 if not(orig_type == "chat" or (orig_type == "normal" and stanza:get_child("body")) ) then |
238 log("debug", "Not archiving stanza: %s (type)", stanza:top_tag()); | 238 log("debug", "Not archiving stanza: %s (type)", stanza:top_tag()); |
239 return; | 239 return; |
240 end | 240 end |
241 | |
241 -- or if hints suggest we shouldn't | 242 -- or if hints suggest we shouldn't |
242 if stanza:get_child("no-permanent-storage", "urn:xmpp:hints") -- The XEP needs to decide on "store" or "storage" | 243 if stanza:get_child("no-permanent-storage", "urn:xmpp:hints") -- The XEP needs to decide on "store" or "storage" |
243 or stanza:get_child("no-permanent-store", "urn:xmpp:hints") | 244 or stanza:get_child("no-permanent-store", "urn:xmpp:hints") |
244 or stanza:get_child("no-storage", "urn:xmpp:hints") | 245 or stanza:get_child("no-storage", "urn:xmpp:hints") |
245 or stanza:get_child("no-store", "urn:xmpp:hints") then | 246 or stanza:get_child("no-store", "urn:xmpp:hints") then |
289 if not archive.delete then | 290 if not archive.delete then |
290 module:log("error", "archive_expires_after set but mod_%s does not support deleting", archive._provided_by); | 291 module:log("error", "archive_expires_after set but mod_%s does not support deleting", archive._provided_by); |
291 return false; | 292 return false; |
292 end | 293 end |
293 | 294 |
295 -- Set of known users to do message expiry for | |
296 -- Populated either below or when new messages are added | |
294 cleanup = {}; | 297 cleanup = {}; |
295 | 298 |
299 -- Iterating over users is not supported by all authentication modules | |
300 -- Catch and ignore error if not supported | |
296 pcall(function () | 301 pcall(function () |
302 -- If this works, then we schedule cleanup for all known known | |
297 for user in um.users(module.host) do | 303 for user in um.users(module.host) do |
298 cleanup[user] = true; | 304 cleanup[user] = true; |
299 end | 305 end |
300 end); | 306 end); |
301 | 307 |
308 -- At odd intervals, delete old messages for one user | |
302 module:add_timer(math.random(10, 60), function() | 309 module:add_timer(math.random(10, 60), function() |
303 local user = next(cleanup); | 310 local user = next(cleanup); |
304 if user then | 311 if user then |
305 module:log("debug", "Removing old messages for user %q", user); | 312 module:log("debug", "Removing old messages for user %q", user); |
306 local ok, err = archive:delete(user, { ["end"] = os.time() - cleanup_after; }) | 313 local ok, err = archive:delete(user, { ["end"] = os.time() - cleanup_after; }) |