diff options
author | Matthew Wild <mwild1@gmail.com> | 2010-03-22 14:32:23 +0000 |
---|---|---|
committer | Matthew Wild <mwild1@gmail.com> | 2010-03-22 14:32:23 +0000 |
commit | f90b07e55b263c6692841183786340a7ced53e00 (patch) | |
tree | e7507290bacf6c0b349f07bb3311090597da525a | |
parent | ddc6e94e639d6beec50a76dbd7f9fd8419ab9272 (diff) | |
download | prosody-f90b07e55b263c6692841183786340a7ced53e00.tar.gz prosody-f90b07e55b263c6692841183786340a7ced53e00.zip |
mod_groups: Only create group lists when necessary (now we can reliably detect when a user is in /any/ group, including public ones)
-rw-r--r-- | plugins/mod_groups.lua | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/plugins/mod_groups.lua b/plugins/mod_groups.lua index f31bb1a8..23886539 100644 --- a/plugins/mod_groups.lua +++ b/plugins/mod_groups.lua @@ -7,8 +7,8 @@ -- -local groups = { default = {} }; -local members = { [false] = {} }; +local groups; +local members; local groups_file; @@ -20,7 +20,7 @@ local module_host = module:get_host(); function inject_roster_contacts(username, host, roster) module:log("warn", "Injecting group members to roster"); local bare_jid = username.."@"..host; - if not members[bare_jid] then return; end -- Not a member of any groups + if not members[bare_jid] and not members[false] then return; end -- Not a member of any groups local function import_jids_to_roster(group_name) for jid in pairs(groups[group_name]) do @@ -39,13 +39,19 @@ function inject_roster_contacts(username, host, roster) end -- Find groups this JID is a member of - for _, group_name in ipairs(members[bare_jid]) do - import_jids_to_roster(group_name); + if members[bare_jid] then + for _, group_name in ipairs(members[bare_jid]) do + module:log("debug", "Importing group %s", group_name); + import_jids_to_roster(group_name); + end end -- Import public groups - for _, group_name in ipairs(members[false]) do - import_jids_to_roster(group_name); + if members[false] then + for _, group_name in ipairs(members[false]) do + module:log("debug", "Importing group %s", group_name); + import_jids_to_roster(group_name); + end end end @@ -78,6 +84,9 @@ function module.load() curr_group = line:match("^%s*%[(.-)%]%s*$"); if curr_group:match("^%+") then curr_group = curr_group:gsub("^%+", ""); + if not members[false] then + members[false] = {}; + end members[false][#members[false]+1] = curr_group; -- Is a public group end module:log("debug", "New group: %s", tostring(curr_group)); |