Changeset

11268:e3f6f0b39e7b

mod_mam: Advertise extended MAM 0.7.x behind a feature flag In order to ease testing until the extended feautres are all implemented. Also TODOs for all the sub-features.
author Kim Alvefur <zash@zash.se>
date Mon, 30 Nov 2020 21:00:45 +0100
parents 11267:97077089f3c2
children 11269:342ac5d806fb
files doc/doap.xml plugins/mod_mam/mod_mam.lua spec/scansion/mam_extended.scs
diffstat 3 files changed, 92 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/doc/doap.xml	Tue Jan 12 19:19:15 2021 +0100
+++ b/doc/doap.xml	Mon Nov 30 21:00:45 2020 +0100
@@ -568,7 +568,8 @@
     <implements>
       <xmpp:SupportedXep>
         <xmpp:xep rdf:resource="https://xmpp.org/extensions/xep-0313.html"/>
-        <xmpp:version>0.6.3</xmpp:version>
+        <xmpp:version>0.7.2</xmpp:version>
+        <xmpp:status>partial</xmpp:status>
         <xmpp:since>0.10.0</xmpp:since>
         <xmpp:note>mod_mam, mod_muc_mam</xmpp:note>
       </xmpp:SupportedXep>
--- a/plugins/mod_mam/mod_mam.lua	Tue Jan 12 19:19:15 2021 +0100
+++ b/plugins/mod_mam/mod_mam.lua	Mon Nov 30 21:00:45 2020 +0100
@@ -1,7 +1,7 @@
 -- Prosody IM
 -- Copyright (C) 2008-2017 Matthew Wild
 -- Copyright (C) 2008-2017 Waqas Hussain
--- Copyright (C) 2011-2017 Kim Alvefur
+-- Copyright (C) 2011-2020 Kim Alvefur
 --
 -- This project is MIT/X11 licensed. Please see the
 -- COPYING file in the source package for more information.
@@ -10,6 +10,7 @@
 --
 
 local xmlns_mam     = "urn:xmpp:mam:2";
+local xmlns_mam_ext = "urn:xmpp:mam:2#extended";
 local xmlns_delay   = "urn:xmpp:delay";
 local xmlns_forward = "urn:xmpp:forward:0";
 local xmlns_st_id   = "urn:xmpp:sid:0";
@@ -512,8 +513,18 @@
 module:hook("message/bare", message_handler, 0);
 module:hook("message/full", message_handler, 0);
 
+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
+
 module:hook("account-disco-info", function(event)
 	(event.reply or event.stanza):tag("feature", {var=xmlns_mam}):up();
+	if advertise_extended then
+		(event.reply or event.stanza):tag("feature", {var=xmlns_mam_ext}):up();
+	end
 	(event.reply or event.stanza):tag("feature", {var=xmlns_st_id}):up();
 end);
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/spec/scansion/mam_extended.scs	Mon Nov 30 21:00:45 2020 +0100
@@ -0,0 +1,78 @@
+# MAM 0.7.x Extended features
+
+[Client] Romeo
+	jid: extmamtester@localhost
+	password: password
+
+---------
+
+Romeo connects
+
+# Enable MAM so we can save some messages
+Romeo sends:
+	<iq type="set" id="enablemam">
+		<prefs xmlns="urn:xmpp:mam:2" default="always">
+			<always/>
+			<never/>
+		</prefs>
+	</iq>
+
+Romeo receives:
+	<iq type="result" id="enablemam">
+		<prefs xmlns="urn:xmpp:mam:2" default="always">
+			<always/>
+			<never/>
+		</prefs>
+	</iq>
+
+# Some messages to look for later
+Romeo sends:
+	<message to="someone@localhost" type="chat" id="chat01">
+		<body>Hello</body>
+	</message>
+
+Romeo sends:
+	<message to="someone@localhost" type="chat" id="chat02">
+		<body>U there?</body>
+	</message>
+
+Romeo sends:
+	<iq type="set" id="mamquery1">
+		<query xmlns="urn:xmpp:mam:2" queryid="q1"/>
+	</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="chat01" from="${Romeo's full JID}">
+					<body>Hello</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="chat02" from="${Romeo's full JID}">
+					<body>U there?</body>
+				</message>
+			</forwarded>
+		</result>
+	</message>
+
+# FIXME unstable tag order from util.rsm
+Romeo receives:
+	<iq type="result" id="mamquery1" 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>