diff options
author | Evgeniy Khramtsov <ekhramtsov@process-one.net> | 2016-04-13 13:04:04 +0300 |
---|---|---|
committer | Evgeniy Khramtsov <ekhramtsov@process-one.net> | 2016-04-13 13:04:04 +0300 |
commit | b5d1ce795f798af7c98d650b14b95cda1d2e6eb0 (patch) | |
tree | cdda4038d4e6dea01e64e9e25c75b76096ae2933 /src/mod_announce_riak.erl | |
parent | Clean mod_caps.erl from DB specific code (diff) |
Clean mod_announce.erl from DB specific code
Diffstat (limited to 'src/mod_announce_riak.erl')
-rw-r--r-- | src/mod_announce_riak.erl | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/src/mod_announce_riak.erl b/src/mod_announce_riak.erl new file mode 100644 index 00000000..7ced0b3c --- /dev/null +++ b/src/mod_announce_riak.erl @@ -0,0 +1,87 @@ +%%%------------------------------------------------------------------- +%%% @author Evgeny Khramtsov <ekhramtsov@process-one.net> +%%% @copyright (C) 2016, Evgeny Khramtsov +%%% @doc +%%% +%%% @end +%%% Created : 13 Apr 2016 by Evgeny Khramtsov <ekhramtsov@process-one.net> +%%%------------------------------------------------------------------- +-module(mod_announce_riak). +-behaviour(mod_announce). + +%% API +-export([init/2, set_motd_users/2, set_motd/2, delete_motd/1, + get_motd/1, is_motd_user/2, set_motd_user/2, import/2]). + +-include("jlib.hrl"). +-include("mod_announce.hrl"). + +%%%=================================================================== +%%% API +%%%=================================================================== +init(_Host, _Opts) -> + ok. + +set_motd_users(_LServer, USRs) -> + try + lists:foreach( + fun({U, S, _R}) -> + ok = ejabberd_riak:put(#motd_users{us = {U, S}}, + motd_users_schema(), + [{'2i', [{<<"server">>, S}]}]) + end, USRs), + {atomic, ok} + catch _:{badmatch, Err} -> + {atomic, Err} + end. + +set_motd(LServer, Packet) -> + {atomic, ejabberd_riak:put(#motd{server = LServer, + packet = Packet}, + motd_schema())}. + +delete_motd(LServer) -> + try + ok = ejabberd_riak:delete(motd, LServer), + ok = ejabberd_riak:delete_by_index(motd_users, + <<"server">>, + LServer), + {atomic, ok} + catch _:{badmatch, Err} -> + {atomic, Err} + end. + +get_motd(LServer) -> + case ejabberd_riak:get(motd, motd_schema(), LServer) of + {ok, #motd{packet = Packet}} -> + {ok, Packet}; + _ -> + error + end. + +is_motd_user(LUser, LServer) -> + case ejabberd_riak:get(motd_users, motd_users_schema(), + {LUser, LServer}) of + {ok, #motd_users{}} -> true; + _ -> false + end. + +set_motd_user(LUser, LServer) -> + {atomic, ejabberd_riak:put( + #motd_users{us = {LUser, LServer}}, motd_users_schema(), + [{'2i', [{<<"server">>, LServer}]}])}. + +import(_LServer, #motd{} = Motd) -> + ejabberd_riak:put(Motd, motd_schema()); +import(_LServer, #motd_users{us = {_, S}} = Users) -> + ejabberd_riak:put(Users, motd_users_schema(), + [{'2i', [{<<"server">>, S}]}]). + +%%%=================================================================== +%%% Internal functions +%%%=================================================================== +motd_schema() -> + {record_info(fields, motd), #motd{}}. + +motd_users_schema() -> + {record_info(fields, motd_users), #motd_users{}}. |