From e066f59fc1c1ea0dce07fc90651969335171604a Mon Sep 17 00:00:00 2001 From: Hans Svensson Date: Fri, 27 Mar 2020 09:25:09 +0100 Subject: [PATCH] Don't unsubscribe all rooms when leaving a room --- apps/roster/src/roster.erl | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/apps/roster/src/roster.erl b/apps/roster/src/roster.erl index 86670d30a..3de088001 100644 --- a/apps/roster/src/roster.erl +++ b/apps/roster/src/roster.erl @@ -1138,11 +1138,14 @@ update_rooms(PhoneId, R) -> update_rooms(roster_id(PhoneId), R). remove_rooms(<<"emqttd_", _/binary>> = ClientId, Rooms) -> remove_rooms(phone_id(ClientId), Rooms); -remove_rooms(#'Roster'{id = RosterId, roomlist = StrdRooms, phone = Phone} = Roster, Rooms) -> - unsubscribe_room(phone_id(Phone, RosterId)), - kvs:put(Roster2 = Roster#'Roster'{roomlist = - [R || #'Room'{id = Room} = R <- StrdRooms, not lists:member(Room, Rooms)]}), - [unsubscribe_muc(Roster2, #muc{name = Room}) || Room <- Rooms], ok; +remove_rooms(#'Roster'{id = RosterId, roomlist = RoomList0, phone = Phone} = Roster0, Rooms) -> + PhoneId = phone_id(Phone, RosterId), + RoomList = [R || #'Room'{id = Room} = R <- RoomList0, not lists:member(Room, Rooms)], + Roster = Roster0#'Roster'{roomlist = RoomList}, + kvs:put(Roster), + [unsubscribe_room(muc_member(PhoneId, Room)) || Room <- Rooms], + [unsubscribe_muc(Roster, #muc{name = Room}) || Room <- Rooms], + ok; remove_rooms(RosterId, Rooms) when is_integer(RosterId) -> case kvs:get('Roster', RosterId) of {error, _} -> {error, roster_not_found}; -- GitLab