Software /
code /
verse
File
plugins/archive.lua @ 293:65fb9ae79014
plugins.archive: Import util.stanza directly and use it
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Fri, 20 Apr 2012 00:33:46 +0200 |
parent | 292:b674f5ca85d4 |
child | 294:ac039aa3a4ef |
line wrap: on
line source
-- This implements XEP-0313: Message Archive Management -- http://xmpp.org/extensions/xep-0313.html -- (ie not XEP-0136) local verse = require "verse"; local st = require "util.stanza"; local xmlns_mam = "urn:xmpp:mam:tmp" local uuid = require "util.uuid".generate; function verse.plugins.archive(stream) function stream:query_archive(where, query_params, callback) local queryid = uuid(); local query_st = st.iq{ type="get", to = where } :tag("query", { xmlns = xmlns_mam, queryid = queryid }); local params = { "with", "start", "end" }; local query_params = query_params or {}; for i=1,#params do local k = params[i]; if query_params[k] then query_st:tag(k):text(query_params[k]):up(); end end local results = {}; local function handle_archived_message(message) local result_tag = message:get_child("result", xmlns_mam); if result_tag and result_tag.attr.queryid == queryid then local forwarded = message:get_child("forwarded", "urn:xmpp:forward:0"); local delay = forwarded:get_child("delay", "urn:xmpp:delay"); local stamp = delay and delay.attr.stamp or nil; local message = forwarded:get_child("message", "jabber:client") results[#results+1] = { stamp = stamp, message = message }; return true end end self:hook("message", handle_archived_message, 1); self:send_iq(query_st, function(reply) self:unhook("message", handle_archived_message); callback(reply.attr.type == "result" and #results, results); return true end); end --TODO Settings end