# HG changeset patch # User Matthew Wild # Date 1705074023 0 # Node ID 220502eb05aacbf30f5eabd6c6cc8a8f189df882 # Parent fe3bde6ef95aaa95efa1eadda91db69b68e52118 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. diff -r fe3bde6ef95a -r 220502eb05aa mod_groups_muc_bookmarks/mod_groups_muc_bookmarks.lua --- a/mod_groups_muc_bookmarks/mod_groups_muc_bookmarks.lua Fri Jan 12 15:38:56 2024 +0000 +++ b/mod_groups_muc_bookmarks/mod_groups_muc_bookmarks.lua Fri Jan 12 15:40:23 2024 +0000 @@ -70,30 +70,43 @@ update_bookmark(jid, pep_service, room, found) end -local function remove_bookmark(jid, room, autojoin, name) +local function remove_bookmark(jid, room) local pep_service = mod_pep.get_pep_service(jid_split(jid)) return pep_service:retract(XMLNS_BM2, jid, room, st.stanza("retract", { id = room })); end local function handle_user_added(event) - if not event.group_info.muc_jid then - module:log("debug", "ignoring user added event on group %s because it has no MUC", event.id) - return + local group_info = event.group_info; + + local jid = event.user .. "@" .. event.host + + if group_info.muc_jid then + inject_bookmark(jid, group_info.muc_jid, true, group_info.name); + elseif group_info.mucs then + for _, chat in ipairs(mod_groups.get_group_chats(event.id)) do + inject_bookmark(jid, chat.jid, true, chat.name); + end + else + module:log("debug", "ignoring user added event on group %s because it has no MUCs", event.id) end - local jid = event.user .. "@" .. event.host - inject_bookmark(jid, event.group_info.muc_jid, true, event.group_info.name) end local function handle_user_removed(event) - if not event.group_info.muc_jid then - module:log("debug", "ignoring user removed event on group %s because it has no MUC", event.id) - return - end -- Removing the bookmark is fine as the user just lost any privilege to -- be in the MUC (as group MUCs are members-only). + local group_info = event.group_info; local jid = event.user .. "@" .. event.host - remove_bookmark(jid, event.group_info.muc_jid, true, event.group_info.name) + + if group_info.muc_jid then + remove_bookmark(jid, event.group_info.muc_jid); + elseif group_info.mucs then + for _, muc_jid in ipairs(group_info.mucs) do + remove_bookmark(jid, muc_jid); + end + else + module:log("debug", "ignoring user removed event on group %s because it has no MUC", event.id) + end end module:hook("group-user-added", handle_user_added)