Call store_mam_message hook for messages that user_mucsub_from_muc_archive was filtering out

Just adjust mod_mam callback for it to not store them.

This callback is used by mod_push for triggering push, and previous
behaviour did disable pushes for muc messages with that option
enabled.
This commit is contained in:
Pawel Chmielowski
2026-03-09 13:57:51 +01:00
parent a9ae72ba9f
commit 9fd1ed34ee
3 changed files with 14 additions and 15 deletions
+9 -10
View File
@@ -47,7 +47,7 @@
get_room_config/4, set_room_option/3, offline_message/1, export/1,
mod_options/1, remove_mam_for_user_with_peer/3, remove_mam_for_user/2,
is_empty_for_user/2, is_empty_for_room/3, check_create_room/4,
process_iq/3, store_mam_message/7, make_id/0, wrap_as_mucsub/2, select/7,
process_iq/3, store_mam_message/8, make_id/0, wrap_as_mucsub/2, select/7,
is_archiving_enabled/2,
get_mam_count/2,
webadmin_menu_hostuser/4,
@@ -1138,18 +1138,16 @@ store_msg(Pkt, LUser, LServer, Peer, Dir) ->
{ok, Prefs} ->
UseMucArchive = mod_mam_opt:user_mucsub_from_muc_archive(LServer),
StoredInMucMam = UseMucArchive andalso xmpp:get_meta(Pkt, in_muc_mam, false),
case {should_archive_peer(LUser, LServer, Prefs, Peer), Pkt, StoredInMucMam} of
{true, #message{meta = #{sm_copy := true}}, _} ->
case {should_archive_peer(LUser, LServer, Prefs, Peer), Pkt} of
{true, #message{meta = #{sm_copy := true}}} ->
ok; % Already stored.
{true, _, true} ->
ok; % Stored in muc archive.
{true, _, _} ->
{true, _} ->
case ejabberd_hooks:run_fold(store_mam_message, LServer, Pkt,
[LUser, LServer, Peer, <<"">>, chat, Dir]) of
[LUser, LServer, Peer, <<"">>, chat, Dir, StoredInMucMam]) of
#message{} -> ok;
_ -> pass
end;
{false, _, _} ->
{false, _} ->
pass
end;
{error, _} ->
@@ -1171,8 +1169,9 @@ store_muc(MUCState, Pkt, RoomJID, Peer, Nick) ->
false ->
pass
end.
store_mam_message(Pkt, U, S, Peer, Nick, Type, Dir) ->
store_mam_message(_Pkt, _U, _S, _Peer, _Nick, _Type, _Dir, true) ->
ok;
store_mam_message(Pkt, U, S, Peer, Nick, Type, Dir, false) ->
LServer = ejabberd_router:host_of_route(S),
US = {U, S},
ID = get_stanza_id(Pkt),
+1 -1
View File
@@ -513,7 +513,7 @@ process_mix_message(#message{from = From, to = To,
Msg2 = xmpp:put_meta(Msg1, stanza_id, MamID),
case ejabberd_hooks:run_fold(
store_mam_message, ServerHost, Msg2,
[Chan, Host, BFrom, Nick, groupchat, recv]) of
[Chan, Host, BFrom, Nick, groupchat, recv, false]) of
#message{} ->
multicast(Mod, ServerHost, Chan, Host,
?NS_MIX_NODES_MESSAGES,
+4 -4
View File
@@ -34,7 +34,7 @@
-export([mod_doc/0]).
%% ejabberd_hooks callbacks.
-export([disco_sm_features/5, c2s_session_pending/1, c2s_copy_session/2,
c2s_session_resumed/1, c2s_handle_cast/2, c2s_stanza/3, mam_message/7,
c2s_session_resumed/1, c2s_handle_cast/2, c2s_stanza/3, mam_message/8,
offline_message/1, remove_user/2]).
%% gen_iq_handler callback.
@@ -379,8 +379,8 @@ c2s_stanza(State, _Pkt, _SendResult) ->
State.
-spec mam_message(message() | drop, binary(), binary(), jid(),
binary(), chat | groupchat, recv | send) -> message().
mam_message(#message{} = Pkt, LUser, LServer, _Peer, _Nick, chat, Dir) ->
binary(), chat | groupchat, recv | send, boolean()) -> message().
mam_message(#message{} = Pkt, LUser, LServer, _Peer, _Nick, chat, Dir, _InMucMam) ->
case lookup_sessions(LUser, LServer) of
{ok, [_|_] = Clients} ->
case drop_online_sessions(LUser, LServer, Clients) of
@@ -394,7 +394,7 @@ mam_message(#message{} = Pkt, LUser, LServer, _Peer, _Nick, chat, Dir) ->
ok
end,
Pkt;
mam_message(Pkt, _LUser, _LServer, _Peer, _Nick, _Type, _Dir) ->
mam_message(Pkt, _LUser, _LServer, _Peer, _Nick, _Type, _Dir, _InMucMam) ->
Pkt.
-spec offline_message({any(), message()}) -> {any(), message()}.