Mercurial > prosody-modules
changeset 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 | fe3bde6ef95a |
children | f1e816df1f73 |
files | mod_groups_muc_bookmarks/mod_groups_muc_bookmarks.lua |
diffstat | 1 files changed, 24 insertions(+), 11 deletions(-) [+] |
line wrap: on
line diff
--- 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)