aboutsummaryrefslogtreecommitdiff
path: root/src/mod_mam_mnesia.erl
diff options
context:
space:
mode:
authorHolger Weiss <holger@zedat.fu-berlin.de>2017-11-14 22:02:48 +0100
committerHolger Weiss <holger@zedat.fu-berlin.de>2017-11-14 22:02:48 +0100
commit8376370ae1035ff49e4bbc06f01fd993f1865ad4 (patch)
treefd14af693203a165b9d1327d8809d132abffeed4 /src/mod_mam_mnesia.erl
parentHalt ejabberd if the top supervisor fails to start (diff)
mod_mam: Don't store from 'sm_receive_packet' hook
Let mod_mam use the 'sm_receive_packet' hook to generate stanza IDs for incoming messages, but not to actually store them. The latter would require additional changes to make sure modules such as mod_privacy and mod_block_strangers continue to affect MAM.
Diffstat (limited to 'src/mod_mam_mnesia.erl')
-rw-r--r--src/mod_mam_mnesia.erl15
1 files changed, 5 insertions, 10 deletions
diff --git a/src/mod_mam_mnesia.erl b/src/mod_mam_mnesia.erl
index b672b4107..71f1f701b 100644
--- a/src/mod_mam_mnesia.erl
+++ b/src/mod_mam_mnesia.erl
@@ -28,7 +28,7 @@
%% API
-export([init/2, remove_user/2, remove_room/3, delete_old_messages/3,
- extended_fields/0, store/7, write_prefs/4, get_prefs/2, select/6]).
+ extended_fields/0, store/8, write_prefs/4, get_prefs/2, select/6]).
-include_lib("stdlib/include/ms_transform.hrl").
-include("xmpp.hrl").
@@ -103,7 +103,7 @@ delete_old_user_messages(User, TimeStamp, Type) ->
extended_fields() ->
[].
-store(Pkt, _, {LUser, LServer}, Type, Peer, Nick, _Dir) ->
+store(Pkt, _, {LUser, LServer}, Type, Peer, Nick, _Dir, TS) ->
case {mnesia:table_info(archive_msg, disc_only_copies),
mnesia:table_info(archive_msg, memory)} of
{[_|_], TableSize} when TableSize > ?TABLE_SIZE_LIMIT ->
@@ -112,13 +112,11 @@ store(Pkt, _, {LUser, LServer}, Type, Peer, Nick, _Dir) ->
{error, overflow};
_ ->
LPeer = {PUser, PServer, _} = jid:tolower(Peer),
- TS = p1_time_compat:timestamp(),
- ID = integer_to_binary(now_to_usec(TS)),
F = fun() ->
mnesia:write(
#archive_msg{us = {LUser, LServer},
- id = ID,
- timestamp = TS,
+ id = integer_to_binary(TS),
+ timestamp = misc:usec_to_now(TS),
peer = LPeer,
bare_peer = {PUser, PServer, <<>>},
type = Type,
@@ -127,7 +125,7 @@ store(Pkt, _, {LUser, LServer}, Type, Peer, Nick, _Dir) ->
end,
case mnesia:transaction(F) of
{atomic, ok} ->
- {ok, ID};
+ ok;
{aborted, Err} ->
?ERROR_MSG("Cannot add message to MAM archive of ~s@~s: ~s",
[LUser, LServer, Err]),
@@ -178,9 +176,6 @@ select(_LServer, JidRequestor,
%%%===================================================================
%%% Internal functions
%%%===================================================================
-now_to_usec({MSec, Sec, USec}) ->
- (MSec*1000000 + Sec)*1000000 + USec.
-
make_matchspec(LUser, LServer, Start, undefined, With) ->
%% List is always greater than a tuple
make_matchspec(LUser, LServer, Start, [], With);