diff options
author | Paweł Chmielowski <pchmielowski@process-one.net> | 2018-04-20 14:27:39 +0300 |
---|---|---|
committer | Paweł Chmielowski <pchmielowski@process-one.net> | 2018-04-20 14:27:46 +0300 |
commit | 5be49cc0facd841a016f8565053eb7133583b13d (patch) | |
tree | fbab05b98ef1f97d06fd8ed2d211cf072333cf9d /src/mod_mam_mnesia.erl | |
parent | 42c029d5f7be60ee69bcb72d70f2bc7c87879dc0 (diff) |
Add commands for cleaning up mam archive
Diffstat (limited to 'src/mod_mam_mnesia.erl')
-rw-r--r-- | src/mod_mam_mnesia.erl | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/src/mod_mam_mnesia.erl b/src/mod_mam_mnesia.erl index ed6967a0f..53d390cb7 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/8, write_prefs/4, get_prefs/2, select/6]). + extended_fields/0, store/8, write_prefs/4, get_prefs/2, select/6, remove_from_archive/3]). -include_lib("stdlib/include/ms_transform.hrl"). -include("xmpp.hrl"). @@ -67,6 +67,25 @@ remove_user(LUser, LServer) -> remove_room(_LServer, LName, LHost) -> remove_user(LName, LHost). +remove_from_archive(LUser, LServer, none) -> + US = {LUser, LServer}, + case mnesia:transaction(fun () -> mnesia:delete({archive_msg, US}) end) of + {atomic, _} -> ok; + {aborted, Reason} -> {error, Reason} + end; +remove_from_archive(LUser, LServer, WithJid) -> + US = {LUser, LServer}, + Peer = jid:remove_resource(jid:split(WithJid)), + F = fun () -> + Msgs = mnesia:match_object(archive_msg, + #archive_msg{us = US, bare_peer = Peer, _ = '_'}), + lists:foreach(fun mnesia:delete_object/1, Msgs) + end, + case mnesia:transaction(F) of + {atomic, _} -> ok; + {aborted, Reason} -> {error, Reason} + end. + delete_old_messages(global, TimeStamp, Type) -> mnesia:change_table_copy_type(archive_msg, node(), disc_copies), Result = delete_old_user_messages(mnesia:dirty_first(archive_msg), TimeStamp, Type), |