|
1 local verse = require "verse"; |
|
2 local dt = require "util.datetime"; |
|
3 |
|
4 local xmlns_time = "urn:xmpp:time"; |
|
5 |
|
6 function verse.plugins.time(stream) |
|
7 function stream:query_time(target_jid, callback) |
|
8 callback = callback or function (time) return self:event("time/response", time); end |
|
9 self:send_iq(verse.iq({ type = "get", to = target_jid }) |
|
10 :tag("time", { xmlns = xmlns_time }), |
|
11 function (reply) |
|
12 if reply.attr.type == "result" then |
|
13 local query = reply:get_child("time", xmlns_time); |
|
14 local resp = { |
|
15 tzo = query:get_child_text("tzo"); |
|
16 utc = query:get_child_text("utc"); |
|
17 }; |
|
18 if resp.utc then |
|
19 resp.timestamp = dt.parse(resp.utc); |
|
20 end |
|
21 callback(resp); |
|
22 else |
|
23 local type, condition, text = reply:get_error(); |
|
24 callback({ |
|
25 error = true; |
|
26 condition = condition; |
|
27 text = text; |
|
28 type = type; |
|
29 }); |
|
30 end |
|
31 end); |
|
32 end |
|
33 return true; |
|
34 end |