From b0f86d756361de0d210366126e3110b7a900444d Mon Sep 17 00:00:00 2001 From: Bahaa Naamneh Date: Mon, 29 Sep 2025 16:04:14 +0200 Subject: [PATCH 1/4] fix lazy loading and enable more timeline filtering --- .../Data/EventTimeline/Room/MXRoomEventTimeline.m | 7 ------- MatrixSDK/MXSession.m | 12 ++++++++++++ 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/MatrixSDK/Data/EventTimeline/Room/MXRoomEventTimeline.m b/MatrixSDK/Data/EventTimeline/Room/MXRoomEventTimeline.m index 300ab9934..4a0a9c740 100644 --- a/MatrixSDK/Data/EventTimeline/Room/MXRoomEventTimeline.m +++ b/MatrixSDK/Data/EventTimeline/Room/MXRoomEventTimeline.m @@ -124,13 +124,6 @@ - (instancetype)initWithRoom:(MXRoom*)theRoom initialEventId:(NSString*)initialE } _state = [[MXRoomState alloc] initWithRoomId:room.roomId andMatrixSession:room.mxSession andDirection:YES]; - - // If the event stream runs with lazy loading, the timeline must do the same - if (room.mxSession.syncWithLazyLoadOfRoomMembers) - { - _roomEventFilter = [MXRoomEventFilter new]; - _roomEventFilter.lazyLoadMembers = YES; - } } return self; } diff --git a/MatrixSDK/MXSession.m b/MatrixSDK/MXSession.m index 18550d042..7d2c13f2d 100644 --- a/MatrixSDK/MXSession.m +++ b/MatrixSDK/MXSession.m @@ -946,6 +946,18 @@ - (void)startWithSyncFilterId:(NSString *)syncFilterId onServerSyncDone:(void (^ MXLogDebug(@"[MXSession] Set syncWithLazyLoadOfRoomMembers to YES"); self->_syncWithLazyLoadOfRoomMembers = YES; } + + for (MXRoom *room in self.rooms) { + [room liveTimeline:^(id liveTimeline) { + liveTimeline.roomEventFilter = filter.room.timeline; + + // If the event stream runs with lazy loading, the timeline must do the same + if (self->_syncWithLazyLoadOfRoomMembers) + { + liveTimeline.roomEventFilter.lazyLoadMembers = YES; + } + }]; + } } failure:nil]; } From ca4408316ebc88c95a2a9c7d4c33fee4238b1b8c Mon Sep 17 00:00:00 2001 From: Bahaa Naamneh Date: Mon, 29 Sep 2025 16:04:14 +0200 Subject: [PATCH 2/4] fix lazy loading and enable more timeline filtering Signed-off-by: Bahaa Naamneh --- .../Data/EventTimeline/Room/MXRoomEventTimeline.m | 7 ------- MatrixSDK/MXSession.m | 12 ++++++++++++ 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/MatrixSDK/Data/EventTimeline/Room/MXRoomEventTimeline.m b/MatrixSDK/Data/EventTimeline/Room/MXRoomEventTimeline.m index 300ab9934..4a0a9c740 100644 --- a/MatrixSDK/Data/EventTimeline/Room/MXRoomEventTimeline.m +++ b/MatrixSDK/Data/EventTimeline/Room/MXRoomEventTimeline.m @@ -124,13 +124,6 @@ - (instancetype)initWithRoom:(MXRoom*)theRoom initialEventId:(NSString*)initialE } _state = [[MXRoomState alloc] initWithRoomId:room.roomId andMatrixSession:room.mxSession andDirection:YES]; - - // If the event stream runs with lazy loading, the timeline must do the same - if (room.mxSession.syncWithLazyLoadOfRoomMembers) - { - _roomEventFilter = [MXRoomEventFilter new]; - _roomEventFilter.lazyLoadMembers = YES; - } } return self; } diff --git a/MatrixSDK/MXSession.m b/MatrixSDK/MXSession.m index 18550d042..7d2c13f2d 100644 --- a/MatrixSDK/MXSession.m +++ b/MatrixSDK/MXSession.m @@ -946,6 +946,18 @@ - (void)startWithSyncFilterId:(NSString *)syncFilterId onServerSyncDone:(void (^ MXLogDebug(@"[MXSession] Set syncWithLazyLoadOfRoomMembers to YES"); self->_syncWithLazyLoadOfRoomMembers = YES; } + + for (MXRoom *room in self.rooms) { + [room liveTimeline:^(id liveTimeline) { + liveTimeline.roomEventFilter = filter.room.timeline; + + // If the event stream runs with lazy loading, the timeline must do the same + if (self->_syncWithLazyLoadOfRoomMembers) + { + liveTimeline.roomEventFilter.lazyLoadMembers = YES; + } + }]; + } } failure:nil]; } From 7d66cef055e845150274dd15ac77788887665cb0 Mon Sep 17 00:00:00 2001 From: Bahaa Naamneh Date: Mon, 29 Sep 2025 16:18:06 +0200 Subject: [PATCH 3/4] added changelog Signed-off-by: Bahaa Naamneh --- changelog.d/pr-1912.bugfix | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 changelog.d/pr-1912.bugfix diff --git a/changelog.d/pr-1912.bugfix b/changelog.d/pr-1912.bugfix new file mode 100644 index 000000000..a8e8690c9 --- /dev/null +++ b/changelog.d/pr-1912.bugfix @@ -0,0 +1,2 @@ +- Lazy member loading flag was not applied in timeline filter due to init order (setStore before start). +- Support for additional timeline filters. From 96309881a4cd16a070910405df88b390d3552cd0 Mon Sep 17 00:00:00 2001 From: Bahaa Naamneh Date: Tue, 30 Sep 2025 18:42:44 +0200 Subject: [PATCH 4/4] set timeline filter in initWithRoom if needed Signed-off-by: Bahaa Naamneh --- .../EventTimeline/Room/MXRoomEventTimeline.m | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/MatrixSDK/Data/EventTimeline/Room/MXRoomEventTimeline.m b/MatrixSDK/Data/EventTimeline/Room/MXRoomEventTimeline.m index 4a0a9c740..8404748bb 100644 --- a/MatrixSDK/Data/EventTimeline/Room/MXRoomEventTimeline.m +++ b/MatrixSDK/Data/EventTimeline/Room/MXRoomEventTimeline.m @@ -124,6 +124,26 @@ - (instancetype)initWithRoom:(MXRoom*)theRoom initialEventId:(NSString*)initialE } _state = [[MXRoomState alloc] initWithRoomId:room.roomId andMatrixSession:room.mxSession andDirection:YES]; + + // During startup, if a cached filterId exists, this code will execute to fetch and create a filter. + // However, if a filter is explicitly provided to start(), that filter will overwrite the one allocated here. + // Additionally, this code runs when loadRoom() is called after start() to ensure the filter is always initialized. + if (!_roomEventFilter && room.mxSession.syncFilterId) + { + [room.mxSession filterWithFilterId:room.mxSession.syncFilterId success:^(MXFilterJSONModel *filter) { + _roomEventFilter = filter.room.timeline; + + // If the event stream runs with lazy loading, the timeline must do the same + if (filter.room.state.lazyLoadMembers) + { + if (!_roomEventFilter) + { + _roomEventFilter = [MXRoomEventFilter new]; + } + _roomEventFilter.lazyLoadMembers = YES; + } + } failure:nil]; + } } return self; }