X-Git-Url: https://git.enpas.org/?a=blobdiff_plain;f=plugins%2Fmod_groups.lua;h=f31bb1a883d9e1ae331c4b30a50f34f55df7340f;hb=e43ae724053d3607a0744cf2ed54f128ce093250;hp=8a9e263afb59ef4467d372d90988b1d9cd0e1e7a;hpb=a9e817305302bcb3d5f89ecf19f35eccbb518421;p=prosody.git diff --git a/plugins/mod_groups.lua b/plugins/mod_groups.lua index 8a9e263a..f31bb1a8 100644 --- a/plugins/mod_groups.lua +++ b/plugins/mod_groups.lua @@ -1,6 +1,14 @@ +-- Prosody IM +-- Copyright (C) 2008-2009 Matthew Wild +-- Copyright (C) 2008-2009 Waqas Hussain +-- +-- This project is MIT/X11 licensed. Please see the +-- COPYING file in the source package for more information. +-- + local groups = { default = {} }; -local members = {}; +local members = { [false] = {} }; local groups_file; @@ -14,9 +22,7 @@ function inject_roster_contacts(username, host, roster) 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 +37,16 @@ function inject_roster_contacts(username, host, roster) 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 +71,22 @@ function module.load() 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;