diff options
author | Kim Alvefur <zash@zash.se> | 2021-10-19 18:11:50 +0200 |
---|---|---|
committer | Kim Alvefur <zash@zash.se> | 2021-10-19 18:11:50 +0200 |
commit | 4b05d0f2402475fea608fd3e48a96364bc6da4f2 (patch) | |
tree | 8553f7e8e4b57c64b2599666f87b5e3ca14cc0b7 /plugins | |
parent | 3e55057a8574af83e42ec96041283111e34ef7d4 (diff) | |
download | prosody-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')
-rw-r--r-- | plugins/mod_pep.lua | 3 | ||||
-rw-r--r-- | plugins/mod_pubsub/pubsub.lib.lua | 16 |
2 files changed, 19 insertions, 0 deletions
diff --git a/plugins/mod_pep.lua b/plugins/mod_pep.lua index 2489655d..93342e09 100644 --- a/plugins/mod_pep.lua +++ b/plugins/mod_pep.lua @@ -187,6 +187,7 @@ function get_pep_service(username) ["max_items"] = 1; ["persist_items"] = true; ["access_model"] = "presence"; + ["send_last_published_item"] = "on_sub_and_presence"; }; autocreate_on_publish = true; @@ -260,6 +261,8 @@ local function get_caps_hash_from_presence(stanza, current) end local function resend_last_item(jid, node, service) + local ok, config = service:get_node_config(node, true); + if ok and config.send_last_published_item ~= "on_sub_and_presence" then return end 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); 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) |