6 local st = require "util.stanza"; |
6 local st = require "util.stanza"; |
7 local xmlns_mam = "urn:xmpp:mam:tmp" |
7 local xmlns_mam = "urn:xmpp:mam:tmp" |
8 local xmlns_forward = "urn:xmpp:forward:0"; |
8 local xmlns_forward = "urn:xmpp:forward:0"; |
9 local xmlns_delay = "urn:xmpp:delay"; |
9 local xmlns_delay = "urn:xmpp:delay"; |
10 local uuid = require "util.uuid".generate; |
10 local uuid = require "util.uuid".generate; |
|
11 local parse_datetime = require "util.datetime".parse; |
11 |
12 |
12 function verse.plugins.archive(stream) |
13 function verse.plugins.archive(stream) |
13 function stream:query_archive(where, query_params, callback) |
14 function stream:query_archive(where, query_params, callback) |
14 local queryid = uuid(); |
15 local queryid = uuid(); |
15 local query_st = st.iq{ type="get", to = where } |
16 local query_st = st.iq{ type="get", to = where } |
30 if result_tag and result_tag.attr.queryid == queryid then |
31 if result_tag and result_tag.attr.queryid == queryid then |
31 local forwarded = message:get_child("forwarded", xmlns_forward); |
32 local forwarded = message:get_child("forwarded", xmlns_forward); |
32 |
33 |
33 local id = result_tag.attr.id; |
34 local id = result_tag.attr.id; |
34 local delay = forwarded:get_child("delay", xmlns_delay); |
35 local delay = forwarded:get_child("delay", xmlns_delay); |
35 local stamp = delay and delay.attr.stamp or nil; |
36 local stamp = delay and parse_datetime(delay.attr.stamp) or nil; |
36 |
37 |
37 local message = forwarded:get_child("message", "jabber:client") |
38 local message = forwarded:get_child("message", "jabber:client") |
38 |
39 |
39 results[#results+1] = { id = id, stamp = stamp, message = message }; |
40 results[#results+1] = { id = id, stamp = stamp, message = message }; |
40 return true |
41 return true |