diff options
author | Matthew Wild <mwild1@gmail.com> | 2010-03-22 14:38:01 +0000 |
---|---|---|
committer | Matthew Wild <mwild1@gmail.com> | 2010-03-22 14:38:01 +0000 |
commit | 02971394f90dde48ed352ebc1936258647f7ab3c (patch) | |
tree | 8ebf152610862d71bb1f2d3bbb77ea96f7258c56 | |
parent | 172d9baed4f493e04e93659d485f1a75624b84c1 (diff) | |
parent | c3a993d0ada1de7131b880aba84ea60a03b50873 (diff) | |
download | prosody-02971394f90dde48ed352ebc1936258647f7ab3c.tar.gz prosody-02971394f90dde48ed352ebc1936258647f7ab3c.zip |
Merge 0.7->trunk
-rw-r--r-- | core/rostermanager.lua | 10 | ||||
-rw-r--r-- | plugins/mod_groups.lua | 32 |
2 files changed, 31 insertions, 11 deletions
diff --git a/core/rostermanager.lua b/core/rostermanager.lua index 516983a9..b95647bd 100644 --- a/core/rostermanager.lua +++ b/core/rostermanager.lua @@ -114,8 +114,14 @@ function save_roster(username, host, roster) --end end if roster then - if not roster[false] then roster[false] = {}; end - roster[false].version = (roster[false].version or 0) + 1; + local metadata = roster[false]; + if not metadata then + metadata = {}; + roster[false] = metadata; + end + if metadata.version ~= true then + metadata.version = (metadata.version or 0) + 1; + end return datamanager.store(username, host, "roster", roster); end log("warn", "save_roster: user had no roster to save"); diff --git a/plugins/mod_groups.lua b/plugins/mod_groups.lua index f31bb1a8..3301269e 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,23 @@ 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 + + if roster[false] then + roster[false].version = true; end end @@ -57,6 +67,7 @@ function remove_virtual_contacts(username, host, datastore, data) new_roster[jid] = contact; end end + new_roster[false].version = nil; -- Version is void return username, host, datastore, new_roster; end @@ -71,20 +82,23 @@ function module.load() datamanager.add_callback(remove_virtual_contacts); groups = { default = {} }; - members = { [false] = {} }; + members = { }; local curr_group = "default"; for line in io.lines(groups_file) do if line:match("^%s*%[.-%]%s*$") then 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)); groups[curr_group] = groups[curr_group] or {}; else -- Add JID - local jid = jid_prep(line); + local jid = jid_prep(line:match("%S+")); if jid then module:log("debug", "New member of %s: %s", tostring(curr_group), tostring(jid)); groups[curr_group][jid] = true; |