diff options
author | Kim Alvefur <zash@zash.se> | 2016-11-04 13:48:21 +0100 |
---|---|---|
committer | Kim Alvefur <zash@zash.se> | 2016-11-04 13:48:21 +0100 |
commit | 0ff95b16160d80de3a43be87353ce30e58c86ec1 (patch) | |
tree | 86d200149f25a2f1a46d6e65498ca6c96de7f084 /plugins/mod_mam/mamprefsxml.lib.lua | |
parent | 0d28378a7ac1410c4d32b7e0415fdc646ce2a755 (diff) | |
download | prosody-0ff95b16160d80de3a43be87353ce30e58c86ec1.tar.gz prosody-0ff95b16160d80de3a43be87353ce30e58c86ec1.zip |
mod_mam: Import from prosody-modules
Diffstat (limited to 'plugins/mod_mam/mamprefsxml.lib.lua')
-rw-r--r-- | plugins/mod_mam/mamprefsxml.lib.lua | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/plugins/mod_mam/mamprefsxml.lib.lua b/plugins/mod_mam/mamprefsxml.lib.lua new file mode 100644 index 00000000..a0d46245 --- /dev/null +++ b/plugins/mod_mam/mamprefsxml.lib.lua @@ -0,0 +1,58 @@ +-- 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:0"; + +local default_attrs = { + always = true, [true] = "always", + never = false, [false] = "never", + roster = "roster", +} + +local function tostanza(prefs) + local default = prefs[false]; + default = default_attrs[default]; + 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; +} |