Diff

plugins/mod_pubsub/pubsub.lib.lua @ 11854:b605cbd5f13b

mod_pubsub,mod_pep: Implement 'send_last_published_item' option #1436 Default left as 'never' in mod_pubsub to preserve the previous behavior. Unclear if this is desirable, but can always be changed later. In mod_pep this allows turning off the automatic resending of most recent item.
author Kim Alvefur <zash@zash.se>
date Tue, 19 Oct 2021 18:11:50 +0200
parent 11803:024b44ad5651
child 11855:8890eaa69446
line wrap: on
line diff
--- a/plugins/mod_pubsub/pubsub.lib.lua	Tue Oct 19 16:37:32 2021 +0200
+++ b/plugins/mod_pubsub/pubsub.lib.lua	Tue Oct 19 18:11:50 2021 +0200
@@ -120,6 +120,12 @@
 		};
 	};
 	{
+		type = "list-single";
+		var = "pubsub#send_last_published_item";
+		name = "send_last_published_item";
+		options = { "never"; "on_sub"; "on_sub_and_presence" };
+	};
+	{
 		type = "boolean";
 		value = true;
 		label = "Whether to deliver event notifications";
@@ -253,6 +259,10 @@
 		supported_features:add("access-"..service.node_defaults.access_model);
 	end
 
+	if service.node_defaults.send_last_published_item ~= "never" then
+		supported_features:add("last-published");
+	end
+
 	if rawget(service.config, "itemstore") and rawget(service.config, "nodestore") then
 		supported_features:add("persistent-items");
 	end
@@ -530,6 +540,12 @@
 		reply = pubsub_error_reply(stanza, ret);
 	end
 	origin.send(reply);
+	local ok, config = service:get_node_config(node, true);
+	if ok and config.send_last_published_item ~= "never" then
+		local ok, id, item = service:get_last_item(node, jid);
+		if not (ok and id) then return; end
+		service.config.broadcaster("items", node, { [jid] = true }, item);
+	end
 end
 
 function handlers.set_unsubscribe(origin, stanza, unsubscribe, service)