diff options
Diffstat (limited to 'src/mod_private_riak.erl')
-rw-r--r-- | src/mod_private_riak.erl | 31 |
1 files changed, 18 insertions, 13 deletions
diff --git a/src/mod_private_riak.erl b/src/mod_private_riak.erl index 5c5185573..be175f071 100644 --- a/src/mod_private_riak.erl +++ b/src/mod_private_riak.erl @@ -27,7 +27,7 @@ -behaviour(mod_private). %% API --export([init/2, set_data/3, get_data/3, get_all_data/2, remove_user/2, +-export([init/2, set_data/3, get_data/3, get_all_data/2, del_data/2, import/3]). -include("xmpp.hrl"). @@ -40,37 +40,42 @@ init(_Host, _Opts) -> ok. set_data(LUser, LServer, Data) -> - lists:foreach( - fun({XMLNS, El}) -> + lists:foldl( + fun(_, {error, _} = Err) -> + Err; + ({XMLNS, El}, _) -> ejabberd_riak:put(#private_storage{usns = {LUser, LServer, XMLNS}, xml = El}, private_storage_schema(), [{'2i', [{<<"us">>, {LUser, LServer}}]}]) - end, Data), - {atomic, ok}. + end, ok, Data). get_data(LUser, LServer, XMLNS) -> case ejabberd_riak:get(private_storage, private_storage_schema(), {LUser, LServer, XMLNS}) of {ok, #private_storage{xml = El}} -> {ok, El}; - _ -> - error + {error, notfound} -> + error; + Err -> + Err end. get_all_data(LUser, LServer) -> case ejabberd_riak:get_by_index( private_storage, private_storage_schema(), <<"us">>, {LUser, LServer}) of + {ok, []} -> + error; {ok, Res} -> - [El || #private_storage{xml = El} <- Res]; - _ -> - [] + {ok, [El || #private_storage{xml = El} <- Res]}; + Err -> + Err end. -remove_user(LUser, LServer) -> - {atomic, ejabberd_riak:delete_by_index(private_storage, - <<"us">>, {LUser, LServer})}. +del_data(LUser, LServer) -> + ejabberd_riak:delete_by_index(private_storage, + <<"us">>, {LUser, LServer}). import(LServer, <<"private_storage">>, [LUser, XMLNS, XML, _TimeStamp]) -> |