Fri, 01 Jan 2016 17:11:35 +0000
README: Add README file
291
b78137f5118e
plugins.archive: Add a header comment
Kim Alvefur <zash@zash.se>
parents:
275
diff
changeset
|
1 | -- This implements XEP-0313: Message Archive Management |
b78137f5118e
plugins.archive: Add a header comment
Kim Alvefur <zash@zash.se>
parents:
275
diff
changeset
|
2 | -- http://xmpp.org/extensions/xep-0313.html |
b78137f5118e
plugins.archive: Add a header comment
Kim Alvefur <zash@zash.se>
parents:
275
diff
changeset
|
3 | -- (ie not XEP-0136) |
b78137f5118e
plugins.archive: Add a header comment
Kim Alvefur <zash@zash.se>
parents:
275
diff
changeset
|
4 | |
292
b674f5ca85d4
plugins.archive: Add local verse
Kim Alvefur <zash@zash.se>
parents:
291
diff
changeset
|
5 | local verse = require "verse"; |
293
65fb9ae79014
plugins.archive: Import util.stanza directly and use it
Kim Alvefur <zash@zash.se>
parents:
292
diff
changeset
|
6 | local st = require "util.stanza"; |
353
8cd05c3d0f1f
plugins.archive: Update to MAM version 0.3
Kim Alvefur <zash@zash.se>
parents:
345
diff
changeset
|
7 | local xmlns_mam = "urn:xmpp:mam:0" |
295
5f7203bf1dae
plugins.archive: Move namespaces to the top
Kim Alvefur <zash@zash.se>
parents:
294
diff
changeset
|
8 | local xmlns_forward = "urn:xmpp:forward:0"; |
5f7203bf1dae
plugins.archive: Move namespaces to the top
Kim Alvefur <zash@zash.se>
parents:
294
diff
changeset
|
9 | local xmlns_delay = "urn:xmpp:delay"; |
273
c5b7a4c717a6
plugins.archive: Experimental implementation of the Message Archive Management ProtoXEP
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
10 | local uuid = require "util.uuid".generate; |
297
447dffdaf46c
plugins.archive: Parse the timestamp
Kim Alvefur <zash@zash.se>
parents:
296
diff
changeset
|
11 | local parse_datetime = require "util.datetime".parse; |
303
0dda04d5eb84
plugins.archive: Treat query params correctly
Kim Alvefur <zash@zash.se>
parents:
297
diff
changeset
|
12 | local datetime = require "util.datetime".datetime; |
353
8cd05c3d0f1f
plugins.archive: Update to MAM version 0.3
Kim Alvefur <zash@zash.se>
parents:
345
diff
changeset
|
13 | local dataform = require"util.dataforms".new; |
304
e09ae2395d41
squishy, plugins.archive: Fetch RSM lib from prosody-modules and use.
Kim Alvefur <zash@zash.se>
parents:
303
diff
changeset
|
14 | local rsm = require "util.rsm"; |
e09ae2395d41
squishy, plugins.archive: Fetch RSM lib from prosody-modules and use.
Kim Alvefur <zash@zash.se>
parents:
303
diff
changeset
|
15 | local NULL = {}; |
273
c5b7a4c717a6
plugins.archive: Experimental implementation of the Message Archive Management ProtoXEP
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
16 | |
353
8cd05c3d0f1f
plugins.archive: Update to MAM version 0.3
Kim Alvefur <zash@zash.se>
parents:
345
diff
changeset
|
17 | local query_form = dataform { |
8cd05c3d0f1f
plugins.archive: Update to MAM version 0.3
Kim Alvefur <zash@zash.se>
parents:
345
diff
changeset
|
18 | { name = "FORM_TYPE"; type = "hidden"; value = xmlns_mam; }; |
8cd05c3d0f1f
plugins.archive: Update to MAM version 0.3
Kim Alvefur <zash@zash.se>
parents:
345
diff
changeset
|
19 | { name = "with"; type = "jid-single"; }; |
8cd05c3d0f1f
plugins.archive: Update to MAM version 0.3
Kim Alvefur <zash@zash.se>
parents:
345
diff
changeset
|
20 | { name = "start"; type = "text-single" }; |
8cd05c3d0f1f
plugins.archive: Update to MAM version 0.3
Kim Alvefur <zash@zash.se>
parents:
345
diff
changeset
|
21 | { name = "end"; type = "text-single"; }; |
8cd05c3d0f1f
plugins.archive: Update to MAM version 0.3
Kim Alvefur <zash@zash.se>
parents:
345
diff
changeset
|
22 | }; |
8cd05c3d0f1f
plugins.archive: Update to MAM version 0.3
Kim Alvefur <zash@zash.se>
parents:
345
diff
changeset
|
23 | |
273
c5b7a4c717a6
plugins.archive: Experimental implementation of the Message Archive Management ProtoXEP
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
24 | function verse.plugins.archive(stream) |
c5b7a4c717a6
plugins.archive: Experimental implementation of the Message Archive Management ProtoXEP
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
25 | function stream:query_archive(where, query_params, callback) |
c5b7a4c717a6
plugins.archive: Experimental implementation of the Message Archive Management ProtoXEP
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
26 | local queryid = uuid(); |
353
8cd05c3d0f1f
plugins.archive: Update to MAM version 0.3
Kim Alvefur <zash@zash.se>
parents:
345
diff
changeset
|
27 | local query_st = st.iq{ type="set", to = where } |
273
c5b7a4c717a6
plugins.archive: Experimental implementation of the Message Archive Management ProtoXEP
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
28 | :tag("query", { xmlns = xmlns_mam, queryid = queryid }); |
c5b7a4c717a6
plugins.archive: Experimental implementation of the Message Archive Management ProtoXEP
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
29 | |
353
8cd05c3d0f1f
plugins.archive: Update to MAM version 0.3
Kim Alvefur <zash@zash.se>
parents:
345
diff
changeset
|
30 | |
303
0dda04d5eb84
plugins.archive: Treat query params correctly
Kim Alvefur <zash@zash.se>
parents:
297
diff
changeset
|
31 | local qstart, qend = tonumber(query_params["start"]), tonumber(query_params["end"]); |
353
8cd05c3d0f1f
plugins.archive: Update to MAM version 0.3
Kim Alvefur <zash@zash.se>
parents:
345
diff
changeset
|
32 | query_params["start"] = qstart and datetime(qstart); |
8cd05c3d0f1f
plugins.archive: Update to MAM version 0.3
Kim Alvefur <zash@zash.se>
parents:
345
diff
changeset
|
33 | query_params["end"] = qend and datetime(qend); |
304
e09ae2395d41
squishy, plugins.archive: Fetch RSM lib from prosody-modules and use.
Kim Alvefur <zash@zash.se>
parents:
303
diff
changeset
|
34 | |
353
8cd05c3d0f1f
plugins.archive: Update to MAM version 0.3
Kim Alvefur <zash@zash.se>
parents:
345
diff
changeset
|
35 | query_st:add_child(query_form:form(query_params, "submit")); |
8cd05c3d0f1f
plugins.archive: Update to MAM version 0.3
Kim Alvefur <zash@zash.se>
parents:
345
diff
changeset
|
36 | -- query_st:up(); |
305
4a0206505b9d
plugins.archive: Don't modify the query params table
Kim Alvefur <zash@zash.se>
parents:
304
diff
changeset
|
37 | query_st:add_child(rsm.generate(query_params)); |
273
c5b7a4c717a6
plugins.archive: Experimental implementation of the Message Archive Management ProtoXEP
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
38 | |
c5b7a4c717a6
plugins.archive: Experimental implementation of the Message Archive Management ProtoXEP
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
39 | local results = {}; |
c5b7a4c717a6
plugins.archive: Experimental implementation of the Message Archive Management ProtoXEP
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
40 | local function handle_archived_message(message) |
353
8cd05c3d0f1f
plugins.archive: Update to MAM version 0.3
Kim Alvefur <zash@zash.se>
parents:
345
diff
changeset
|
41 | |
8cd05c3d0f1f
plugins.archive: Update to MAM version 0.3
Kim Alvefur <zash@zash.se>
parents:
345
diff
changeset
|
42 | local finnished = message:get_child("fin", xmlns_mam) |
8cd05c3d0f1f
plugins.archive: Update to MAM version 0.3
Kim Alvefur <zash@zash.se>
parents:
345
diff
changeset
|
43 | if finnished and finnished.attr.queryid == queryid then |
8cd05c3d0f1f
plugins.archive: Update to MAM version 0.3
Kim Alvefur <zash@zash.se>
parents:
345
diff
changeset
|
44 | local rset = rsm.get(finnished); |
8cd05c3d0f1f
plugins.archive: Update to MAM version 0.3
Kim Alvefur <zash@zash.se>
parents:
345
diff
changeset
|
45 | for k,v in pairs(rset or NULL) do results[k]=v; end |
8cd05c3d0f1f
plugins.archive: Update to MAM version 0.3
Kim Alvefur <zash@zash.se>
parents:
345
diff
changeset
|
46 | self:unhook("message", handle_archived_message); |
8cd05c3d0f1f
plugins.archive: Update to MAM version 0.3
Kim Alvefur <zash@zash.se>
parents:
345
diff
changeset
|
47 | callback(results); |
8cd05c3d0f1f
plugins.archive: Update to MAM version 0.3
Kim Alvefur <zash@zash.se>
parents:
345
diff
changeset
|
48 | return true |
8cd05c3d0f1f
plugins.archive: Update to MAM version 0.3
Kim Alvefur <zash@zash.se>
parents:
345
diff
changeset
|
49 | end |
273
c5b7a4c717a6
plugins.archive: Experimental implementation of the Message Archive Management ProtoXEP
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
50 | local result_tag = message:get_child("result", xmlns_mam); |
c5b7a4c717a6
plugins.archive: Experimental implementation of the Message Archive Management ProtoXEP
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
51 | if result_tag and result_tag.attr.queryid == queryid then |
345
266a96ae4c0d
plugins.archive: Update for MAM 0.2
Kim Alvefur <zash@zash.se>
parents:
305
diff
changeset
|
52 | local forwarded = result_tag:get_child("forwarded", xmlns_forward); |
266a96ae4c0d
plugins.archive: Update for MAM 0.2
Kim Alvefur <zash@zash.se>
parents:
305
diff
changeset
|
53 | forwarded = forwarded or message:get_child("forwarded", xmlns_forward); -- COMPAT XEP-0313 pre 2013-05-31 |
273
c5b7a4c717a6
plugins.archive: Experimental implementation of the Message Archive Management ProtoXEP
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
54 | |
296
78ddfd30c74e
plugins.archive: Collect the archive id
Kim Alvefur <zash@zash.se>
parents:
295
diff
changeset
|
55 | local id = result_tag.attr.id; |
295
5f7203bf1dae
plugins.archive: Move namespaces to the top
Kim Alvefur <zash@zash.se>
parents:
294
diff
changeset
|
56 | local delay = forwarded:get_child("delay", xmlns_delay); |
297
447dffdaf46c
plugins.archive: Parse the timestamp
Kim Alvefur <zash@zash.se>
parents:
296
diff
changeset
|
57 | local stamp = delay and parse_datetime(delay.attr.stamp) or nil; |
273
c5b7a4c717a6
plugins.archive: Experimental implementation of the Message Archive Management ProtoXEP
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
58 | |
c5b7a4c717a6
plugins.archive: Experimental implementation of the Message Archive Management ProtoXEP
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
59 | local message = forwarded:get_child("message", "jabber:client") |
c5b7a4c717a6
plugins.archive: Experimental implementation of the Message Archive Management ProtoXEP
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
60 | |
296
78ddfd30c74e
plugins.archive: Collect the archive id
Kim Alvefur <zash@zash.se>
parents:
295
diff
changeset
|
61 | results[#results+1] = { id = id, stamp = stamp, message = message }; |
273
c5b7a4c717a6
plugins.archive: Experimental implementation of the Message Archive Management ProtoXEP
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
62 | return true |
c5b7a4c717a6
plugins.archive: Experimental implementation of the Message Archive Management ProtoXEP
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
63 | end |
c5b7a4c717a6
plugins.archive: Experimental implementation of the Message Archive Management ProtoXEP
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
64 | end |
c5b7a4c717a6
plugins.archive: Experimental implementation of the Message Archive Management ProtoXEP
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
65 | |
c5b7a4c717a6
plugins.archive: Experimental implementation of the Message Archive Management ProtoXEP
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
66 | self:hook("message", handle_archived_message, 1); |
c5b7a4c717a6
plugins.archive: Experimental implementation of the Message Archive Management ProtoXEP
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
67 | self:send_iq(query_st, function(reply) |
353
8cd05c3d0f1f
plugins.archive: Update to MAM version 0.3
Kim Alvefur <zash@zash.se>
parents:
345
diff
changeset
|
68 | if reply.attr.type == "error" then |
8cd05c3d0f1f
plugins.archive: Update to MAM version 0.3
Kim Alvefur <zash@zash.se>
parents:
345
diff
changeset
|
69 | self:warn(table.concat({reply:get_error()}, " ")) |
8cd05c3d0f1f
plugins.archive: Update to MAM version 0.3
Kim Alvefur <zash@zash.se>
parents:
345
diff
changeset
|
70 | self:unhook("message", handle_archived_message); |
8cd05c3d0f1f
plugins.archive: Update to MAM version 0.3
Kim Alvefur <zash@zash.se>
parents:
345
diff
changeset
|
71 | callback(false, reply:get_error()) |
8cd05c3d0f1f
plugins.archive: Update to MAM version 0.3
Kim Alvefur <zash@zash.se>
parents:
345
diff
changeset
|
72 | end |
273
c5b7a4c717a6
plugins.archive: Experimental implementation of the Message Archive Management ProtoXEP
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
73 | return true |
c5b7a4c717a6
plugins.archive: Experimental implementation of the Message Archive Management ProtoXEP
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
74 | end); |
c5b7a4c717a6
plugins.archive: Experimental implementation of the Message Archive Management ProtoXEP
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
75 | end |
c5b7a4c717a6
plugins.archive: Experimental implementation of the Message Archive Management ProtoXEP
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
76 | |
294
ac039aa3a4ef
plugins.archive: Implement archiving preferences
Kim Alvefur <zash@zash.se>
parents:
293
diff
changeset
|
77 | local default_attrs = { |
ac039aa3a4ef
plugins.archive: Implement archiving preferences
Kim Alvefur <zash@zash.se>
parents:
293
diff
changeset
|
78 | always = true, [true] = "always", |
ac039aa3a4ef
plugins.archive: Implement archiving preferences
Kim Alvefur <zash@zash.se>
parents:
293
diff
changeset
|
79 | never = false, [false] = "never", |
ac039aa3a4ef
plugins.archive: Implement archiving preferences
Kim Alvefur <zash@zash.se>
parents:
293
diff
changeset
|
80 | roster = "roster", |
ac039aa3a4ef
plugins.archive: Implement archiving preferences
Kim Alvefur <zash@zash.se>
parents:
293
diff
changeset
|
81 | } |
ac039aa3a4ef
plugins.archive: Implement archiving preferences
Kim Alvefur <zash@zash.se>
parents:
293
diff
changeset
|
82 | |
ac039aa3a4ef
plugins.archive: Implement archiving preferences
Kim Alvefur <zash@zash.se>
parents:
293
diff
changeset
|
83 | local function prefs_decode(stanza) -- from XML |
ac039aa3a4ef
plugins.archive: Implement archiving preferences
Kim Alvefur <zash@zash.se>
parents:
293
diff
changeset
|
84 | local prefs = {}; |
ac039aa3a4ef
plugins.archive: Implement archiving preferences
Kim Alvefur <zash@zash.se>
parents:
293
diff
changeset
|
85 | local default = stanza.attr.default; |
ac039aa3a4ef
plugins.archive: Implement archiving preferences
Kim Alvefur <zash@zash.se>
parents:
293
diff
changeset
|
86 | |
ac039aa3a4ef
plugins.archive: Implement archiving preferences
Kim Alvefur <zash@zash.se>
parents:
293
diff
changeset
|
87 | if default then |
ac039aa3a4ef
plugins.archive: Implement archiving preferences
Kim Alvefur <zash@zash.se>
parents:
293
diff
changeset
|
88 | prefs[false] = default_attrs[default]; |
ac039aa3a4ef
plugins.archive: Implement archiving preferences
Kim Alvefur <zash@zash.se>
parents:
293
diff
changeset
|
89 | end |
ac039aa3a4ef
plugins.archive: Implement archiving preferences
Kim Alvefur <zash@zash.se>
parents:
293
diff
changeset
|
90 | |
ac039aa3a4ef
plugins.archive: Implement archiving preferences
Kim Alvefur <zash@zash.se>
parents:
293
diff
changeset
|
91 | local always = stanza:get_child("always"); |
ac039aa3a4ef
plugins.archive: Implement archiving preferences
Kim Alvefur <zash@zash.se>
parents:
293
diff
changeset
|
92 | if always then |
ac039aa3a4ef
plugins.archive: Implement archiving preferences
Kim Alvefur <zash@zash.se>
parents:
293
diff
changeset
|
93 | for rule in always:childtags("jid") do |
ac039aa3a4ef
plugins.archive: Implement archiving preferences
Kim Alvefur <zash@zash.se>
parents:
293
diff
changeset
|
94 | local jid = rule:get_text(); |
ac039aa3a4ef
plugins.archive: Implement archiving preferences
Kim Alvefur <zash@zash.se>
parents:
293
diff
changeset
|
95 | prefs[jid] = true; |
ac039aa3a4ef
plugins.archive: Implement archiving preferences
Kim Alvefur <zash@zash.se>
parents:
293
diff
changeset
|
96 | end |
ac039aa3a4ef
plugins.archive: Implement archiving preferences
Kim Alvefur <zash@zash.se>
parents:
293
diff
changeset
|
97 | end |
ac039aa3a4ef
plugins.archive: Implement archiving preferences
Kim Alvefur <zash@zash.se>
parents:
293
diff
changeset
|
98 | |
ac039aa3a4ef
plugins.archive: Implement archiving preferences
Kim Alvefur <zash@zash.se>
parents:
293
diff
changeset
|
99 | local never = stanza:get_child("never"); |
ac039aa3a4ef
plugins.archive: Implement archiving preferences
Kim Alvefur <zash@zash.se>
parents:
293
diff
changeset
|
100 | if never then |
ac039aa3a4ef
plugins.archive: Implement archiving preferences
Kim Alvefur <zash@zash.se>
parents:
293
diff
changeset
|
101 | for rule in never:childtags("jid") do |
ac039aa3a4ef
plugins.archive: Implement archiving preferences
Kim Alvefur <zash@zash.se>
parents:
293
diff
changeset
|
102 | local jid = rule:get_text(); |
ac039aa3a4ef
plugins.archive: Implement archiving preferences
Kim Alvefur <zash@zash.se>
parents:
293
diff
changeset
|
103 | prefs[jid] = false; |
ac039aa3a4ef
plugins.archive: Implement archiving preferences
Kim Alvefur <zash@zash.se>
parents:
293
diff
changeset
|
104 | end |
ac039aa3a4ef
plugins.archive: Implement archiving preferences
Kim Alvefur <zash@zash.se>
parents:
293
diff
changeset
|
105 | end |
ac039aa3a4ef
plugins.archive: Implement archiving preferences
Kim Alvefur <zash@zash.se>
parents:
293
diff
changeset
|
106 | return prefs; |
ac039aa3a4ef
plugins.archive: Implement archiving preferences
Kim Alvefur <zash@zash.se>
parents:
293
diff
changeset
|
107 | end |
ac039aa3a4ef
plugins.archive: Implement archiving preferences
Kim Alvefur <zash@zash.se>
parents:
293
diff
changeset
|
108 | |
ac039aa3a4ef
plugins.archive: Implement archiving preferences
Kim Alvefur <zash@zash.se>
parents:
293
diff
changeset
|
109 | local function prefs_encode(prefs) -- into XML |
ac039aa3a4ef
plugins.archive: Implement archiving preferences
Kim Alvefur <zash@zash.se>
parents:
293
diff
changeset
|
110 | local default |
ac039aa3a4ef
plugins.archive: Implement archiving preferences
Kim Alvefur <zash@zash.se>
parents:
293
diff
changeset
|
111 | default, prefs[false] = prefs[false], nil; |
ac039aa3a4ef
plugins.archive: Implement archiving preferences
Kim Alvefur <zash@zash.se>
parents:
293
diff
changeset
|
112 | if default ~= nil then |
ac039aa3a4ef
plugins.archive: Implement archiving preferences
Kim Alvefur <zash@zash.se>
parents:
293
diff
changeset
|
113 | default = default_attrs[default]; |
ac039aa3a4ef
plugins.archive: Implement archiving preferences
Kim Alvefur <zash@zash.se>
parents:
293
diff
changeset
|
114 | end |
ac039aa3a4ef
plugins.archive: Implement archiving preferences
Kim Alvefur <zash@zash.se>
parents:
293
diff
changeset
|
115 | local reply = st.stanza("prefs", { xmlns = xmlns_mam, default = default }) |
ac039aa3a4ef
plugins.archive: Implement archiving preferences
Kim Alvefur <zash@zash.se>
parents:
293
diff
changeset
|
116 | local always = st.stanza("always"); |
ac039aa3a4ef
plugins.archive: Implement archiving preferences
Kim Alvefur <zash@zash.se>
parents:
293
diff
changeset
|
117 | local never = st.stanza("never"); |
ac039aa3a4ef
plugins.archive: Implement archiving preferences
Kim Alvefur <zash@zash.se>
parents:
293
diff
changeset
|
118 | for k,v in pairs(prefs) do |
ac039aa3a4ef
plugins.archive: Implement archiving preferences
Kim Alvefur <zash@zash.se>
parents:
293
diff
changeset
|
119 | (v and always or never):tag("jid"):text(k):up(); |
ac039aa3a4ef
plugins.archive: Implement archiving preferences
Kim Alvefur <zash@zash.se>
parents:
293
diff
changeset
|
120 | end |
ac039aa3a4ef
plugins.archive: Implement archiving preferences
Kim Alvefur <zash@zash.se>
parents:
293
diff
changeset
|
121 | return reply:add_child(always):add_child(never); |
ac039aa3a4ef
plugins.archive: Implement archiving preferences
Kim Alvefur <zash@zash.se>
parents:
293
diff
changeset
|
122 | end |
ac039aa3a4ef
plugins.archive: Implement archiving preferences
Kim Alvefur <zash@zash.se>
parents:
293
diff
changeset
|
123 | |
ac039aa3a4ef
plugins.archive: Implement archiving preferences
Kim Alvefur <zash@zash.se>
parents:
293
diff
changeset
|
124 | function stream:archive_prefs_get(callback) |
ac039aa3a4ef
plugins.archive: Implement archiving preferences
Kim Alvefur <zash@zash.se>
parents:
293
diff
changeset
|
125 | self:send_iq(st.iq{ type="get" }:tag("prefs", { xmlns = xmlns_mam }), |
ac039aa3a4ef
plugins.archive: Implement archiving preferences
Kim Alvefur <zash@zash.se>
parents:
293
diff
changeset
|
126 | function(result) |
ac039aa3a4ef
plugins.archive: Implement archiving preferences
Kim Alvefur <zash@zash.se>
parents:
293
diff
changeset
|
127 | if result and result.attr.type == "result" and result.tags[1] then |
ac039aa3a4ef
plugins.archive: Implement archiving preferences
Kim Alvefur <zash@zash.se>
parents:
293
diff
changeset
|
128 | local prefs = prefs_decode(result.tags[1]); |
ac039aa3a4ef
plugins.archive: Implement archiving preferences
Kim Alvefur <zash@zash.se>
parents:
293
diff
changeset
|
129 | callback(prefs, result); |
ac039aa3a4ef
plugins.archive: Implement archiving preferences
Kim Alvefur <zash@zash.se>
parents:
293
diff
changeset
|
130 | else |
ac039aa3a4ef
plugins.archive: Implement archiving preferences
Kim Alvefur <zash@zash.se>
parents:
293
diff
changeset
|
131 | callback(nil, result); |
ac039aa3a4ef
plugins.archive: Implement archiving preferences
Kim Alvefur <zash@zash.se>
parents:
293
diff
changeset
|
132 | end |
ac039aa3a4ef
plugins.archive: Implement archiving preferences
Kim Alvefur <zash@zash.se>
parents:
293
diff
changeset
|
133 | end); |
ac039aa3a4ef
plugins.archive: Implement archiving preferences
Kim Alvefur <zash@zash.se>
parents:
293
diff
changeset
|
134 | end |
ac039aa3a4ef
plugins.archive: Implement archiving preferences
Kim Alvefur <zash@zash.se>
parents:
293
diff
changeset
|
135 | |
ac039aa3a4ef
plugins.archive: Implement archiving preferences
Kim Alvefur <zash@zash.se>
parents:
293
diff
changeset
|
136 | function stream:archive_prefs_set(prefs, callback) |
ac039aa3a4ef
plugins.archive: Implement archiving preferences
Kim Alvefur <zash@zash.se>
parents:
293
diff
changeset
|
137 | self:send_iq(st.iq{ type="set" }:add_child(prefs_encode(prefs)), callback); |
ac039aa3a4ef
plugins.archive: Implement archiving preferences
Kim Alvefur <zash@zash.se>
parents:
293
diff
changeset
|
138 | end |
273
c5b7a4c717a6
plugins.archive: Experimental implementation of the Message Archive Management ProtoXEP
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
139 | end |