Mercurial > prosody-hg
annotate plugins/mod_offline.lua @ 14222:ad7f7b5f4792
util.tlsref: Bump default version to 6.0
| author | Matthew Wild <mwild1@gmail.com> |
|---|---|
| date | Fri, 12 Jun 2026 13:12:16 +0100 |
| parents | 30d457b2b0c4 |
| children |
| rev | line source |
|---|---|
|
2680
1b267876246a
Backed out changeset e7b09424b486 (not removing mod_offline for trunk)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1 -- Prosody IM |
|
1b267876246a
Backed out changeset e7b09424b486 (not removing mod_offline for trunk)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2 -- Copyright (C) 2008-2009 Matthew Wild |
|
1b267876246a
Backed out changeset e7b09424b486 (not removing mod_offline for trunk)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
3 -- Copyright (C) 2008-2009 Waqas Hussain |
|
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
3973
diff
changeset
|
4 -- |
|
2680
1b267876246a
Backed out changeset e7b09424b486 (not removing mod_offline for trunk)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5 -- This project is MIT/X11 licensed. Please see the |
|
1b267876246a
Backed out changeset e7b09424b486 (not removing mod_offline for trunk)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
6 -- COPYING file in the source package for more information. |
|
1b267876246a
Backed out changeset e7b09424b486 (not removing mod_offline for trunk)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
7 -- |
|
1b267876246a
Backed out changeset e7b09424b486 (not removing mod_offline for trunk)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
8 |
|
2737
2251f8898900
mod_offline: Convert to Unix line endings.
Waqas Hussain <waqas20@gmail.com>
parents:
2680
diff
changeset
|
9 |
|
12977
74b9e05af71e
plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
10296
diff
changeset
|
10 local datetime = require "prosody.util.datetime"; |
|
74b9e05af71e
plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
10296
diff
changeset
|
11 local jid_split = require "prosody.util.jid".split; |
|
13995
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
12 local datestamp = require "prosody.util.datetime".date; |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
13 |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
14 local cleanup_after = module:get_option_period("offline_expires_after", "never"); |
|
2737
2251f8898900
mod_offline: Convert to Unix line endings.
Waqas Hussain <waqas20@gmail.com>
parents:
2680
diff
changeset
|
15 |
|
8024
8eec715c13a6
mod_offline: Switch to using archive store via the storagemanager API
Kim Alvefur <zash@zash.se>
parents:
6834
diff
changeset
|
16 local offline_messages = module:open_store("offline", "archive"); |
|
8eec715c13a6
mod_offline: Switch to using archive store via the storagemanager API
Kim Alvefur <zash@zash.se>
parents:
6834
diff
changeset
|
17 |
|
2737
2251f8898900
mod_offline: Convert to Unix line endings.
Waqas Hussain <waqas20@gmail.com>
parents:
2680
diff
changeset
|
18 module:add_feature("msgoffline"); |
|
2251f8898900
mod_offline: Convert to Unix line endings.
Waqas Hussain <waqas20@gmail.com>
parents:
2680
diff
changeset
|
19 |
|
13995
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
20 function schedule_cleanup(_username, _date) -- luacheck: ignore 212 |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
21 -- Called to make a note of which users have messages on which days, which in |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
22 -- turn is used to optimize the message expiry routine. |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
23 -- |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
24 -- This noop is conditionally replaced later depending on retention settings |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
25 -- and storage backend capabilities. |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
26 end |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
27 |
|
3972
a05cf5d9c7ab
mod_message, mod_offline: Change message/offline/store -> message/offline/handle
Robert Hoelz <rob@hoelz.ro>
parents:
3971
diff
changeset
|
28 module:hook("message/offline/handle", function(event) |
|
2737
2251f8898900
mod_offline: Convert to Unix line endings.
Waqas Hussain <waqas20@gmail.com>
parents:
2680
diff
changeset
|
29 local origin, stanza = event.origin, event.stanza; |
|
2251f8898900
mod_offline: Convert to Unix line endings.
Waqas Hussain <waqas20@gmail.com>
parents:
2680
diff
changeset
|
30 local to = stanza.attr.to; |
|
8024
8eec715c13a6
mod_offline: Switch to using archive store via the storagemanager API
Kim Alvefur <zash@zash.se>
parents:
6834
diff
changeset
|
31 local node; |
|
2737
2251f8898900
mod_offline: Convert to Unix line endings.
Waqas Hussain <waqas20@gmail.com>
parents:
2680
diff
changeset
|
32 if to then |
|
8024
8eec715c13a6
mod_offline: Switch to using archive store via the storagemanager API
Kim Alvefur <zash@zash.se>
parents:
6834
diff
changeset
|
33 node = jid_split(to) |
|
2737
2251f8898900
mod_offline: Convert to Unix line endings.
Waqas Hussain <waqas20@gmail.com>
parents:
2680
diff
changeset
|
34 else |
|
8024
8eec715c13a6
mod_offline: Switch to using archive store via the storagemanager API
Kim Alvefur <zash@zash.se>
parents:
6834
diff
changeset
|
35 node = origin.username; |
|
2737
2251f8898900
mod_offline: Convert to Unix line endings.
Waqas Hussain <waqas20@gmail.com>
parents:
2680
diff
changeset
|
36 end |
|
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
3973
diff
changeset
|
37 |
|
10296
7072569044d4
mod_offline: Log a debug message when message is stored
Kim Alvefur <zash@zash.se>
parents:
10242
diff
changeset
|
38 local ok = offline_messages:append(node, nil, stanza, os.time(), ""); |
|
7072569044d4
mod_offline: Log a debug message when message is stored
Kim Alvefur <zash@zash.se>
parents:
10242
diff
changeset
|
39 if ok then |
|
13995
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
40 schedule_cleanup(node); |
|
10296
7072569044d4
mod_offline: Log a debug message when message is stored
Kim Alvefur <zash@zash.se>
parents:
10242
diff
changeset
|
41 module:log("debug", "Saved to offline storage: %s", stanza:top_tag()); |
|
7072569044d4
mod_offline: Log a debug message when message is stored
Kim Alvefur <zash@zash.se>
parents:
10242
diff
changeset
|
42 end |
|
7072569044d4
mod_offline: Log a debug message when message is stored
Kim Alvefur <zash@zash.se>
parents:
10242
diff
changeset
|
43 return ok; |
|
6834
750a97b45f88
mod_offline: Decrease priority of event handlers so 3rd party hooks fire first by default
Kim Alvefur <zash@zash.se>
parents:
5776
diff
changeset
|
44 end, -1); |
|
2737
2251f8898900
mod_offline: Convert to Unix line endings.
Waqas Hussain <waqas20@gmail.com>
parents:
2680
diff
changeset
|
45 |
|
2251f8898900
mod_offline: Convert to Unix line endings.
Waqas Hussain <waqas20@gmail.com>
parents:
2680
diff
changeset
|
46 module:hook("message/offline/broadcast", function(event) |
|
2251f8898900
mod_offline: Convert to Unix line endings.
Waqas Hussain <waqas20@gmail.com>
parents:
2680
diff
changeset
|
47 local origin = event.origin; |
|
10242
7e5d2a6c9390
mod_offline: Add some debug logging to reduce confusion
Kim Alvefur <zash@zash.se>
parents:
8030
diff
changeset
|
48 origin.log("debug", "Broadcasting offline messages"); |
|
3520
dc94193ec942
Alter mod_offline to respect negative priority resources
Robert Hoelz <rob@hoelz.ro>
parents:
2737
diff
changeset
|
49 |
|
3973
f5416372350d
Don't check priority in mod_offline
Robert Hoelz <rob@hoelz.ro>
parents:
3972
diff
changeset
|
50 local node, host = origin.username, origin.host; |
|
3540
bc139431830b
Monster whitespace commit (beware the whitespace monster).
Waqas Hussain <waqas20@gmail.com>
parents:
3520
diff
changeset
|
51 |
|
8024
8eec715c13a6
mod_offline: Switch to using archive store via the storagemanager API
Kim Alvefur <zash@zash.se>
parents:
6834
diff
changeset
|
52 local data = offline_messages:find(node); |
|
3973
f5416372350d
Don't check priority in mod_offline
Robert Hoelz <rob@hoelz.ro>
parents:
3972
diff
changeset
|
53 if not data then return true; end |
|
8024
8eec715c13a6
mod_offline: Switch to using archive store via the storagemanager API
Kim Alvefur <zash@zash.se>
parents:
6834
diff
changeset
|
54 for _, stanza, when in data do |
|
8eec715c13a6
mod_offline: Switch to using archive store via the storagemanager API
Kim Alvefur <zash@zash.se>
parents:
6834
diff
changeset
|
55 stanza:tag("delay", {xmlns = "urn:xmpp:delay", from = host, stamp = datetime.datetime(when)}):up(); -- XEP-0203 |
|
3973
f5416372350d
Don't check priority in mod_offline
Robert Hoelz <rob@hoelz.ro>
parents:
3972
diff
changeset
|
56 origin.send(stanza); |
|
3540
bc139431830b
Monster whitespace commit (beware the whitespace monster).
Waqas Hussain <waqas20@gmail.com>
parents:
3520
diff
changeset
|
57 end |
|
10242
7e5d2a6c9390
mod_offline: Add some debug logging to reduce confusion
Kim Alvefur <zash@zash.se>
parents:
8030
diff
changeset
|
58 local ok = offline_messages:delete(node); |
|
7e5d2a6c9390
mod_offline: Add some debug logging to reduce confusion
Kim Alvefur <zash@zash.se>
parents:
8030
diff
changeset
|
59 if type(ok) == "number" and ok > 0 then |
|
7e5d2a6c9390
mod_offline: Add some debug logging to reduce confusion
Kim Alvefur <zash@zash.se>
parents:
8030
diff
changeset
|
60 origin.log("debug", "%d offline messages consumed"); |
|
7e5d2a6c9390
mod_offline: Add some debug logging to reduce confusion
Kim Alvefur <zash@zash.se>
parents:
8030
diff
changeset
|
61 end |
|
3973
f5416372350d
Don't check priority in mod_offline
Robert Hoelz <rob@hoelz.ro>
parents:
3972
diff
changeset
|
62 return true; |
|
6834
750a97b45f88
mod_offline: Decrease priority of event handlers so 3rd party hooks fire first by default
Kim Alvefur <zash@zash.se>
parents:
5776
diff
changeset
|
63 end, -1); |
|
13995
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
64 |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
65 if cleanup_after ~= math.huge then |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
66 local cleanup_storage = module:open_store("offline_cleanup"); |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
67 local cleanup_map = module:open_store("offline_cleanup", "map"); |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
68 |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
69 module:log("debug", "offline_expires_after = %d -- in seconds", cleanup_after); |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
70 |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
71 if not offline_messages.delete then |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
72 module:log("error", "offline_expires_after set but mod_%s does not support deleting", offline_messages._provided_by); |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
73 return false; |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
74 end |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
75 |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
76 -- For each day, store a set of users that have new messages. To expire |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
77 -- messages, we collect the union of sets of users from dates that fall |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
78 -- outside the cleanup range. |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
79 |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
80 if not (offline_messages.caps and offline_messages.caps.wildcard_delete) then |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
81 local last_date = require "prosody.util.cache".new(module:get_option_integer("archive_cleanup_date_cache_size", 1000, 1)); |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
82 function schedule_cleanup(username, date) |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
83 date = date or datestamp(); |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
84 if last_date:get(username) == date then return end |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
85 local ok = cleanup_map:set(date, username, true); |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
86 if ok then |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
87 last_date:set(username, date); |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
88 end |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
89 end |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
90 end |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
91 |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
92 local cleanup_time = module:measure("cleanup", "times"); |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
93 |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
94 local async = require "prosody.util.async"; |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
95 module:daily("Remove expired offline messages", function () |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
96 local cleanup_done = cleanup_time(); |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
97 |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
98 if offline_messages.caps and offline_messages.caps.wildcard_delete then |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
99 local ok, err = offline_messages:delete(true, { ["end"] = os.time() - cleanup_after }) |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
100 if ok then |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
101 local sum = tonumber(ok); |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
102 if sum then |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
103 module:log("info", "Deleted %d expired messages", sum); |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
104 else |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
105 -- driver did not tell |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
106 module:log("info", "Deleted all expired messages"); |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
107 end |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
108 else |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
109 module:log("error", "Could not delete messages: %s", err); |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
110 end |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
111 cleanup_done(); |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
112 return; |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
113 end |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
114 |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
115 local users = {}; |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
116 local cut_off = datestamp(os.time() - cleanup_after); |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
117 for date in cleanup_storage:users() do |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
118 if date <= cut_off then |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
119 module:log("debug", "Messages from %q should be expired", date); |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
120 local messages_this_day = cleanup_storage:get(date); |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
121 if messages_this_day then |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
122 for user in pairs(messages_this_day) do |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
123 users[user] = true; |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
124 end |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
125 if date < cut_off then |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
126 -- Messages from the same day as the cut-off might not have expired yet, |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
127 -- but all earlier will have, so clear storage for those days. |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
128 cleanup_storage:set(date, nil); |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
129 end |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
130 end |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
131 end |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
132 end |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
133 local sum, num_users = 0, 0; |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
134 for user in pairs(users) do |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
135 local ok, err = offline_messages:delete(user, { ["end"] = os.time() - cleanup_after; }) |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
136 if ok then |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
137 num_users = num_users + 1; |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
138 sum = sum + (tonumber(ok) or 0); |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
139 else |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
140 cleanup_map:set(cut_off, user, true); |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
141 module:log("error", "Could not delete messages for user '%s': %s", user, err); |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
142 end |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
143 local wait, done = async.waiter(); |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
144 module:add_timer(0.01, done); |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
145 wait(); |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
146 end |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
147 module:log("info", "Deleted %d expired messages for %d users", sum, num_users); |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
148 cleanup_done(); |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
149 end); |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
150 |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
151 else |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
152 module:log("debug", "Offline message expiry disabled"); |
|
30d457b2b0c4
mod_offline: Support for expiring and cleaning up old offline messages
Matthew Wild <mwild1@gmail.com>
parents:
12977
diff
changeset
|
153 end |
