aboutsummaryrefslogtreecommitdiffstats
path: root/plugins/mod_pubsub/pubsub.lib.lua
diff options
context:
space:
mode:
authorKim Alvefur <zash@zash.se>2021-10-19 18:11:50 +0200
committerKim Alvefur <zash@zash.se>2021-10-19 18:11:50 +0200
commit4b05d0f2402475fea608fd3e48a96364bc6da4f2 (patch)
tree8553f7e8e4b57c64b2599666f87b5e3ca14cc0b7 /plugins/mod_pubsub/pubsub.lib.lua
parent3e55057a8574af83e42ec96041283111e34ef7d4 (diff)
downloadprosody-4b05d0f2402475fea608fd3e48a96364bc6da4f2.tar.gz
prosody-4b05d0f2402475fea608fd3e48a96364bc6da4f2.zip
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.
Diffstat (limited to 'plugins/mod_pubsub/pubsub.lib.lua')
-rw-r--r--plugins/mod_pubsub/pubsub.lib.lua16
1 files changed, 16 insertions, 0 deletions
diff --git a/plugins/mod_pubsub/pubsub.lib.lua b/plugins/mod_pubsub/pubsub.lib.lua
index 87144173..c5097a33 100644
--- a/plugins/mod_pubsub/pubsub.lib.lua
+++ b/plugins/mod_pubsub/pubsub.lib.lua
@@ -120,6 +120,12 @@ local node_config_form = dataform {
};
};
{
+ 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 @@ function _M.get_feature_set(service)
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 @@ function handlers.set_subscribe(origin, stanza, subscribe, service)
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)