diff --git a/apps/roster/src/roster.erl b/apps/roster/src/roster.erl index 86670d30a088e4c37e84eee416bac2aa6991b2c5..3de088001dc4b0ca88d4e47d9af71445dd4f426e 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};