]> granicus.if.org Git - ejabberd/commitdiff
mod_mam: Improve handling of forked messages
authorHolger Weiss <holger@zedat.fu-berlin.de>
Tue, 14 Nov 2017 23:30:38 +0000 (00:30 +0100)
committerHolger Weiss <holger@zedat.fu-berlin.de>
Tue, 14 Nov 2017 23:30:38 +0000 (00:30 +0100)
Make sure a message that was forked in ejabberd_sm will really only be
tagged with a stanza ID if (another copy of) it was stored in MAM.

src/mod_mam.erl

index 3d3d9a2bc499668117a8010934b2fd30e369ea30..6c6a15ca18067f2fb965013dcbe41ce47260c43b 100644 (file)
@@ -755,12 +755,12 @@ may_enter_room(From, MUCState) ->
 
 -spec store_msg(message(), binary(), binary(), jid(), send | recv)
       -> ok | pass | any().
-store_msg(#message{meta = #{sm_copy := true}}, _LUser, _LServer, _Peer, _Dir) ->
-    ok; % Already stored.
 store_msg(Pkt, LUser, LServer, Peer, Dir) ->
     Prefs = get_prefs(LUser, LServer),
-    case should_archive_peer(LUser, LServer, Prefs, Peer) of
-       true ->
+    case {should_archive_peer(LUser, LServer, Prefs, Peer), Pkt} of
+       {true, #message{meta = #{sm_copy := true}}} ->
+           ok; % Already stored.
+       {true, _} ->
            case ejabberd_hooks:run_fold(store_mam_message, LServer, Pkt,
                                         [LUser, LServer, Peer, chat, Dir]) of
                drop ->
@@ -772,7 +772,7 @@ store_msg(Pkt, LUser, LServer, Peer, Dir) ->
                    Mod = gen_mod:db_mod(LServer, ?MODULE),
                    Mod:store(El, LServer, US, chat, Peer, <<"">>, Dir, ID)
            end;
-       false ->
+       {false, _} ->
            pass
     end.