Software /
code /
prosody
Comparison
plugins/mod_mam/mod_mam.lua @ 11280:e35e98541ca0
mod_mam: Allow querying by set of IDs
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Tue, 12 Jan 2021 19:00:44 +0100 |
parent | 11272:44c9cb4094bb |
child | 11281:142fb655b885 |
comparison
equal
deleted
inserted
replaced
11279:f225070e2b8a | 11280:e35e98541ca0 |
---|---|
86 if archive.caps and archive.caps.full_id_range then | 86 if archive.caps and archive.caps.full_id_range then |
87 table.insert(query_form, { name = "before-id"; type = "text-single"; }); | 87 table.insert(query_form, { name = "before-id"; type = "text-single"; }); |
88 table.insert(query_form, { name = "after-id"; type = "text-single"; }); | 88 table.insert(query_form, { name = "after-id"; type = "text-single"; }); |
89 end | 89 end |
90 | 90 |
91 if archive.caps and archive.caps.ids then | |
92 table.insert(query_form, { name = "ids"; type = "list-multi"; }); | |
93 end | |
94 | |
95 | |
91 -- Serve form | 96 -- Serve form |
92 module:hook("iq-get/self/"..xmlns_mam..":query", function(event) | 97 module:hook("iq-get/self/"..xmlns_mam..":query", function(event) |
93 local origin, stanza = event.origin, event.stanza; | 98 local origin, stanza = event.origin, event.stanza; |
94 get_prefs(origin.username, true); | 99 get_prefs(origin.username, true); |
95 origin.send(st.reply(stanza):query(xmlns_mam):add_child(query_form:form())); | 100 origin.send(st.reply(stanza):query(xmlns_mam):add_child(query_form:form())); |
105 origin.mam_requested = true; | 110 origin.mam_requested = true; |
106 | 111 |
107 get_prefs(origin.username, true); | 112 get_prefs(origin.username, true); |
108 | 113 |
109 -- Search query parameters | 114 -- Search query parameters |
110 local qwith, qstart, qend, qbefore, qafter; | 115 local qwith, qstart, qend, qbefore, qafter, qids; |
111 local form = query:get_child("x", "jabber:x:data"); | 116 local form = query:get_child("x", "jabber:x:data"); |
112 if form then | 117 if form then |
113 local form_type, err = get_form_type(form); | 118 local form_type, err = get_form_type(form); |
114 if not form_type then | 119 if not form_type then |
115 origin.send(st.error_reply(stanza, "modify", "bad-request", "Invalid dataform: "..err)); | 120 origin.send(st.error_reply(stanza, "modify", "bad-request", "Invalid dataform: "..err)); |
123 origin.send(st.error_reply(stanza, "modify", "bad-request", select(2, next(err)))); | 128 origin.send(st.error_reply(stanza, "modify", "bad-request", select(2, next(err)))); |
124 return true; | 129 return true; |
125 end | 130 end |
126 qwith, qstart, qend = form["with"], form["start"], form["end"]; | 131 qwith, qstart, qend = form["with"], form["start"], form["end"]; |
127 qbefore, qafter = form["before-id"], form["after-id"]; | 132 qbefore, qafter = form["before-id"], form["after-id"]; |
133 qids = form["ids"]; | |
128 qwith = qwith and jid_bare(qwith); -- dataforms does jidprep | 134 qwith = qwith and jid_bare(qwith); -- dataforms does jidprep |
129 end | 135 end |
130 | 136 |
131 if qstart or qend then -- Validate timestamps | 137 if qstart or qend then -- Validate timestamps |
132 local vstart, vend = (qstart and timestamp_parse(qstart)), (qend and timestamp_parse(qend)); | 138 local vstart, vend = (qstart and timestamp_parse(qstart)), (qend and timestamp_parse(qend)); |
162 local data, err = archive:find(origin.username, { | 168 local data, err = archive:find(origin.username, { |
163 start = qstart; ["end"] = qend; -- Time range | 169 start = qstart; ["end"] = qend; -- Time range |
164 with = qwith; | 170 with = qwith; |
165 limit = qmax == 0 and 0 or qmax + 1; | 171 limit = qmax == 0 and 0 or qmax + 1; |
166 before = before; after = after; | 172 before = before; after = after; |
173 ids = qids; | |
167 reverse = reverse; | 174 reverse = reverse; |
168 total = use_total or qmax == 0; | 175 total = use_total or qmax == 0; |
169 }); | 176 }); |
170 | 177 |
171 if not data then | 178 if not data then |
559 -- Stanzas to local clients | 566 -- Stanzas to local clients |
560 module:hook("message/bare", message_handler, 0); | 567 module:hook("message/bare", message_handler, 0); |
561 module:hook("message/full", message_handler, 0); | 568 module:hook("message/full", message_handler, 0); |
562 | 569 |
563 local advertise_extended = module:get_option_boolean("mam_advertise_extend", false); | 570 local advertise_extended = module:get_option_boolean("mam_advertise_extend", false); |
564 -- TODO ids | |
565 -- TODO delete feature flag option | 571 -- TODO delete feature flag option |
566 | 572 |
567 module:hook("account-disco-info", function(event) | 573 module:hook("account-disco-info", function(event) |
568 (event.reply or event.stanza):tag("feature", {var=xmlns_mam}):up(); | 574 (event.reply or event.stanza):tag("feature", {var=xmlns_mam}):up(); |
569 if advertise_extended then | 575 if advertise_extended then |