68 end |
68 end |
69 |
69 |
70 update_bookmark(jid, pep_service, room, found) |
70 update_bookmark(jid, pep_service, room, found) |
71 end |
71 end |
72 |
72 |
73 local function remove_bookmark(jid, room, autojoin, name) |
73 local function remove_bookmark(jid, room) |
74 local pep_service = mod_pep.get_pep_service(jid_split(jid)) |
74 local pep_service = mod_pep.get_pep_service(jid_split(jid)) |
75 |
75 |
76 return pep_service:retract(XMLNS_BM2, jid, room, st.stanza("retract", { id = room })); |
76 return pep_service:retract(XMLNS_BM2, jid, room, st.stanza("retract", { id = room })); |
77 end |
77 end |
78 |
78 |
79 local function handle_user_added(event) |
79 local function handle_user_added(event) |
80 if not event.group_info.muc_jid then |
80 local group_info = event.group_info; |
81 module:log("debug", "ignoring user added event on group %s because it has no MUC", event.id) |
81 |
82 return |
82 local jid = event.user .. "@" .. event.host |
|
83 |
|
84 if group_info.muc_jid then |
|
85 inject_bookmark(jid, group_info.muc_jid, true, group_info.name); |
|
86 elseif group_info.mucs then |
|
87 for _, chat in ipairs(mod_groups.get_group_chats(event.id)) do |
|
88 inject_bookmark(jid, chat.jid, true, chat.name); |
|
89 end |
|
90 else |
|
91 module:log("debug", "ignoring user added event on group %s because it has no MUCs", event.id) |
83 end |
92 end |
84 local jid = event.user .. "@" .. event.host |
|
85 inject_bookmark(jid, event.group_info.muc_jid, true, event.group_info.name) |
|
86 end |
93 end |
87 |
94 |
88 local function handle_user_removed(event) |
95 local function handle_user_removed(event) |
89 if not event.group_info.muc_jid then |
|
90 module:log("debug", "ignoring user removed event on group %s because it has no MUC", event.id) |
|
91 return |
|
92 end |
|
93 -- Removing the bookmark is fine as the user just lost any privilege to |
96 -- Removing the bookmark is fine as the user just lost any privilege to |
94 -- be in the MUC (as group MUCs are members-only). |
97 -- be in the MUC (as group MUCs are members-only). |
|
98 local group_info = event.group_info; |
95 local jid = event.user .. "@" .. event.host |
99 local jid = event.user .. "@" .. event.host |
96 remove_bookmark(jid, event.group_info.muc_jid, true, event.group_info.name) |
100 |
|
101 if group_info.muc_jid then |
|
102 remove_bookmark(jid, event.group_info.muc_jid); |
|
103 elseif group_info.mucs then |
|
104 for _, muc_jid in ipairs(group_info.mucs) do |
|
105 remove_bookmark(jid, muc_jid); |
|
106 end |
|
107 else |
|
108 module:log("debug", "ignoring user removed event on group %s because it has no MUC", event.id) |
|
109 end |
97 end |
110 end |
98 |
111 |
99 module:hook("group-user-added", handle_user_added) |
112 module:hook("group-user-added", handle_user_added) |
100 module:hook("group-user-removed", handle_user_removed) |
113 module:hook("group-user-removed", handle_user_removed) |
101 |
114 |