diff options
Diffstat (limited to 'src/ejabberd_admin.erl')
-rw-r--r-- | src/ejabberd_admin.erl | 27 |
1 files changed, 20 insertions, 7 deletions
diff --git a/src/ejabberd_admin.erl b/src/ejabberd_admin.erl index cbad89a9c..ccd72a61f 100644 --- a/src/ejabberd_admin.erl +++ b/src/ejabberd_admin.erl @@ -715,13 +715,26 @@ delete_old_messages(Days) -> delete_old_messages_batch(Server, Days, BatchSize, Rate) -> LServer = jid:nameprep(Server), Mod = gen_mod:db_mod(LServer, mod_offline), - case ejabberd_batch:register_task({spool, LServer}, 0, Rate, {LServer, Days, BatchSize}, - fun({L, Da, B} = S) -> - case Mod:remove_old_messages_batch(L, Da, B) of - {ok, Count} -> - {ok, S, Count}; - {error, _} = E -> - E + case ejabberd_batch:register_task({spool, LServer}, 0, Rate, {LServer, Days, BatchSize, none}, + fun({L, Da, B, IS} = S) -> + case {erlang:function_exported(Mod, remove_old_messages_batch, 3), + erlang:function_exported(Mod, remove_old_messages_batch, 4)} of + {true, _} -> + case Mod:remove_old_messages_batch(L, Da, B) of + {ok, Count} -> + {ok, S, Count}; + {error, _} = E -> + E + end; + {_, true} -> + case Mod:remove_old_messages_batch(L, Da, B, IS) of + {ok, IS2, Count} -> + {ok, {L, Da, B, IS2}, Count}; + {error, _} = E -> + E + end; + _ -> + {error, not_implemented_for_backend} end end) of ok -> |