From edc283b4555a5024d7a9e44ab7d2669a23c1e8e4 Mon Sep 17 00:00:00 2001 From: Matthew Wild Date: Mon, 22 Mar 2010 01:54:22 +0000 Subject: mod_roster: Tidier code for the roster versioning logic --- plugins/mod_roster.lua | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'plugins') diff --git a/plugins/mod_roster.lua b/plugins/mod_roster.lua index 4362dca2..d301dd78 100644 --- a/plugins/mod_roster.lua +++ b/plugins/mod_roster.lua @@ -36,9 +36,10 @@ module:add_iq_handler("c2s", "jabber:iq:roster", if stanza.attr.type == "get" then local roster = st.reply(stanza); - local ver = stanza.tags[1].attr.ver + local client_ver = tonumber(stanza.tags[1].attr.ver); + local server_ver = tonumber(session.roster[false].version or 1); - if (not ver) or tonumber(ver) ~= (session.roster[false].version or 1) then + if not (client_ver and server_ver) or client_ver ~= server_ver then roster:query("jabber:iq:roster"); -- Client does not support versioning, or has stale roster for jid in pairs(session.roster) do @@ -55,7 +56,7 @@ module:add_iq_handler("c2s", "jabber:iq:roster", roster:up(); -- move out from item end end - roster.tags[1].attr.ver = tostring(session.roster[false].version or "1"); + roster.tags[1].attr.ver = server_ver; end session.send(roster); session.interested = true; -- resource is interested in roster updates -- cgit v1.2.3 From f90b07e55b263c6692841183786340a7ced53e00 Mon Sep 17 00:00:00 2001 From: Matthew Wild Date: Mon, 22 Mar 2010 14:32:23 +0000 Subject: mod_groups: Only create group lists when necessary (now we can reliably detect when a user is in /any/ group, including public ones) --- plugins/mod_groups.lua | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) (limited to 'plugins') 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)); -- cgit v1.2.3 From 117d917dfa718b6c65fcaa6b3404ecfa90983591 Mon Sep 17 00:00:00 2001 From: Matthew Wild Date: Mon, 22 Mar 2010 14:33:38 +0000 Subject: mod_groups: Missed hunk from last commit, don't create the list of public group members unless necessary --- plugins/mod_groups.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'plugins') diff --git a/plugins/mod_groups.lua b/plugins/mod_groups.lua index 23886539..7ef0d138 100644 --- a/plugins/mod_groups.lua +++ b/plugins/mod_groups.lua @@ -77,7 +77,7 @@ 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 -- cgit v1.2.3 From 24a8ca2e010f368e469d5a3c542aa3e69f5bef25 Mon Sep 17 00:00:00 2001 From: Matthew Wild Date: Mon, 22 Mar 2010 14:35:02 +0000 Subject: mod_groups: Fixes to make compatible with roster versioning - set version to 'true' to indicate that the roster is not being versioned --- plugins/mod_groups.lua | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'plugins') diff --git a/plugins/mod_groups.lua b/plugins/mod_groups.lua index 7ef0d138..69a4dcdc 100644 --- a/plugins/mod_groups.lua +++ b/plugins/mod_groups.lua @@ -53,6 +53,10 @@ function inject_roster_contacts(username, host, roster) import_jids_to_roster(group_name); end end + + if roster[false] then + roster[false].version = true; + end end function remove_virtual_contacts(username, host, datastore, data) @@ -63,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 -- cgit v1.2.3 From c3a993d0ada1de7131b880aba84ea60a03b50873 Mon Sep 17 00:00:00 2001 From: Matthew Wild Date: Mon, 22 Mar 2010 14:36:53 +0000 Subject: mod_groups: Ignore whitespace on group member JID lines (thanks Luis!) --- plugins/mod_groups.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'plugins') diff --git a/plugins/mod_groups.lua b/plugins/mod_groups.lua index 69a4dcdc..3301269e 100644 --- a/plugins/mod_groups.lua +++ b/plugins/mod_groups.lua @@ -98,7 +98,7 @@ function module.load() 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; -- cgit v1.2.3