Changeset

2914:9f6fec37d3e2

Merge 0.7->trunk
author Matthew Wild <mwild1@gmail.com>
date Mon, 22 Mar 2010 14:38:01 +0000
parents 2907:767864297afe (current diff) 2913:3d4e814cadfa (diff)
children 2916:c29ecf0cadff
files
diffstat 2 files changed, 31 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/core/rostermanager.lua	Mon Mar 22 01:54:22 2010 +0000
+++ b/core/rostermanager.lua	Mon Mar 22 14:38:01 2010 +0000
@@ -114,8 +114,14 @@
 		--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");
--- a/plugins/mod_groups.lua	Mon Mar 22 01:54:22 2010 +0000
+++ b/plugins/mod_groups.lua	Mon Mar 22 14:38:01 2010 +0000
@@ -7,8 +7,8 @@
 --
 
 
-local groups = { default = {} };
-local members = { [false] = {} };
+local groups;
+local members;
 
 local groups_file;
 
@@ -20,7 +20,7 @@
 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 @@
 	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 @@
 				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 @@
 	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;