Diff

plugins/mod_mam/mamprefsxml.lib.lua @ 7836:30fac9154fd4

mod_mam: Import from prosody-modules
author Kim Alvefur <zash@zash.se>
date Fri, 04 Nov 2016 13:48:21 +0100
child 7839:f3e1925f29c2
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/mod_mam/mamprefsxml.lib.lua	Fri Nov 04 13:48:21 2016 +0100
@@ -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;
+}