Software /
code /
verse
Comparison
plugins/archive.lua @ 294:ac039aa3a4ef
plugins.archive: Implement archiving preferences
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Fri, 20 Apr 2012 01:36:13 +0200 |
parent | 293:65fb9ae79014 |
child | 295:5f7203bf1dae |
comparison
equal
deleted
inserted
replaced
293:65fb9ae79014 | 294:ac039aa3a4ef |
---|---|
44 callback(reply.attr.type == "result" and #results, results); | 44 callback(reply.attr.type == "result" and #results, results); |
45 return true | 45 return true |
46 end); | 46 end); |
47 end | 47 end |
48 | 48 |
49 --TODO Settings | 49 local default_attrs = { |
50 always = true, [true] = "always", | |
51 never = false, [false] = "never", | |
52 roster = "roster", | |
53 } | |
54 | |
55 local function prefs_decode(stanza) -- from XML | |
56 local prefs = {}; | |
57 local default = stanza.attr.default; | |
58 | |
59 if default then | |
60 prefs[false] = default_attrs[default]; | |
61 end | |
62 | |
63 local always = stanza:get_child("always"); | |
64 if always then | |
65 for rule in always:childtags("jid") do | |
66 local jid = rule:get_text(); | |
67 prefs[jid] = true; | |
68 end | |
69 end | |
70 | |
71 local never = stanza:get_child("never"); | |
72 if never then | |
73 for rule in never:childtags("jid") do | |
74 local jid = rule:get_text(); | |
75 prefs[jid] = false; | |
76 end | |
77 end | |
78 return prefs; | |
79 end | |
80 | |
81 local function prefs_encode(prefs) -- into XML | |
82 local default | |
83 default, prefs[false] = prefs[false], nil; | |
84 if default ~= nil then | |
85 default = default_attrs[default]; | |
86 end | |
87 local reply = st.stanza("prefs", { xmlns = xmlns_mam, default = default }) | |
88 local always = st.stanza("always"); | |
89 local never = st.stanza("never"); | |
90 for k,v in pairs(prefs) do | |
91 (v and always or never):tag("jid"):text(k):up(); | |
92 end | |
93 return reply:add_child(always):add_child(never); | |
94 end | |
95 | |
96 function stream:archive_prefs_get(callback) | |
97 self:send_iq(st.iq{ type="get" }:tag("prefs", { xmlns = xmlns_mam }), | |
98 function(result) | |
99 if result and result.attr.type == "result" and result.tags[1] then | |
100 local prefs = prefs_decode(result.tags[1]); | |
101 callback(prefs, result); | |
102 else | |
103 callback(nil, result); | |
104 end | |
105 end); | |
106 end | |
107 | |
108 function stream:archive_prefs_set(prefs, callback) | |
109 self:send_iq(st.iq{ type="set" }:add_child(prefs_encode(prefs)), callback); | |
110 end | |
50 end | 111 end |