Comparison

plugins/mod_groups.lua @ 2914:9f6fec37d3e2

Merge 0.7->trunk
author Matthew Wild <mwild1@gmail.com>
date Mon, 22 Mar 2010 14:38:01 +0000
parent 2913:3d4e814cadfa
child 2925:692b3c6c5bd2
comparison
equal deleted inserted replaced
2907:767864297afe 2914:9f6fec37d3e2
5 -- This project is MIT/X11 licensed. Please see the 5 -- This project is MIT/X11 licensed. Please see the
6 -- COPYING file in the source package for more information. 6 -- COPYING file in the source package for more information.
7 -- 7 --
8 8
9 9
10 local groups = { default = {} }; 10 local groups;
11 local members = { [false] = {} }; 11 local members;
12 12
13 local groups_file; 13 local groups_file;
14 14
15 local jid, datamanager = require "util.jid", require "util.datamanager"; 15 local jid, datamanager = require "util.jid", require "util.datamanager";
16 local jid_bare, jid_prep = jid.bare, jid.prep; 16 local jid_bare, jid_prep = jid.bare, jid.prep;
18 local module_host = module:get_host(); 18 local module_host = module:get_host();
19 19
20 function inject_roster_contacts(username, host, roster) 20 function inject_roster_contacts(username, host, roster)
21 module:log("warn", "Injecting group members to roster"); 21 module:log("warn", "Injecting group members to roster");
22 local bare_jid = username.."@"..host; 22 local bare_jid = username.."@"..host;
23 if not members[bare_jid] then return; end -- Not a member of any groups 23 if not members[bare_jid] and not members[false] then return; end -- Not a member of any groups
24 24
25 local function import_jids_to_roster(group_name) 25 local function import_jids_to_roster(group_name)
26 for jid in pairs(groups[group_name]) do 26 for jid in pairs(groups[group_name]) do
27 -- Add them to roster 27 -- Add them to roster
28 --module:log("debug", "processing jid %s in group %s", tostring(jid), tostring(group_name)); 28 --module:log("debug", "processing jid %s in group %s", tostring(jid), tostring(group_name));
37 end 37 end
38 end 38 end
39 end 39 end
40 40
41 -- Find groups this JID is a member of 41 -- Find groups this JID is a member of
42 for _, group_name in ipairs(members[bare_jid]) do 42 if members[bare_jid] then
43 import_jids_to_roster(group_name); 43 for _, group_name in ipairs(members[bare_jid]) do
44 module:log("debug", "Importing group %s", group_name);
45 import_jids_to_roster(group_name);
46 end
44 end 47 end
45 48
46 -- Import public groups 49 -- Import public groups
47 for _, group_name in ipairs(members[false]) do 50 if members[false] then
48 import_jids_to_roster(group_name); 51 for _, group_name in ipairs(members[false]) do
52 module:log("debug", "Importing group %s", group_name);
53 import_jids_to_roster(group_name);
54 end
55 end
56
57 if roster[false] then
58 roster[false].version = true;
49 end 59 end
50 end 60 end
51 61
52 function remove_virtual_contacts(username, host, datastore, data) 62 function remove_virtual_contacts(username, host, datastore, data)
53 if host == module_host and datastore == "roster" then 63 if host == module_host and datastore == "roster" then
55 for jid, contact in pairs(data) do 65 for jid, contact in pairs(data) do
56 if contact.persist ~= false then 66 if contact.persist ~= false then
57 new_roster[jid] = contact; 67 new_roster[jid] = contact;
58 end 68 end
59 end 69 end
70 new_roster[false].version = nil; -- Version is void
60 return username, host, datastore, new_roster; 71 return username, host, datastore, new_roster;
61 end 72 end
62 73
63 return username, host, datastore, data; 74 return username, host, datastore, data;
64 end 75 end
69 80
70 module:hook("roster-load", inject_roster_contacts); 81 module:hook("roster-load", inject_roster_contacts);
71 datamanager.add_callback(remove_virtual_contacts); 82 datamanager.add_callback(remove_virtual_contacts);
72 83
73 groups = { default = {} }; 84 groups = { default = {} };
74 members = { [false] = {} }; 85 members = { };
75 local curr_group = "default"; 86 local curr_group = "default";
76 for line in io.lines(groups_file) do 87 for line in io.lines(groups_file) do
77 if line:match("^%s*%[.-%]%s*$") then 88 if line:match("^%s*%[.-%]%s*$") then
78 curr_group = line:match("^%s*%[(.-)%]%s*$"); 89 curr_group = line:match("^%s*%[(.-)%]%s*$");
79 if curr_group:match("^%+") then 90 if curr_group:match("^%+") then
80 curr_group = curr_group:gsub("^%+", ""); 91 curr_group = curr_group:gsub("^%+", "");
92 if not members[false] then
93 members[false] = {};
94 end
81 members[false][#members[false]+1] = curr_group; -- Is a public group 95 members[false][#members[false]+1] = curr_group; -- Is a public group
82 end 96 end
83 module:log("debug", "New group: %s", tostring(curr_group)); 97 module:log("debug", "New group: %s", tostring(curr_group));
84 groups[curr_group] = groups[curr_group] or {}; 98 groups[curr_group] = groups[curr_group] or {};
85 else 99 else
86 -- Add JID 100 -- Add JID
87 local jid = jid_prep(line); 101 local jid = jid_prep(line:match("%S+"));
88 if jid then 102 if jid then
89 module:log("debug", "New member of %s: %s", tostring(curr_group), tostring(jid)); 103 module:log("debug", "New member of %s: %s", tostring(curr_group), tostring(jid));
90 groups[curr_group][jid] = true; 104 groups[curr_group][jid] = true;
91 members[jid] = members[jid] or {}; 105 members[jid] = members[jid] or {};
92 members[jid][#members[jid]+1] = curr_group; 106 members[jid][#members[jid]+1] = curr_group;