aboutsummaryrefslogtreecommitdiffstats
path: root/plugins/mod_mam/mamprefsxml.lib.lua
diff options
context:
space:
mode:
authorKim Alvefur <zash@zash.se>2017-01-23 19:34:14 +0100
committerKim Alvefur <zash@zash.se>2017-01-23 19:34:14 +0100
commitdb88e0f7b51eeaed68b9b50502b6ba82c53633a1 (patch)
treeea895b1073f2ff2de7a08fc01f12797ab58c7125 /plugins/mod_mam/mamprefsxml.lib.lua
parent26f2953106794bbdd23db98f69fb6e90a4b8e460 (diff)
parentffde63fe687f5ffecf5fdec28358d1774a8a7169 (diff)
downloadprosody-db88e0f7b51eeaed68b9b50502b6ba82c53633a1.tar.gz
prosody-db88e0f7b51eeaed68b9b50502b6ba82c53633a1.zip
Merge 0.10->trunk
Diffstat (limited to 'plugins/mod_mam/mamprefsxml.lib.lua')
-rw-r--r--plugins/mod_mam/mamprefsxml.lib.lua64
1 files changed, 64 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..0598bbcd
--- /dev/null
+++ b/plugins/mod_mam/mamprefsxml.lib.lua
@@ -0,0 +1,64 @@
+-- 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
+--
+
+local st = require"util.stanza";
+local xmlns_mam = "urn:xmpp:mam:1";
+
+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;
+}