diff --git a/src/mod_mam.erl b/src/mod_mam.erl index 9b1369a7a..a30fe8eb5 100644 --- a/src/mod_mam.erl +++ b/src/mod_mam.erl @@ -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), diff --git a/src/mod_mix.erl b/src/mod_mix.erl index 833645b9d..132682f73 100644 --- a/src/mod_mix.erl +++ b/src/mod_mix.erl @@ -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, diff --git a/src/mod_push.erl b/src/mod_push.erl index 093cb1662..e00a4ce4d 100644 --- a/src/mod_push.erl +++ b/src/mod_push.erl @@ -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()}.