aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKim Alvefur <zash@zash.se>2020-04-21 00:53:21 +0200
committerKim Alvefur <zash@zash.se>2020-04-21 00:53:21 +0200
commit5817e5f02d048aa6c17d5430d55f11c4a7a40a96 (patch)
tree7993f53667c3b7c4355119810668eb2ec9433e5b
parent8f77033238b4cf72377ae0b45d5951c32324892d (diff)
downloadprosody-5817e5f02d048aa6c17d5430d55f11c4a7a40a96.tar.gz
prosody-5817e5f02d048aa6c17d5430d55f11c4a7a40a96.zip
mod_mam: Factor out "should we store this" into a function
Meant to improve readability and ease further improvements to this algorithm.
-rw-r--r--plugins/mod_mam/mod_mam.lua34
1 files changed, 21 insertions, 13 deletions
diff --git a/plugins/mod_mam/mod_mam.lua b/plugins/mod_mam/mod_mam.lua
index 8229eb4e..27b4796d 100644
--- a/plugins/mod_mam/mod_mam.lua
+++ b/plugins/mod_mam/mod_mam.lua
@@ -263,11 +263,28 @@ local function strip_stanza_id(stanza, user)
return stanza;
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
+
+ -- or if hints suggest we shouldn't
+ if not stanza:get_child("store", "urn:xmpp:hints") then -- No hint telling us we should store
+ if stanza:get_child("no-permanent-store", "urn:xmpp:hints")
+ or stanza:get_child("no-store", "urn:xmpp:hints") then -- Hint telling us we should NOT store
+ return false, "hint";
+ end
+ end
+
+ return true, "default";
+end
+
-- Handle messages
local function message_handler(event, c2s)
local origin, stanza = event.origin, event.stanza;
local log = c2s and origin.log or module._log;
- local orig_type = stanza.attr.type or "normal";
local orig_from = stanza.attr.from;
local orig_to = stanza.attr.to or orig_from;
-- Stanza without 'to' are treated as if it was to their own bare jid
@@ -280,21 +297,12 @@ local function message_handler(event, c2s)
-- Filter out <stanza-id> that claim to be from us
event.stanza = strip_stanza_id(stanza, store_user);
- -- 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
- log("debug", "Not archiving stanza: %s (type)", stanza:top_tag());
+ local should, why = should_store(stanza);
+ if not should then
+ log("debug", "Not archiving stanza: %s (%s)", stanza:top_tag(), why);
return;
end
- -- or if hints suggest we shouldn't
- if not stanza:get_child("store", "urn:xmpp:hints") then -- No hint telling us we should store
- if stanza:get_child("no-permanent-store", "urn:xmpp:hints")
- or stanza:get_child("no-store", "urn:xmpp:hints") then -- Hint telling us we should NOT store
- log("debug", "Not archiving stanza: %s (hint)", stanza:top_tag());
- return;
- end
- end
-
local clone_for_storage;
if not strip_tags:empty() then
clone_for_storage = st.clone(stanza);