Mercurial > prosody-modules
diff mod_storage_s3/mod_storage_s3.lua @ 5733:b6518a71ca7e
mod_storage_s3: Implement search for set of IDs
This together with the full id range query enables support for
urn:xmpp:mam:2#extended in mod_mam
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Sun, 26 Nov 2023 22:44:01 +0100 |
parents | e8938a3166d2 |
children | 9a1d8c39d0b0 |
line wrap: on
line diff
--- a/mod_storage_s3/mod_storage_s3.lua Sun Nov 26 22:29:21 2023 +0100 +++ b/mod_storage_s3/mod_storage_s3.lua Sun Nov 26 22:44:01 2023 +0100 @@ -8,6 +8,7 @@ local jid = require "prosody.util.jid"; local json = require "prosody.util.json"; local promise = require "prosody.util.promise"; +local set = require "prosody.util.set"; local st = require "prosody.util.stanza"; local uuid = require "prosody.util.uuid"; local xml = require "prosody.util.xml"; @@ -199,6 +200,7 @@ archive.caps = { full_id_range = true; -- both before and after used + ids = true; }; function archive:_path(username, date, when, with, key) @@ -266,6 +268,7 @@ query["before"], query["after"] = query["after"], query["before"]; iterwrap = it.reverse; end + local ids = query["ids"] and set.new(query["ids"]); local found = not query["after"]; for content in iterwrap(list_bucket_result:childtags("Contents")) do local key = url.parse_path(content:get_child_text("Key")); @@ -275,6 +278,7 @@ if (not query["with"] or query["with"] == jid.unescape(key[5])) and (not query["start"] or dt.date(query["start"]) >= key[6]) and (not query["end"] or dt.date(query["end"]) <= key[6]) + and (not ids or ids:contains(key[6])) and found then keys:push({ key = key[6]; date = key[5]; with = jid.unescape(key[4]) }); end