From e5d6376c58d026003fbcee2dff60a7b244debbdb Mon Sep 17 00:00:00 2001
From: Kim Alvefur <zash@zash.se>
Date: Tue, 21 Apr 2020 00:56:56 +0200
Subject: mod_mam: Invert check for type

This is based on code in mod_csi_simple and aiming towards being more
flexible and maintainable than a couple of tests for when not to store.
---
 plugins/mod_mam/mod_mam.lua | 18 +++++++++++++-----
 1 file changed, 13 insertions(+), 5 deletions(-)

(limited to 'plugins')

diff --git a/plugins/mod_mam/mod_mam.lua b/plugins/mod_mam/mod_mam.lua
index 9c00cc99..028c3b8f 100644
--- a/plugins/mod_mam/mod_mam.lua
+++ b/plugins/mod_mam/mod_mam.lua
@@ -264,11 +264,8 @@ local function strip_stanza_id(stanza, user)
 end
 
 local function should_store(stanza) --> boolean, reason: string
-	local orig_type = stanza.attr.type or "normal";
-	-- We store chat messages or normal messages that have a body
-	if not(orig_type == "chat" or (orig_type == "normal" and stanza:get_child("body")) ) then
-		return false, "type";
-	end
+	local st_type = stanza.attr.type or "normal";
+	local st_to_full = (stanza.attr.to or ""):find("/");
 
 	-- or if hints suggest we shouldn't
 	if not stanza:get_child("store", "urn:xmpp:hints") then -- No hint telling us we should store
@@ -277,6 +274,17 @@ local function should_store(stanza) --> boolean, reason: string
 			return false, "hint";
 		end
 	end
+	if st_type == "headline" then
+		-- Headline messages are ephemeral by definition
+		return false, "headline";
+	end
+	if st_type == "groupchat" and st_to_full then
+		-- MUC messages always go to the full JID, usually archived by the MUC
+		return false, "groupchat";
+	end
+	if stanza:get_child("body") then
+		return true, "body";
+	end
 
 	return true, "default";
 end
-- 
cgit v1.2.3