plugins/archive.lua

Fri, 20 Apr 2012 00:33:46 +0200

author
Kim Alvefur <zash@zash.se>
date
Fri, 20 Apr 2012 00:33:46 +0200
changeset 293
65fb9ae79014
parent 292
b674f5ca85d4
child 294
ac039aa3a4ef
permissions
-rw-r--r--

plugins.archive: Import util.stanza directly and use it

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";
273
c5b7a4c717a6 plugins.archive: Experimental implementation of the Message Archive Management ProtoXEP
Kim Alvefur <zash@zash.se>
parents:
diff changeset
7 local xmlns_mam = "urn:xmpp:mam:tmp"
c5b7a4c717a6 plugins.archive: Experimental implementation of the Message Archive Management ProtoXEP
Kim Alvefur <zash@zash.se>
parents:
diff changeset
8 local uuid = require "util.uuid".generate;
c5b7a4c717a6 plugins.archive: Experimental implementation of the Message Archive Management ProtoXEP
Kim Alvefur <zash@zash.se>
parents:
diff changeset
9
c5b7a4c717a6 plugins.archive: Experimental implementation of the Message Archive Management ProtoXEP
Kim Alvefur <zash@zash.se>
parents:
diff changeset
10 function verse.plugins.archive(stream)
c5b7a4c717a6 plugins.archive: Experimental implementation of the Message Archive Management ProtoXEP
Kim Alvefur <zash@zash.se>
parents:
diff changeset
11 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
12 local queryid = uuid();
293
65fb9ae79014 plugins.archive: Import util.stanza directly and use it
Kim Alvefur <zash@zash.se>
parents: 292
diff changeset
13 local query_st = st.iq{ type="get", to = where }
273
c5b7a4c717a6 plugins.archive: Experimental implementation of the Message Archive Management ProtoXEP
Kim Alvefur <zash@zash.se>
parents:
diff changeset
14 :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
15
c5b7a4c717a6 plugins.archive: Experimental implementation of the Message Archive Management ProtoXEP
Kim Alvefur <zash@zash.se>
parents:
diff changeset
16 local params = { "with", "start", "end" };
c5b7a4c717a6 plugins.archive: Experimental implementation of the Message Archive Management ProtoXEP
Kim Alvefur <zash@zash.se>
parents:
diff changeset
17 local query_params = query_params or {};
c5b7a4c717a6 plugins.archive: Experimental implementation of the Message Archive Management ProtoXEP
Kim Alvefur <zash@zash.se>
parents:
diff changeset
18 for i=1,#params do
c5b7a4c717a6 plugins.archive: Experimental implementation of the Message Archive Management ProtoXEP
Kim Alvefur <zash@zash.se>
parents:
diff changeset
19 local k = params[i];
c5b7a4c717a6 plugins.archive: Experimental implementation of the Message Archive Management ProtoXEP
Kim Alvefur <zash@zash.se>
parents:
diff changeset
20 if query_params[k] then
275
c077b20ad59f plugins.archive: Add missing :up()
Kim Alvefur <zash@zash.se>
parents: 273
diff changeset
21 query_st:tag(k):text(query_params[k]):up();
273
c5b7a4c717a6 plugins.archive: Experimental implementation of the Message Archive Management ProtoXEP
Kim Alvefur <zash@zash.se>
parents:
diff changeset
22 end
c5b7a4c717a6 plugins.archive: Experimental implementation of the Message Archive Management ProtoXEP
Kim Alvefur <zash@zash.se>
parents:
diff changeset
23 end
c5b7a4c717a6 plugins.archive: Experimental implementation of the Message Archive Management ProtoXEP
Kim Alvefur <zash@zash.se>
parents:
diff changeset
24
c5b7a4c717a6 plugins.archive: Experimental implementation of the Message Archive Management ProtoXEP
Kim Alvefur <zash@zash.se>
parents:
diff changeset
25 local results = {};
c5b7a4c717a6 plugins.archive: Experimental implementation of the Message Archive Management ProtoXEP
Kim Alvefur <zash@zash.se>
parents:
diff changeset
26 local function handle_archived_message(message)
c5b7a4c717a6 plugins.archive: Experimental implementation of the Message Archive Management ProtoXEP
Kim Alvefur <zash@zash.se>
parents:
diff changeset
27 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
28 if result_tag and result_tag.attr.queryid == queryid then
c5b7a4c717a6 plugins.archive: Experimental implementation of the Message Archive Management ProtoXEP
Kim Alvefur <zash@zash.se>
parents:
diff changeset
29 local forwarded = message:get_child("forwarded", "urn:xmpp:forward:0");
c5b7a4c717a6 plugins.archive: Experimental implementation of the Message Archive Management ProtoXEP
Kim Alvefur <zash@zash.se>
parents:
diff changeset
30
c5b7a4c717a6 plugins.archive: Experimental implementation of the Message Archive Management ProtoXEP
Kim Alvefur <zash@zash.se>
parents:
diff changeset
31 local delay = forwarded:get_child("delay", "urn:xmpp:delay");
c5b7a4c717a6 plugins.archive: Experimental implementation of the Message Archive Management ProtoXEP
Kim Alvefur <zash@zash.se>
parents:
diff changeset
32 local stamp = delay and delay.attr.stamp or nil;
c5b7a4c717a6 plugins.archive: Experimental implementation of the Message Archive Management ProtoXEP
Kim Alvefur <zash@zash.se>
parents:
diff changeset
33
c5b7a4c717a6 plugins.archive: Experimental implementation of the Message Archive Management ProtoXEP
Kim Alvefur <zash@zash.se>
parents:
diff changeset
34 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
35
c5b7a4c717a6 plugins.archive: Experimental implementation of the Message Archive Management ProtoXEP
Kim Alvefur <zash@zash.se>
parents:
diff changeset
36 results[#results+1] = { stamp = stamp, message = message };
c5b7a4c717a6 plugins.archive: Experimental implementation of the Message Archive Management ProtoXEP
Kim Alvefur <zash@zash.se>
parents:
diff changeset
37 return true
c5b7a4c717a6 plugins.archive: Experimental implementation of the Message Archive Management ProtoXEP
Kim Alvefur <zash@zash.se>
parents:
diff changeset
38 end
c5b7a4c717a6 plugins.archive: Experimental implementation of the Message Archive Management ProtoXEP
Kim Alvefur <zash@zash.se>
parents:
diff changeset
39 end
c5b7a4c717a6 plugins.archive: Experimental implementation of the Message Archive Management ProtoXEP
Kim Alvefur <zash@zash.se>
parents:
diff changeset
40
c5b7a4c717a6 plugins.archive: Experimental implementation of the Message Archive Management ProtoXEP
Kim Alvefur <zash@zash.se>
parents:
diff changeset
41 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
42 self:send_iq(query_st, function(reply)
c5b7a4c717a6 plugins.archive: Experimental implementation of the Message Archive Management ProtoXEP
Kim Alvefur <zash@zash.se>
parents:
diff changeset
43 self:unhook("message", handle_archived_message);
c5b7a4c717a6 plugins.archive: Experimental implementation of the Message Archive Management ProtoXEP
Kim Alvefur <zash@zash.se>
parents:
diff changeset
44 callback(reply.attr.type == "result" and #results, results);
c5b7a4c717a6 plugins.archive: Experimental implementation of the Message Archive Management ProtoXEP
Kim Alvefur <zash@zash.se>
parents:
diff changeset
45 return true
c5b7a4c717a6 plugins.archive: Experimental implementation of the Message Archive Management ProtoXEP
Kim Alvefur <zash@zash.se>
parents:
diff changeset
46 end);
c5b7a4c717a6 plugins.archive: Experimental implementation of the Message Archive Management ProtoXEP
Kim Alvefur <zash@zash.se>
parents:
diff changeset
47 end
c5b7a4c717a6 plugins.archive: Experimental implementation of the Message Archive Management ProtoXEP
Kim Alvefur <zash@zash.se>
parents:
diff changeset
48
c5b7a4c717a6 plugins.archive: Experimental implementation of the Message Archive Management ProtoXEP
Kim Alvefur <zash@zash.se>
parents:
diff changeset
49 --TODO Settings
c5b7a4c717a6 plugins.archive: Experimental implementation of the Message Archive Management ProtoXEP
Kim Alvefur <zash@zash.se>
parents:
diff changeset
50 end

mercurial