]> granicus.if.org Git - ejabberd/commitdiff
mod_mam: Add 'store_mam_message' hook
authorHolger Weiss <holger@zedat.fu-berlin.de>
Mon, 15 Aug 2016 21:28:36 +0000 (23:28 +0200)
committerHolger Weiss <holger@zedat.fu-berlin.de>
Mon, 15 Aug 2016 21:28:36 +0000 (23:28 +0200)
The new 'store_mam_message' hook is invoked whenever a MAM message is
stored.

src/mod_mam.erl

index 6ea75722343591f2000a733442a46e4550516779..f6d3c8f1f12b599ff3177773e26587c62dce24af 100644 (file)
@@ -718,8 +718,14 @@ store_msg(C2SState, Pkt, LUser, LServer, Peer, Dir) ->
     case should_archive_peer(C2SState, Prefs, Peer) of
        true ->
            US = {LUser, LServer},
-           Mod = gen_mod:db_mod(LServer, ?MODULE),
-           Mod:store(Pkt, LServer, US, chat, Peer, <<"">>, Dir);
+           case ejabberd_hooks:run_fold(store_mam_message, LServer, Pkt,
+                                        [LUser, LServer, Peer, chat, Dir]) of
+               drop ->
+                   pass;
+               NewPkt ->
+                   Mod = gen_mod:db_mod(LServer, ?MODULE),
+                   Mod:store(NewPkt, LServer, US, chat, Peer, <<"">>, Dir)
+           end;
        false ->
            pass
     end.
@@ -727,10 +733,16 @@ store_msg(C2SState, Pkt, LUser, LServer, Peer, Dir) ->
 store_muc(MUCState, Pkt, RoomJID, Peer, Nick) ->
     case should_archive_muc(Pkt) of
        true ->
-           LServer = MUCState#state.server_host,
            {U, S, _} = jid:tolower(RoomJID),
-           Mod = gen_mod:db_mod(LServer, ?MODULE),
-           Mod:store(Pkt, LServer, {U, S}, groupchat, Peer, Nick, recv);
+           LServer = MUCState#state.server_host,
+           case ejabberd_hooks:run_fold(store_mam_message, LServer, Pkt,
+                                        [U, S, Peer, groupchat, recv]) of
+               drop ->
+                   pass;
+               NewPkt ->
+                   Mod = gen_mod:db_mod(LServer, ?MODULE),
+                   Mod:store(NewPkt, LServer, {U, S}, groupchat, Peer, Nick, recv)
+           end;
        false ->
            pass
     end.