From f6fa9df2c544e55eb9be73186ba371ff58199c4d Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Mon, 4 Mar 2024 19:31:35 +0100 Subject: [PATCH] fix: archived room state store logic This was implicitly relying to the timestamp of state events getting compared in the setState function. Fix this by using the helper functions already used for invite and join rooms. --- lib/src/client.dart | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/lib/src/client.dart b/lib/src/client.dart index e84dd1c4..12004caa 100644 --- a/lib/src/client.dart +++ b/lib/src/client.dart @@ -1071,19 +1071,19 @@ class Client extends MatrixApi { [])); archivedRoom.prev_batch = update.timeline?.prevBatch; - update.state?.forEach((event) { - archivedRoom.setState(Event.fromMatrixEvent( - event, - archivedRoom, - )); - }); - update.timeline?.events?.forEach((event) { - archivedRoom.setState(Event.fromMatrixEvent( - event, - archivedRoom, - )); - }); + final stateEvents = roomUpdate.state; + if (stateEvents != null) { + await _handleRoomEvents(archivedRoom, stateEvents, EventUpdateType.state, + store: false); + } + + final timelineEvents = roomUpdate.timeline?.events; + if (timelineEvents != null) { + await _handleRoomEvents(archivedRoom, timelineEvents.reversed.toList(), + EventUpdateType.timeline, + store: false); + } for (var i = 0; i < timeline.events.length; i++) { // Try to decrypt encrypted events but don't update the database.