Mercurial > prosody-modules
comparison mod_groups_muc_bookmarks/mod_groups_muc_bookmarks.lua @ 5823:220502eb05aa
mod_groups_muc_bookmarks: Sync bookmarks when user is added/removed to/from multi-MUC group
This was overlooked when multi-MUC support was first implemented.
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Fri, 12 Jan 2024 15:40:23 +0000 |
parents | d5ff386dc97f |
children | 791aa8072f58 |
comparison
equal
deleted
inserted
replaced
5822:fe3bde6ef95a | 5823:220502eb05aa |
---|---|
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 |