# HG changeset patch # User Kim Alvefur # Date 1606776133 -3600 # Node ID eaaa8ca742a76a92b383ad8441bbe88b1edb85c7 # Parent 342ac5d806fb328e288f5e5e00e0ccdd164baf6d mod_mam: Implement extended MAM metadata query diff -r 342ac5d806fb -r eaaa8ca742a7 plugins/mod_mam/mod_mam.lua --- a/plugins/mod_mam/mod_mam.lua Mon Nov 30 21:12:01 2020 +0100 +++ b/plugins/mod_mam/mod_mam.lua Mon Nov 30 23:42:13 2020 +0100 @@ -229,6 +229,41 @@ return true; end); +module:hook("iq-get/self/"..xmlns_mam..":metadata", function (event) + local origin, stanza = event.origin, event.stanza; + + local reply = st.reply(stanza):tag("metadata", { xmlns = xmlns_mam }); + + do + local first = archive:find(origin.username, { limit = 1 }); + if not first then + origin.send(st.error_reply(stanza, "cancel", "internal-server-error")); + return true; + end + + local id, _, when = first(); + if id then + reply:tag("start", { id = id, timestamp = timestamp(when) }):up(); + end + end + + do + local last = archive:find(origin.username, { limit = 1, reverse = true }); + if not last then + origin.send(st.error_reply(stanza, "cancel", "internal-server-error")); + return true; + end + + local id, _, when = last(); + if id then + reply:tag("end", { id = id, timestamp = timestamp(when) }):up(); + end + end + + origin.send(reply); + return true; +end); + local function has_in_roster(user, who) local roster = rm_load_roster(user, host); module:log("debug", "%s has %s in roster? %s", user, who, roster[who] and "yes" or "no"); @@ -522,7 +557,6 @@ local advertise_extended = module:get_option_boolean("mam_advertise_extend", false); -- TODO before-id, after-id -- TODO ids --- TODO archive metadata query -- TODO delete feature flag option module:hook("account-disco-info", function(event) diff -r 342ac5d806fb -r eaaa8ca742a7 spec/scansion/mam_extended.scs --- a/spec/scansion/mam_extended.scs Mon Nov 30 21:12:01 2020 +0100 +++ b/spec/scansion/mam_extended.scs Mon Nov 30 23:42:13 2020 +0100 @@ -36,6 +36,20 @@ U there? +# Metadata +Romeo sends: + + + + +Romeo receives: + + + + + + + Romeo sends: