From b0b188aa685e7e7dbddbb060b0e6b58e7380366e Mon Sep 17 00:00:00 2001 From: colm Date: Mon, 10 Sep 2018 00:08:00 +0100 Subject: [PATCH] remove some chatty SQL queries by pulling back all groups with opts and filtering in memory. move a call to get_group_name outside of a loop to eliminate redundant repeated queries --- src/mod_shared_roster.erl | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/src/mod_shared_roster.erl b/src/mod_shared_roster.erl index 79b782e17..4cfaf48f7 100644 --- a/src/mod_shared_roster.erl +++ b/src/mod_shared_roster.erl @@ -303,10 +303,10 @@ get_jid_info({Subscription, Ask, Groups}, User, Server, US1 = {U1, S1}, DisplayedGroups = get_user_displayed_groups(US), SRUsers = lists:foldl(fun (Group, Acc1) -> + GroupName = get_group_name(LServer, Group), lists:foldl(fun (User1, Acc2) -> dict:append(User1, - get_group_name(LServer, - Group), + GroupName, Acc2) end, Acc1, @@ -451,18 +451,24 @@ get_group_name(Host1, Group1) -> %% Get list of names of groups that have @all@/@online@/etc in the memberlist get_special_users_groups(Host) -> - lists:filter(fun (Group) -> - get_group_opt(Host, Group, all_users, false) orelse - get_group_opt(Host, Group, online_users, false) - end, - list_groups(Host)). + lists:filtermap(fun ({Group, Opts}) -> + case proplists:get_value(all_users, Opts, false) orelse + proplists:get_value(online_users, Opts, false) of + true -> {true, Group}; + false -> false + end + end, + groups_with_opts(Host)). %% Get list of names of groups that have @online@ in the memberlist get_special_users_groups_online(Host) -> - lists:filter(fun (Group) -> - get_group_opt(Host, Group, online_users, false) - end, - list_groups(Host)). + lists:filtermap(fun ({Group, Opts}) -> + case proplists:get_value(online_users, Opts, false) of + true -> {true, Group}; + false -> false + end + end, + groups_with_opts(Host)). %% Given two lists of groupnames and their options, %% return the list of displayed groups to the second list