Changeset

11269:342ac5d806fb

mod_mam: Add support for page flipping This was easy. Needs tests tho, 100% chance of the logic being backwards.
author Kim Alvefur <zash@zash.se>
date Mon, 30 Nov 2020 21:12:01 +0100
parents 11268:e3f6f0b39e7b
children 11270:eaaa8ca742a7
files plugins/mod_mam/mod_mam.lua spec/scansion/mam_extended.scs
diffstat 2 files changed, 52 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/plugins/mod_mam/mod_mam.lua	Mon Nov 30 21:00:45 2020 +0100
+++ b/plugins/mod_mam/mod_mam.lua	Mon Nov 30 21:12:01 2020 +0100
@@ -147,6 +147,10 @@
 	if qset then
 		module:log("debug", "Archive query id=%s rsm=%q", qid or stanza.attr.id, qset);
 	end
+	-- A reverse query needs to be flipped
+	local flip = reverse;
+	-- A flip-page query needs to be the opposite of that.
+	if query:get_child("flip-page") then flip = not flip end
 
 	-- Load all the data!
 	local data, err = archive:find(origin.username, {
@@ -199,17 +203,19 @@
 		if not first then first = id; end
 		last = id;
 
-		if reverse then
+		if flip then
 			results[count] = fwd_st;
 		else
 			origin.send(fwd_st);
 		end
 	end
 
-	if reverse then
+	if flip then
 		for i = #results, 1, -1 do
 			origin.send(results[i]);
 		end
+	end
+	if reverse then
 		first, last = last, first;
 	end
 
@@ -516,7 +522,6 @@
 local advertise_extended = module:get_option_boolean("mam_advertise_extend", false);
 -- TODO before-id, after-id
 -- TODO ids
--- TODO page flipping
 -- TODO archive metadata query
 -- TODO delete feature flag option
 
--- a/spec/scansion/mam_extended.scs	Mon Nov 30 21:00:45 2020 +0100
+++ b/spec/scansion/mam_extended.scs	Mon Nov 30 21:12:01 2020 +0100
@@ -76,3 +76,47 @@
 			</set>
 		</fin>
 	</iq>
+
+# Get results in reverse order
+Romeo sends:
+	<iq type="set" id="mamquery2">
+		<query xmlns="urn:xmpp:mam:2" queryid="q1">
+			<flip-page/>
+		</query>
+	</iq>
+
+Romeo receives:
+	<message to="${Romeo's full JID}">
+		<result xmlns="urn:xmpp:mam:2" queryid="q1" id="{scansion:any}">
+			<forwarded xmlns="urn:xmpp:forward:0">
+				<delay stamp="2008-08-22T21:09:04Z" xmlns="urn:xmpp:delay"/>
+				<message to="someone@localhost" xmlns="jabber:client" type="chat" xml:lang="en" id="chat02" from="${Romeo's full JID}">
+					<body>U there?</body>
+				</message>
+			</forwarded>
+		</result>
+	</message>
+
+Romeo receives:
+	<message to="${Romeo's full JID}">
+		<result xmlns="urn:xmpp:mam:2" queryid="q1" id="{scansion:any}">
+			<forwarded xmlns="urn:xmpp:forward:0">
+				<delay stamp="2008-08-22T21:09:04Z" xmlns="urn:xmpp:delay"/>
+				<message to="someone@localhost" xmlns="jabber:client" type="chat" xml:lang="en" id="chat01" from="${Romeo's full JID}">
+					<body>Hello</body>
+				</message>
+			</forwarded>
+		</result>
+	</message>
+
+# FIXME unstable tag order from util.rsm
+Romeo receives:
+	<iq type="result" id="mamquery2" to="${Romeo's full JID}">
+		<fin xmlns="urn:xmpp:mam:2" complete="true" queryid="q1">
+			<set xmlns="http://jabber.org/protocol/rsm" scansion:strict="false">
+				<count>2</count>
+				<first></first>
+				<last></last>
+			</set>
+		</fin>
+	</iq>