diff options
Diffstat (limited to 'plugins/mod_mam/mamprefs.lib.lua')
-rw-r--r-- | plugins/mod_mam/mamprefs.lib.lua | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/plugins/mod_mam/mamprefs.lib.lua b/plugins/mod_mam/mamprefs.lib.lua new file mode 100644 index 00000000..dd82b626 --- /dev/null +++ b/plugins/mod_mam/mamprefs.lib.lua @@ -0,0 +1,76 @@ +-- Prosody IM +-- Copyright (C) 2008-2017 Matthew Wild +-- Copyright (C) 2008-2017 Waqas Hussain +-- Copyright (C) 2011-2017 Kim Alvefur +-- +-- This project is MIT/X11 licensed. Please see the +-- COPYING file in the source package for more information. +-- +-- XEP-0313: Message Archive Management for Prosody +-- +-- luacheck: ignore 122/prosody + +local global_default_policy = module:get_option_string("default_archive_policy", true); +if global_default_policy ~= "roster" then + global_default_policy = module:get_option_boolean("default_archive_policy", global_default_policy); +end +local smart_enable = module:get_option_boolean("mam_smart_enable", false); + +do + -- luacheck: ignore 211/prefs_format + local prefs_format = { + [false] = "roster", + -- default ::= true | false | "roster" + -- true = always, false = never, nil = global default + ["romeo@montague.net"] = true, -- always + ["montague@montague.net"] = false, -- newer + }; +end + +local sessions = prosody.hosts[module.host].sessions; +local archive_store = module:get_option_string("archive_store", "archive"); +local prefs = module:open_store(archive_store .. "_prefs"); + +local function get_prefs(user, explicit) + local user_sessions = sessions[user]; + local user_prefs = user_sessions and user_sessions.archive_prefs + if not user_prefs then + -- prefs not cached + user_prefs = prefs:get(user); + if not user_prefs then + -- prefs not set + if smart_enable and explicit then + -- a mam-capable client was involved in this action, set defaults + user_prefs = { [false] = global_default_policy }; + prefs:set(user, user_prefs); + end + end + if user_sessions then + -- cache settings if they originate from user action + user_sessions.archive_prefs = user_prefs; + end + if not user_prefs then + if smart_enable then + -- not yet enabled, either explicitly or "smart" + user_prefs = { [false] = false }; + else + -- no explicit settings, return defaults + user_prefs = { [false] = global_default_policy }; + end + end + end + return user_prefs; +end + +local function set_prefs(user, user_prefs) + local user_sessions = sessions[user]; + if user_sessions then + user_sessions.archive_prefs = user_prefs; + end + return prefs:set(user, user_prefs); +end + +return { + get = get_prefs, + set = set_prefs, +} |