author | Kim Alvefur <zash@zash.se> |
Sat, 23 Mar 2024 20:48:19 +0100 | |
changeset 13465 | c673ff1075bd |
parent 13206 | 173038306750 |
permissions | -rw-r--r-- |
7854
80ee0d9cd56f
mod_mam: Normalize copyright headers
Kim Alvefur <zash@zash.se>
parents:
7853
diff
changeset
|
1 |
-- Prosody IM |
80ee0d9cd56f
mod_mam: Normalize copyright headers
Kim Alvefur <zash@zash.se>
parents:
7853
diff
changeset
|
2 |
-- Copyright (C) 2008-2017 Matthew Wild |
80ee0d9cd56f
mod_mam: Normalize copyright headers
Kim Alvefur <zash@zash.se>
parents:
7853
diff
changeset
|
3 |
-- Copyright (C) 2008-2017 Waqas Hussain |
80ee0d9cd56f
mod_mam: Normalize copyright headers
Kim Alvefur <zash@zash.se>
parents:
7853
diff
changeset
|
4 |
-- Copyright (C) 2011-2017 Kim Alvefur |
80ee0d9cd56f
mod_mam: Normalize copyright headers
Kim Alvefur <zash@zash.se>
parents:
7853
diff
changeset
|
5 |
-- |
80ee0d9cd56f
mod_mam: Normalize copyright headers
Kim Alvefur <zash@zash.se>
parents:
7853
diff
changeset
|
6 |
-- This project is MIT/X11 licensed. Please see the |
80ee0d9cd56f
mod_mam: Normalize copyright headers
Kim Alvefur <zash@zash.se>
parents:
7853
diff
changeset
|
7 |
-- COPYING file in the source package for more information. |
80ee0d9cd56f
mod_mam: Normalize copyright headers
Kim Alvefur <zash@zash.se>
parents:
7853
diff
changeset
|
8 |
-- |
7839
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
9 |
-- XEP-0313: Message Archive Management for Prosody |
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
10 |
-- |
7887
60d3b53a36f7
mod_mam: Ignore "indirectly mutating read-only global variable prosody" warning [luacheck]
Kim Alvefur <zash@zash.se>
parents:
7886
diff
changeset
|
11 |
-- luacheck: ignore 122/prosody |
7839
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
12 |
|
13206
173038306750
plugins: Use get_option_enum where appropriate
Kim Alvefur <zash@zash.se>
parents:
8541
diff
changeset
|
13 |
local global_default_policy = module:get_option_enum("default_archive_policy", "always", "roster", "never", true, false); |
173038306750
plugins: Use get_option_enum where appropriate
Kim Alvefur <zash@zash.se>
parents:
8541
diff
changeset
|
14 |
local smart_enable = module:get_option_boolean("mam_smart_enable", false); |
173038306750
plugins: Use get_option_enum where appropriate
Kim Alvefur <zash@zash.se>
parents:
8541
diff
changeset
|
15 |
|
173038306750
plugins: Use get_option_enum where appropriate
Kim Alvefur <zash@zash.se>
parents:
8541
diff
changeset
|
16 |
if global_default_policy == "always" then |
173038306750
plugins: Use get_option_enum where appropriate
Kim Alvefur <zash@zash.se>
parents:
8541
diff
changeset
|
17 |
global_default_policy = true; |
173038306750
plugins: Use get_option_enum where appropriate
Kim Alvefur <zash@zash.se>
parents:
8541
diff
changeset
|
18 |
elseif global_default_policy == "never" then |
173038306750
plugins: Use get_option_enum where appropriate
Kim Alvefur <zash@zash.se>
parents:
8541
diff
changeset
|
19 |
global_default_policy = false; |
7982
a1e88642411d
mod_mam: Handle default_archive_policy option consistently
Kim Alvefur <zash@zash.se>
parents:
7887
diff
changeset
|
20 |
end |
7839
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
21 |
|
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
22 |
do |
7858
e429982940fc
mod_mam: Silence warning about unused table used to describe data format [luacheck]
Kim Alvefur <zash@zash.se>
parents:
7854
diff
changeset
|
23 |
-- luacheck: ignore 211/prefs_format |
7839
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
24 |
local prefs_format = { |
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
25 |
[false] = "roster", |
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
26 |
-- default ::= true | false | "roster" |
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
27 |
-- true = always, false = never, nil = global default |
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
28 |
["romeo@montague.net"] = true, -- always |
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
29 |
["montague@montague.net"] = false, -- newer |
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
30 |
}; |
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
31 |
end |
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
32 |
|
7886
9ff791c9f069
mod_mam/mamprefs: Use 'prosody.hosts' instead of '_G.hosts' in case we ever deprecate the later
Kim Alvefur <zash@zash.se>
parents:
7858
diff
changeset
|
33 |
local sessions = prosody.hosts[module.host].sessions; |
7853
10d91860172f
mod_mam: Change store name to "archive" but make it configurable for people who have data in "archive2"
Kim Alvefur <zash@zash.se>
parents:
7839
diff
changeset
|
34 |
local archive_store = module:get_option_string("archive_store", "archive"); |
10d91860172f
mod_mam: Change store name to "archive" but make it configurable for people who have data in "archive2"
Kim Alvefur <zash@zash.se>
parents:
7839
diff
changeset
|
35 |
local prefs = module:open_store(archive_store .. "_prefs"); |
7839
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
36 |
|
8541
3eb4cafb3b64
mod_mam: Implement option to enable MAM implicitly when client support is detected (#867)
Kim Alvefur <zash@zash.se>
parents:
8356
diff
changeset
|
37 |
local function get_prefs(user, explicit) |
7839
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
38 |
local user_sessions = sessions[user]; |
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
39 |
local user_prefs = user_sessions and user_sessions.archive_prefs |
8356
aa6497031924
mod_mam: Load archiving preferes for offline users (fixes #1024)
Kim Alvefur <zash@zash.se>
parents:
7982
diff
changeset
|
40 |
if not user_prefs then |
8541
3eb4cafb3b64
mod_mam: Implement option to enable MAM implicitly when client support is detected (#867)
Kim Alvefur <zash@zash.se>
parents:
8356
diff
changeset
|
41 |
-- prefs not cached |
7839
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
42 |
user_prefs = prefs:get(user); |
8541
3eb4cafb3b64
mod_mam: Implement option to enable MAM implicitly when client support is detected (#867)
Kim Alvefur <zash@zash.se>
parents:
8356
diff
changeset
|
43 |
if not user_prefs then |
3eb4cafb3b64
mod_mam: Implement option to enable MAM implicitly when client support is detected (#867)
Kim Alvefur <zash@zash.se>
parents:
8356
diff
changeset
|
44 |
-- prefs not set |
3eb4cafb3b64
mod_mam: Implement option to enable MAM implicitly when client support is detected (#867)
Kim Alvefur <zash@zash.se>
parents:
8356
diff
changeset
|
45 |
if smart_enable and explicit then |
3eb4cafb3b64
mod_mam: Implement option to enable MAM implicitly when client support is detected (#867)
Kim Alvefur <zash@zash.se>
parents:
8356
diff
changeset
|
46 |
-- a mam-capable client was involved in this action, set defaults |
3eb4cafb3b64
mod_mam: Implement option to enable MAM implicitly when client support is detected (#867)
Kim Alvefur <zash@zash.se>
parents:
8356
diff
changeset
|
47 |
user_prefs = { [false] = global_default_policy }; |
3eb4cafb3b64
mod_mam: Implement option to enable MAM implicitly when client support is detected (#867)
Kim Alvefur <zash@zash.se>
parents:
8356
diff
changeset
|
48 |
prefs:set(user, user_prefs); |
3eb4cafb3b64
mod_mam: Implement option to enable MAM implicitly when client support is detected (#867)
Kim Alvefur <zash@zash.se>
parents:
8356
diff
changeset
|
49 |
end |
3eb4cafb3b64
mod_mam: Implement option to enable MAM implicitly when client support is detected (#867)
Kim Alvefur <zash@zash.se>
parents:
8356
diff
changeset
|
50 |
end |
8356
aa6497031924
mod_mam: Load archiving preferes for offline users (fixes #1024)
Kim Alvefur <zash@zash.se>
parents:
7982
diff
changeset
|
51 |
if user_sessions then |
8541
3eb4cafb3b64
mod_mam: Implement option to enable MAM implicitly when client support is detected (#867)
Kim Alvefur <zash@zash.se>
parents:
8356
diff
changeset
|
52 |
-- cache settings if they originate from user action |
8356
aa6497031924
mod_mam: Load archiving preferes for offline users (fixes #1024)
Kim Alvefur <zash@zash.se>
parents:
7982
diff
changeset
|
53 |
user_sessions.archive_prefs = user_prefs; |
aa6497031924
mod_mam: Load archiving preferes for offline users (fixes #1024)
Kim Alvefur <zash@zash.se>
parents:
7982
diff
changeset
|
54 |
end |
8541
3eb4cafb3b64
mod_mam: Implement option to enable MAM implicitly when client support is detected (#867)
Kim Alvefur <zash@zash.se>
parents:
8356
diff
changeset
|
55 |
if not user_prefs then |
3eb4cafb3b64
mod_mam: Implement option to enable MAM implicitly when client support is detected (#867)
Kim Alvefur <zash@zash.se>
parents:
8356
diff
changeset
|
56 |
if smart_enable then |
3eb4cafb3b64
mod_mam: Implement option to enable MAM implicitly when client support is detected (#867)
Kim Alvefur <zash@zash.se>
parents:
8356
diff
changeset
|
57 |
-- not yet enabled, either explicitly or "smart" |
3eb4cafb3b64
mod_mam: Implement option to enable MAM implicitly when client support is detected (#867)
Kim Alvefur <zash@zash.se>
parents:
8356
diff
changeset
|
58 |
user_prefs = { [false] = false }; |
3eb4cafb3b64
mod_mam: Implement option to enable MAM implicitly when client support is detected (#867)
Kim Alvefur <zash@zash.se>
parents:
8356
diff
changeset
|
59 |
else |
3eb4cafb3b64
mod_mam: Implement option to enable MAM implicitly when client support is detected (#867)
Kim Alvefur <zash@zash.se>
parents:
8356
diff
changeset
|
60 |
-- no explicit settings, return defaults |
3eb4cafb3b64
mod_mam: Implement option to enable MAM implicitly when client support is detected (#867)
Kim Alvefur <zash@zash.se>
parents:
8356
diff
changeset
|
61 |
user_prefs = { [false] = global_default_policy }; |
3eb4cafb3b64
mod_mam: Implement option to enable MAM implicitly when client support is detected (#867)
Kim Alvefur <zash@zash.se>
parents:
8356
diff
changeset
|
62 |
end |
3eb4cafb3b64
mod_mam: Implement option to enable MAM implicitly when client support is detected (#867)
Kim Alvefur <zash@zash.se>
parents:
8356
diff
changeset
|
63 |
end |
7839
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
64 |
end |
8541
3eb4cafb3b64
mod_mam: Implement option to enable MAM implicitly when client support is detected (#867)
Kim Alvefur <zash@zash.se>
parents:
8356
diff
changeset
|
65 |
return user_prefs; |
7839
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
66 |
end |
8541
3eb4cafb3b64
mod_mam: Implement option to enable MAM implicitly when client support is detected (#867)
Kim Alvefur <zash@zash.se>
parents:
8356
diff
changeset
|
67 |
|
7839
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
68 |
local function set_prefs(user, user_prefs) |
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
69 |
local user_sessions = sessions[user]; |
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
70 |
if user_sessions then |
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
71 |
user_sessions.archive_prefs = user_prefs; |
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
72 |
end |
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
73 |
return prefs:set(user, user_prefs); |
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
74 |
end |
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
75 |
|
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
76 |
return { |
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
77 |
get = get_prefs, |
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
78 |
set = set_prefs, |
30fac9154fd4
mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
79 |
} |