comparison mod_mam/mamprefsxml.lib.lua @ 1135:0d6ab5e4bc30

mod_mam: Break out routines for converting prefs between XML and our internal representation into a library
author Kim Alvefur <zash@zash.se>
date Sat, 10 Aug 2013 20:38:25 +0200
parents
children 18349533c44d
comparison
equal deleted inserted replaced
1134:0664f8b783fd 1135:0d6ab5e4bc30
1 -- XEP-0313: Message Archive Management for Prosody
2 -- Copyright (C) 2011-2013 Kim Alvefur
3 --
4 -- This file is MIT/X11 licensed.
5
6 local st = require"util.stanza";
7 local xmlns_mam = "urn:xmpp:mam:tmp";
8
9 local global_default_policy = module:get_option("default_archive_policy", false);
10
11 local default_attrs = {
12 always = true, [true] = "always",
13 never = false, [false] = "never",
14 roster = "roster",
15 }
16
17 local function tostanza(prefs)
18 local default = prefs[false];
19 default = default ~= nil and default_attrs[default] or global_default_policy;
20 local prefstanza = st.stanza("prefs", { xmlns = xmlns_mam, default = default });
21 local always = st.stanza("always");
22 local never = st.stanza("never");
23 for jid, choice in pairs(prefs) do
24 if jid then
25 (choice and always or never):tag("jid"):text(jid):up();
26 end
27 end
28 prefstanza:add_child(always):add_child(never);
29 return prefstanza;
30 end
31 local function fromstanza(prefstanza)
32 local prefs = {};
33 local default = prefstanza.attr.default;
34 if default then
35 prefs[false] = default_attrs[default];
36 end
37
38 local always = prefstanza:get_child("always");
39 if always then
40 for rule in always:childtags("jid") do
41 local jid = rule:get_text();
42 prefs[jid] = true;
43 end
44 end
45
46 local never = prefstanza:get_child("never");
47 if never then
48 for rule in never:childtags("jid") do
49 local jid = rule:get_text();
50 prefs[jid] = false;
51 end
52 end
53
54 return prefs;
55 end
56
57 return {
58 tostanza = tostanza;
59 fromstanza = fromstanza;
60 }