Software /
code /
prosody
Comparison
plugins/mod_mam/mod_mam.lua @ 11270:eaaa8ca742a7
mod_mam: Implement extended MAM metadata query
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Mon, 30 Nov 2020 23:42:13 +0100 |
parent | 11269:342ac5d806fb |
child | 11272:44c9cb4094bb |
comparison
equal
deleted
inserted
replaced
11269:342ac5d806fb | 11270:eaaa8ca742a7 |
---|---|
224 :add_child(rsm.generate { | 224 :add_child(rsm.generate { |
225 first = first, last = last, count = total })); | 225 first = first, last = last, count = total })); |
226 | 226 |
227 -- That's all folks! | 227 -- That's all folks! |
228 module:log("debug", "Archive query id=%s completed, %d items returned", qid or stanza.attr.id, complete and count or count - 1); | 228 module:log("debug", "Archive query id=%s completed, %d items returned", qid or stanza.attr.id, complete and count or count - 1); |
229 return true; | |
230 end); | |
231 | |
232 module:hook("iq-get/self/"..xmlns_mam..":metadata", function (event) | |
233 local origin, stanza = event.origin, event.stanza; | |
234 | |
235 local reply = st.reply(stanza):tag("metadata", { xmlns = xmlns_mam }); | |
236 | |
237 do | |
238 local first = archive:find(origin.username, { limit = 1 }); | |
239 if not first then | |
240 origin.send(st.error_reply(stanza, "cancel", "internal-server-error")); | |
241 return true; | |
242 end | |
243 | |
244 local id, _, when = first(); | |
245 if id then | |
246 reply:tag("start", { id = id, timestamp = timestamp(when) }):up(); | |
247 end | |
248 end | |
249 | |
250 do | |
251 local last = archive:find(origin.username, { limit = 1, reverse = true }); | |
252 if not last then | |
253 origin.send(st.error_reply(stanza, "cancel", "internal-server-error")); | |
254 return true; | |
255 end | |
256 | |
257 local id, _, when = last(); | |
258 if id then | |
259 reply:tag("end", { id = id, timestamp = timestamp(when) }):up(); | |
260 end | |
261 end | |
262 | |
263 origin.send(reply); | |
229 return true; | 264 return true; |
230 end); | 265 end); |
231 | 266 |
232 local function has_in_roster(user, who) | 267 local function has_in_roster(user, who) |
233 local roster = rm_load_roster(user, host); | 268 local roster = rm_load_roster(user, host); |
520 module:hook("message/full", message_handler, 0); | 555 module:hook("message/full", message_handler, 0); |
521 | 556 |
522 local advertise_extended = module:get_option_boolean("mam_advertise_extend", false); | 557 local advertise_extended = module:get_option_boolean("mam_advertise_extend", false); |
523 -- TODO before-id, after-id | 558 -- TODO before-id, after-id |
524 -- TODO ids | 559 -- TODO ids |
525 -- TODO archive metadata query | |
526 -- TODO delete feature flag option | 560 -- TODO delete feature flag option |
527 | 561 |
528 module:hook("account-disco-info", function(event) | 562 module:hook("account-disco-info", function(event) |
529 (event.reply or event.stanza):tag("feature", {var=xmlns_mam}):up(); | 563 (event.reply or event.stanza):tag("feature", {var=xmlns_mam}):up(); |
530 if advertise_extended then | 564 if advertise_extended then |