From a855f1df2cdb7ad1023b9b9e8921dae51e29ee9d Mon Sep 17 00:00:00 2001 From: Benjamin Bouvier Date: Wed, 4 Jun 2025 13:57:08 +0200 Subject: [PATCH] fix(timeline): add the timeline start of the current pagination state too --- .../matrix-sdk-ui/src/timeline/pagination.rs | 22 +++++++++++-------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/crates/matrix-sdk-ui/src/timeline/pagination.rs b/crates/matrix-sdk-ui/src/timeline/pagination.rs index 6eb59d703..85c382d95 100644 --- a/crates/matrix-sdk-ui/src/timeline/pagination.rs +++ b/crates/matrix-sdk-ui/src/timeline/pagination.rs @@ -20,6 +20,7 @@ use matrix_sdk::event_cache::{self, EventCacheError, RoomPaginationStatus}; use tracing::{instrument, warn}; use super::Error; +use crate::timeline::TimelineController; impl super::Timeline { /// Add more events to the start of the timeline. @@ -112,7 +113,18 @@ impl super::Timeline { let mut status = pagination.status(); + let insert_timeline_start_if_missing = + async |controller: &TimelineController, state| match state { + RoomPaginationStatus::Idle { hit_timeline_start } => { + if hit_timeline_start { + controller.insert_timeline_start_if_missing().await; + } + } + RoomPaginationStatus::Paginating => {} + }; + let current_value = status.next_now(); + insert_timeline_start_if_missing(&self.controller, current_value).await; let controller = self.controller.clone(); let stream = Box::pin(stream! { @@ -121,15 +133,7 @@ impl super::Timeline { pin_mut!(status_stream); while let Some(state) = status_stream.next().await { - match state { - RoomPaginationStatus::Idle { hit_timeline_start } => { - if hit_timeline_start { - controller.insert_timeline_start_if_missing().await; - } - } - RoomPaginationStatus::Paginating => {} - } - + insert_timeline_start_if_missing(&controller, state).await; yield state; } });