summaryrefslogtreecommitdiff
path: root/src/mod_announce_riak.erl
diff options
context:
space:
mode:
authorEvgeniy Khramtsov <ekhramtsov@process-one.net>2016-04-13 13:04:04 +0300
committerEvgeniy Khramtsov <ekhramtsov@process-one.net>2016-04-13 13:04:04 +0300
commitb5d1ce795f798af7c98d650b14b95cda1d2e6eb0 (patch)
treecdda4038d4e6dea01e64e9e25c75b76096ae2933 /src/mod_announce_riak.erl
parentClean 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.erl87
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{}}.