Software /
code /
prosody
Comparison
plugins/mod_muc_mam.lua @ 12857:cc86d77481fc 0.12
mod_mam,mod_muc_mam: Minimize differences (reorder, copy some comments)
Should have no functional difference, but makes it easier keeping
mod_mam and mod_muc_mam in sync.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Sat, 21 Jan 2023 16:54:43 +0100 |
parent | 11989:871100cdbbad |
child | 12858:71dc48a89e5a |
comparison
equal
deleted
inserted
replaced
12850:101c758428aa | 12857:cc86d77481fc |
---|---|
110 }; | 110 }; |
111 | 111 |
112 -- Serve form | 112 -- Serve form |
113 module:hook("iq-get/bare/"..xmlns_mam..":query", function(event) | 113 module:hook("iq-get/bare/"..xmlns_mam..":query", function(event) |
114 local origin, stanza = event.origin, event.stanza; | 114 local origin, stanza = event.origin, event.stanza; |
115 origin.send(st.reply(stanza):tag("query", { xmlns = xmlns_mam }):add_child(query_form:form())); | 115 origin.send(st.reply(stanza):query(xmlns_mam):add_child(query_form:form())); |
116 return true; | 116 return true; |
117 end); | 117 end); |
118 | 118 |
119 -- Handle archive queries | 119 -- Handle archive queries |
120 module:hook("iq-set/bare/"..xmlns_mam..":query", function(event) | 120 module:hook("iq-set/bare/"..xmlns_mam..":query", function(event) |
170 local qmax = m_min(qset and qset.max or default_max_items, max_max_items); | 170 local qmax = m_min(qset and qset.max or default_max_items, max_max_items); |
171 local reverse = qset and qset.before or false; | 171 local reverse = qset and qset.before or false; |
172 | 172 |
173 local before, after = qset and qset.before or qbefore, qset and qset.after or qafter; | 173 local before, after = qset and qset.before or qbefore, qset and qset.after or qafter; |
174 if type(before) ~= "string" then before = nil; end | 174 if type(before) ~= "string" then before = nil; end |
175 | |
175 -- A reverse query needs to be flipped | 176 -- A reverse query needs to be flipped |
176 local flip = reverse; | 177 local flip = reverse; |
177 -- A flip-page query needs to be the opposite of that. | 178 -- A flip-page query needs to be the opposite of that. |
178 if query:get_child("flip-page") then flip = not flip end | 179 if query:get_child("flip-page") then flip = not flip end |
179 | 180 |
185 qset); | 186 qset); |
186 | 187 |
187 -- Load all the data! | 188 -- Load all the data! |
188 local data, err = archive:find(room_node, { | 189 local data, err = archive:find(room_node, { |
189 start = qstart; ["end"] = qend; -- Time range | 190 start = qstart; ["end"] = qend; -- Time range |
191 with = "message<groupchat"; | |
190 limit = qmax + 1; | 192 limit = qmax + 1; |
191 before = before; after = after; | 193 before = before; after = after; |
192 ids = qids; | 194 ids = qids; |
193 reverse = reverse; | 195 reverse = reverse; |
194 with = "message<groupchat"; | 196 total = qmax == 0; |
195 }); | 197 }); |
196 | 198 |
197 if not data then | 199 if not data then |
198 module:log("debug", "Archive query id=%s failed: %s", qid or stanza.attr.id, err); | 200 module:log("debug", "Archive query id=%s failed: %s", qid or stanza.attr.id, err); |
199 if err == "item-not-found" then | 201 if err == "item-not-found" then |
214 local count = 0; | 216 local count = 0; |
215 local complete = "true"; | 217 local complete = "true"; |
216 for id, item, when in data do | 218 for id, item, when in data do |
217 count = count + 1; | 219 count = count + 1; |
218 if count > qmax then | 220 if count > qmax then |
221 -- We requested qmax+1 items. If that many items are retrieved then | |
222 -- there are more results to page through, so: | |
219 complete = nil; | 223 complete = nil; |
220 break; | 224 break; |
221 end | 225 end |
222 local fwd_st = st.message(msg_reply_attr) | 226 local fwd_st = st.message(msg_reply_attr) |
223 :tag("result", { xmlns = xmlns_mam, queryid = qid, id = id }) | 227 :tag("result", { xmlns = xmlns_mam, queryid = qid, id = id }) |
256 end | 260 end |
257 end | 261 end |
258 if reverse then | 262 if reverse then |
259 first, last = last, first; | 263 first, last = last, first; |
260 end | 264 end |
261 | |
262 | 265 |
263 origin.send(st.reply(stanza) | 266 origin.send(st.reply(stanza) |
264 :tag("fin", { xmlns = xmlns_mam, complete = complete }) | 267 :tag("fin", { xmlns = xmlns_mam, complete = complete }) |
265 :add_child(rsm.generate { | 268 :add_child(rsm.generate { |
266 first = first, last = last, count = total })); | 269 first = first, last = last, count = total })); |