From ee3814c0bffcd650aa1e1f36914b17391a623fbe Mon Sep 17 00:00:00 2001
From: Kim Alvefur <zash@zash.se>
Date: Mon, 21 May 2018 00:35:45 +0200
Subject: mod_pubsub: Make the 'type' attribute on broadcast messages
 configurable

This adds support for the pubsub#notification_type field in the node
config form.
---
 plugins/mod_pubsub/mod_pubsub.lua |  6 ++++--
 plugins/mod_pubsub/pubsub.lib.lua | 12 +++++++++++-
 2 files changed, 15 insertions(+), 3 deletions(-)

diff --git a/plugins/mod_pubsub/mod_pubsub.lua b/plugins/mod_pubsub/mod_pubsub.lua
index 80b1dbae..74995a2b 100644
--- a/plugins/mod_pubsub/mod_pubsub.lua
+++ b/plugins/mod_pubsub/mod_pubsub.lua
@@ -41,7 +41,7 @@ else
 end
 
 
-function simple_broadcast(kind, node, jids, item, actor)
+function simple_broadcast(kind, node, jids, item, actor, node_obj)
 	if item then
 		item = st.clone(item);
 		item.attr.xmlns = nil; -- Clear the pubsub namespace
@@ -51,10 +51,12 @@ function simple_broadcast(kind, node, jids, item, actor)
 	end
 
 	local id = new_id();
-	local message = st.message({ from = module.host, type = "headline", id = id })
+	local msg_type = node_obj and node_obj.config.message_type or "headline";
+	local message = st.message({ from = module.host, type = msg_type, id = id })
 		:tag("event", { xmlns = xmlns_pubsub_event })
 			:tag(kind, { node = node })
 				:add_child(item);
+
 	module:broadcast(jids, message, pairs);
 end
 
diff --git a/plugins/mod_pubsub/pubsub.lib.lua b/plugins/mod_pubsub/pubsub.lib.lua
index 8890392e..423abd86 100644
--- a/plugins/mod_pubsub/pubsub.lib.lua
+++ b/plugins/mod_pubsub/pubsub.lib.lua
@@ -52,6 +52,14 @@ local node_config_form = dataform {
 		name = "pubsub#persist_items";
 		label = "Persist items to storage";
 	};
+	{
+		type = "list-single";
+		name = "pubsub#notification_type";
+		label = "Specify the delivery style for notifications";
+		options = {
+			{ label = "Messages of type normal", value = "normal" },
+			{ label = "Messages of type headline", value = "headline", default = true },
+		};
 };
 
 local service_method_feature_map = {
@@ -187,6 +195,7 @@ function handlers.set_create(origin, stanza, create, service)
 		config = {
 			["max_items"] = tonumber(form_data["pubsub#max_items"]);
 			["persist_items"] = form_data["pubsub#persist_items"];
+			["notification_type"] = form_data["pubsub#notification_type"];
 		};
 	end
 	if node then
@@ -373,7 +382,8 @@ function handlers.owner_get_configure(origin, stanza, config, service)
 	local node_config = node_obj.config;
 	local pubsub_form_data = {
 		["pubsub#max_items"] = tostring(node_config["max_items"]);
-		["pubsub#persist_items"] = node_config["persist_items"]
+		["pubsub#persist_items"] = node_config["persist_items"];
+		["pubsub#notification_type"] = node_config["notification_type"];
 	}
 	local reply = st.reply(stanza)
 		:tag("pubsub", { xmlns = xmlns_pubsub_owner })
-- 
cgit v1.2.3