Change ListNotificationState to store room ids (#9518)

* Changed ListNotificationState to store room ids

ListNotificationState stores a reference to a rooms array which is later
used for comparing the stored array with new arrays. However, the
comparison may fail since the stored array can be changed outside the
class. This PR proposes to instead store only the room ids, which
hopefully allows to avoid the issue by copying the room ids into
a new array, while still being performant.

Signed-off-by: Arne Wilken arnepokemon@yahoo.de

* Change ListNotificationState to shallow clone rooms

Instead of using room ids like in the previous commit,
shallow clone the rooms array instead.

Signed-off-by: Arne Wilken arnepokemon@yahoo.de
Co-authored-by: Robin <robin@robin.town>
This commit is contained in:
Arne Wilken 2022-11-01 21:56:40 +01:00 committed by GitHub
parent 89a1eaca66
commit 1e65dcd0aa
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -45,7 +45,7 @@ export class ListNotificationState extends NotificationState {
const oldRooms = this.rooms; const oldRooms = this.rooms;
const diff = arrayDiff(oldRooms, rooms); const diff = arrayDiff(oldRooms, rooms);
this.rooms = rooms; this.rooms = [...rooms];
for (const oldRoom of diff.removed) { for (const oldRoom of diff.removed) {
const state = this.states[oldRoom.roomId]; const state = this.states[oldRoom.roomId];
if (!state) continue; // We likely just didn't have a badge (race condition) if (!state) continue; // We likely just didn't have a badge (race condition)