diff options
author | Evgeniy Khramtsov <ekhramtsov@process-one.net> | 2017-05-17 14:47:35 +0300 |
---|---|---|
committer | Evgeniy Khramtsov <ekhramtsov@process-one.net> | 2017-05-17 14:47:35 +0300 |
commit | f782955c069f1091cd56cc9d139ec0b0e2d62780 (patch) | |
tree | cbde7d13046bdc4bdc302511db04331b69d812e0 /src/mod_roster_sql.erl | |
parent | Fix use_cache/1 callback (diff) |
Implement cache for roster
Diffstat (limited to 'src/mod_roster_sql.erl')
-rw-r--r-- | src/mod_roster_sql.erl | 86 |
1 files changed, 25 insertions, 61 deletions
diff --git a/src/mod_roster_sql.erl b/src/mod_roster_sql.erl index 112c13a7..7c516568 100644 --- a/src/mod_roster_sql.erl +++ b/src/mod_roster_sql.erl @@ -30,10 +30,9 @@ %% API -export([init/2, read_roster_version/2, write_roster_version/4, - get_roster/2, get_roster_by_jid/3, - roster_subscribe/4, get_roster_by_jid_with_groups/3, - remove_user/2, update_roster/4, del_roster/3, transaction/2, - read_subscription_and_groups/3, get_only_items/2, + get_roster/2, get_roster_item/3, roster_subscribe/4, + read_subscription_and_groups/3, remove_user/2, + update_roster/4, del_roster/3, transaction/2, import/3, export/1, raw_to_record/2]). -include("mod_roster.hrl"). @@ -48,7 +47,7 @@ init(_Host, _Opts) -> read_roster_version(LUser, LServer) -> case sql_queries:get_roster_version(LServer, LUser) of - {selected, [{Version}]} -> Version; + {selected, [{Version}]} -> {ok, Version}; {selected, []} -> error end. @@ -77,55 +76,22 @@ get_roster(LUser, LServer) -> dict:append(J, G, Acc) end, dict:new(), JIDGroups), - lists:flatmap( - fun(I) -> - case raw_to_record(LServer, I) of - %% Bad JID in database: - error -> []; - R -> - SJID = jid:encode(R#roster.jid), - Groups = case dict:find(SJID, GroupsDict) of - {ok, Gs} -> Gs; - error -> [] - end, - [R#roster{groups = Groups}] - end - end, Items); + {ok, lists:flatmap( + fun(I) -> + case raw_to_record(LServer, I) of + %% Bad JID in database: + error -> []; + R -> + SJID = jid:encode(R#roster.jid), + Groups = case dict:find(SJID, GroupsDict) of + {ok, Gs} -> Gs; + error -> [] + end, + [R#roster{groups = Groups}] + end + end, Items)}; _ -> - [] - end. - -get_roster_by_jid(LUser, LServer, LJID) -> - {selected, Res} = - sql_queries:get_roster_by_jid(LServer, LUser, jid:encode(LJID)), - case Res of - [] -> - #roster{usj = {LUser, LServer, LJID}, - us = {LUser, LServer}, jid = LJID}; - [I] -> - R = raw_to_record(LServer, I), - case R of - %% Bad JID in database: - error -> - #roster{usj = {LUser, LServer, LJID}, - us = {LUser, LServer}, jid = LJID}; - _ -> - R#roster{usj = {LUser, LServer, LJID}, - us = {LUser, LServer}, jid = LJID, name = <<"">>} - end - end. - -get_only_items(LUser, LServer) -> - case catch sql_queries:get_roster(LServer, LUser) of - {selected, Is} when is_list(Is) -> - lists:flatmap( - fun(I) -> - case raw_to_record(LServer, I) of - error -> []; - R -> [R] - end - end, Is); - _ -> [] + error end. roster_subscribe(_LUser, _LServer, _LJID, Item) -> @@ -135,14 +101,13 @@ roster_subscribe(_LUser, _LServer, _LJID, Item) -> transaction(LServer, F) -> ejabberd_sql:sql_transaction(LServer, F). -get_roster_by_jid_with_groups(LUser, LServer, LJID) -> +get_roster_item(LUser, LServer, LJID) -> SJID = jid:encode(LJID), case sql_queries:get_roster_by_jid(LServer, LUser, SJID) of {selected, [I]} -> case raw_to_record(LServer, I) of error -> - #roster{usj = {LUser, LServer, LJID}, - us = {LUser, LServer}, jid = LJID}; + error; R -> Groups = case sql_queries:get_roster_groups(LServer, LUser, SJID) of @@ -150,16 +115,15 @@ get_roster_by_jid_with_groups(LUser, LServer, LJID) -> [JGrp || {JGrp} <- JGrps]; _ -> [] end, - R#roster{groups = Groups} + {ok, R#roster{groups = Groups}} end; {selected, []} -> - #roster{usj = {LUser, LServer, LJID}, - us = {LUser, LServer}, jid = LJID} + error end. remove_user(LUser, LServer) -> sql_queries:del_user_roster_t(LServer, LUser), - {atomic, ok}. + ok. update_roster(LUser, LServer, LJID, Item) -> SJID = jid:encode(LJID), @@ -194,7 +158,7 @@ read_subscription_and_groups(LUser, LServer, LJID) -> [JGrp || {JGrp} <- JGrps]; _ -> [] end, - {Subscription, Groups}; + {ok, {Subscription, Groups}}; _ -> error end. |