]> granicus.if.org Git - ejabberd/commitdiff
remove some chatty SQL queries by pulling back all groups with opts and filtering...
authorcolm <colm>
Sun, 9 Sep 2018 23:08:00 +0000 (00:08 +0100)
committercolm <colm>
Sun, 9 Sep 2018 23:08:00 +0000 (00:08 +0100)
src/mod_shared_roster.erl

index 79b782e178d9020a071c36fb9bf06c6010c973a6..4cfaf48f7930130d91dff616a075c04bf1981358 100644 (file)
@@ -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