mod_groups: Support for public groups, and extra logging

Mon, 22 Jun 2009 22:02:04 +0100

author
Matthew Wild <mwild1@gmail.com>
date
Mon, 22 Jun 2009 22:02:04 +0100
changeset 1388
546caa44620c
parent 1387
64f18488b275
child 1389
846df07536eb

mod_groups: Support for public groups, and extra logging

plugins/mod_groups.lua file | annotate | diff | comparison | revisions
--- a/plugins/mod_groups.lua	Mon Jun 22 21:56:52 2009 +0100
+++ b/plugins/mod_groups.lua	Mon Jun 22 22:02:04 2009 +0100
@@ -1,6 +1,6 @@
 
 local groups = { default = {} };
-local members = {};
+local members = { [false] = {} };
 
 local groups_file;
 
@@ -14,9 +14,7 @@
 	local bare_jid = username.."@"..host;
 	if not members[bare_jid] then return; end -- Not a member of any groups
 	
-	-- Find groups this JID is a member of
-	for _, group_name in ipairs(members[bare_jid]) do
-		-- Find other people in the same group
+	local function import_jids_to_roster(group_name)
 		for jid in pairs(groups[group_name]) do
 			-- Add them to roster
 			--module:log("debug", "processing jid %s in group %s", tostring(jid), tostring(group_name));
@@ -31,6 +29,16 @@
 			end
 		end
 	end
+
+	-- Find groups this JID is a member of
+	for _, group_name in ipairs(members[bare_jid]) do
+		import_jids_to_roster(group_name);
+	end
+	
+	-- Import public groups
+	for _, group_name in ipairs(members[false]) do
+		import_jids_to_roster(group_name);
+	end
 end
 
 function remove_virtual_contacts(username, host, datastore, data)
@@ -55,16 +63,22 @@
 	datamanager.add_callback(remove_virtual_contacts);
 	
 	groups = { default = {} };
-	
+	members = { [false] = {} };
 	local curr_group = "default";
 	for line in io.lines(groups_file) do
-		if line:match("^%[%w+%]$") then
-			curr_group = line:match("^%[(%w+)%]$");
+		if line:match("^%s*%[.-%]%s*$") then
+			curr_group = line:match("^%s*%[(.-)%]%s*$");
+			if curr_group:match("^%+") then
+				curr_group = curr_group:gsub("^%+", "");
+				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);
 			if jid then
+				module:log("debug", "New member of %s: %s", tostring(curr_group), tostring(jid));
 				groups[curr_group][jid] = true;
 				members[jid] = members[jid] or {};
 				members[jid][#members[jid]+1] = curr_group;

mercurial