Mercurial > prosody-modules
view mod_mam/mamprefsxml.lib.lua @ 1137:431627b07b9f
mod_mam/mamprefs.lib: Cache prefs in memory to save storage calls
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Sat, 10 Aug 2013 20:42:56 +0200 |
parents | 0d6ab5e4bc30 |
children | 18349533c44d |
line wrap: on
line source
-- XEP-0313: Message Archive Management for Prosody -- Copyright (C) 2011-2013 Kim Alvefur -- -- This file is MIT/X11 licensed. local st = require"util.stanza"; local xmlns_mam = "urn:xmpp:mam:tmp"; local global_default_policy = module:get_option("default_archive_policy", false); local default_attrs = { always = true, [true] = "always", never = false, [false] = "never", roster = "roster", } local function tostanza(prefs) local default = prefs[false]; default = default ~= nil and default_attrs[default] or global_default_policy; local prefstanza = st.stanza("prefs", { xmlns = xmlns_mam, default = default }); local always = st.stanza("always"); local never = st.stanza("never"); for jid, choice in pairs(prefs) do if jid then (choice and always or never):tag("jid"):text(jid):up(); end end prefstanza:add_child(always):add_child(never); return prefstanza; end local function fromstanza(prefstanza) local prefs = {}; local default = prefstanza.attr.default; if default then prefs[false] = default_attrs[default]; end local always = prefstanza:get_child("always"); if always then for rule in always:childtags("jid") do local jid = rule:get_text(); prefs[jid] = true; end end local never = prefstanza:get_child("never"); if never then for rule in never:childtags("jid") do local jid = rule:get_text(); prefs[jid] = false; end end return prefs; end return { tostanza = tostanza; fromstanza = fromstanza; }