Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/processone/ejabberd.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaweł Chmielowski <pchmielowski@process-one.net>2018-04-20 14:27:39 +0300
committerPaweł Chmielowski <pchmielowski@process-one.net>2018-04-20 14:27:46 +0300
commit5be49cc0facd841a016f8565053eb7133583b13d (patch)
treefbab05b98ef1f97d06fd8ed2d211cf072333cf9d /src/mod_mam_mnesia.erl
parent42c029d5f7be60ee69bcb72d70f2bc7c87879dc0 (diff)
Add commands for cleaning up mam archive
Diffstat (limited to 'src/mod_mam_mnesia.erl')
-rw-r--r--src/mod_mam_mnesia.erl21
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),