diff options
Diffstat (limited to 'src/mod_offline_riak.erl')
-rw-r--r-- | src/mod_offline_riak.erl | 150 |
1 files changed, 0 insertions, 150 deletions
diff --git a/src/mod_offline_riak.erl b/src/mod_offline_riak.erl deleted file mode 100644 index 3e126c12c..000000000 --- a/src/mod_offline_riak.erl +++ /dev/null @@ -1,150 +0,0 @@ -%%%------------------------------------------------------------------- -%%% File : mod_offline_riak.erl -%%% Author : Evgeny Khramtsov <ekhramtsov@process-one.net> -%%% Created : 15 Apr 2016 by Evgeny Khramtsov <ekhramtsov@process-one.net> -%%% -%%% -%%% ejabberd, Copyright (C) 2002-2019 ProcessOne -%%% -%%% This program is free software; you can redistribute it and/or -%%% modify it under the terms of the GNU General Public License as -%%% published by the Free Software Foundation; either version 2 of the -%%% License, or (at your option) any later version. -%%% -%%% This program is distributed in the hope that it will be useful, -%%% but WITHOUT ANY WARRANTY; without even the implied warranty of -%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%%% General Public License for more details. -%%% -%%% You should have received a copy of the GNU General Public License along -%%% with this program; if not, write to the Free Software Foundation, Inc., -%%% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -%%% -%%%---------------------------------------------------------------------- - --module(mod_offline_riak). - --behaviour(mod_offline). - --export([init/2, store_message/1, pop_messages/2, remove_expired_messages/1, - remove_old_messages/2, remove_user/2, read_message_headers/2, - read_message/3, remove_message/3, read_all_messages/2, - remove_all_messages/2, count_messages/2, import/1]). - --include("xmpp.hrl"). --include("mod_offline.hrl"). - -%%%=================================================================== -%%% API -%%%=================================================================== -init(_Host, _Opts) -> - ok. - -store_message(#offline_msg{us = US, packet = Pkt, timestamp = TS} = M) -> - El = xmpp:encode(Pkt), - ejabberd_riak:put(M#offline_msg{packet = El}, - offline_msg_schema(), - [{i, TS}, {'2i', [{<<"us">>, US}]}]). - -pop_messages(LUser, LServer) -> - case ejabberd_riak:get_by_index(offline_msg, offline_msg_schema(), - <<"us">>, {LUser, LServer}) of - {ok, Rs} -> - try - lists:foreach( - fun(#offline_msg{timestamp = T}) -> - ok = ejabberd_riak:delete(offline_msg, T) - end, Rs), - {ok, lists:keysort(#offline_msg.timestamp, Rs)} - catch _:{badmatch, Err} -> - Err - end; - Err -> - Err - end. - -remove_expired_messages(_LServer) -> - %% TODO - {atomic, ok}. - -remove_old_messages(_Days, _LServer) -> - %% TODO - {atomic, ok}. - -remove_user(LUser, LServer) -> - {atomic, ejabberd_riak:delete_by_index(offline_msg, - <<"us">>, {LUser, LServer})}. - -read_message_headers(LUser, LServer) -> - case ejabberd_riak:get_by_index( - offline_msg, offline_msg_schema(), - <<"us">>, {LUser, LServer}) of - {ok, Rs} -> - Hdrs = lists:map( - fun(#offline_msg{from = From, to = To, packet = Pkt, - timestamp = TS}) -> - Seq = now_to_integer(TS), - {Seq, From, To, TS, Pkt} - end, Rs), - lists:keysort(1, Hdrs); - _Err -> - error - end. - -read_message(_LUser, _LServer, I) -> - TS = integer_to_now(I), - case ejabberd_riak:get(offline_msg, offline_msg_schema(), TS) of - {ok, Msg} -> - {ok, Msg}; - _ -> - error - end. - -remove_message(_LUser, _LServer, I) -> - TS = integer_to_now(I), - ejabberd_riak:delete(offline_msg, TS), - ok. - -read_all_messages(LUser, LServer) -> - case ejabberd_riak:get_by_index( - offline_msg, offline_msg_schema(), - <<"us">>, {LUser, LServer}) of - {ok, Rs} -> - lists:keysort(#offline_msg.timestamp, Rs); - _Err -> - [] - end. - -remove_all_messages(LUser, LServer) -> - Res = ejabberd_riak:delete_by_index(offline_msg, - <<"us">>, {LUser, LServer}), - {atomic, Res}. - -count_messages(LUser, LServer) -> - case ejabberd_riak:count_by_index( - offline_msg, <<"us">>, {LUser, LServer}) of - {ok, Res} -> - {cache, Res}; - _ -> - {nocache, 0} - end. - -import(#offline_msg{us = US, timestamp = TS} = M) -> - ejabberd_riak:put(M, offline_msg_schema(), - [{i, TS}, {'2i', [{<<"us">>, US}]}]). - -%%%=================================================================== -%%% Internal functions -%%%=================================================================== -offline_msg_schema() -> - {record_info(fields, offline_msg), #offline_msg{}}. - -now_to_integer({MS, S, US}) -> - (MS * 1000000 + S) * 1000000 + US. - -integer_to_now(Int) -> - Secs = Int div 1000000, - USec = Int rem 1000000, - MSec = Secs div 1000000, - Sec = Secs rem 1000000, - {MSec, Sec, USec}. |