diff --git a/crates/matrix-sdk/src/room/timeline/builder.rs b/crates/matrix-sdk/src/room/timeline/builder.rs index 84cbd5f7f..6e57190ee 100644 --- a/crates/matrix-sdk/src/room/timeline/builder.rs +++ b/crates/matrix-sdk/src/room/timeline/builder.rs @@ -20,10 +20,7 @@ use matrix_sdk_base::{ locks::Mutex, }; use ruma::{ - events::{ - fully_read::FullyReadEventContent, - receipt::{ReceiptThread, ReceiptType, SyncReceiptEvent}, - }, + events::receipt::{ReceiptThread, ReceiptType, SyncReceiptEvent}, push::Action, }; use tracing::error; @@ -155,20 +152,7 @@ impl TimelineBuilder { ]; if track_read_marker_and_receipts { - match room.account_data_static::().await { - Ok(Some(fully_read)) => match fully_read.deserialize() { - Ok(fully_read) => { - inner.set_fully_read_event(fully_read.content.event_id).await; - } - Err(e) => { - error!("Failed to deserialize fully-read account data: {e}"); - } - }, - Err(e) => { - error!("Failed to get fully-read account data from the store: {e}"); - } - _ => {} - } + inner.load_fully_read_event().await; let fully_read_handle = room.add_event_handler({ let inner = inner.clone(); diff --git a/crates/matrix-sdk/src/room/timeline/inner.rs b/crates/matrix-sdk/src/room/timeline/inner.rs index 2c961b333..68503a45f 100644 --- a/crates/matrix-sdk/src/room/timeline/inner.rs +++ b/crates/matrix-sdk/src/room/timeline/inner.rs @@ -504,6 +504,31 @@ impl TimelineInner { &self.room_data_provider } + /// Get the current fully-read event. + pub(super) async fn fully_read_event(&self) -> Option { + match self.room().account_data_static().await { + Ok(Some(fully_read)) => match fully_read.deserialize() { + Ok(fully_read) => Some(fully_read), + Err(e) => { + error!("Failed to deserialize fully-read account data: {e}"); + None + } + }, + Err(e) => { + error!("Failed to get fully-read account data from the store: {e}"); + None + } + _ => None, + } + } + + /// Load the current fully-read event in this inner timeline. + pub(super) async fn load_fully_read_event(&self) { + if let Some(fully_read) = self.fully_read_event().await { + self.set_fully_read_event(fully_read.content.event_id).await; + } + } + pub(super) async fn fetch_in_reply_to_details( &self, event_id: &EventId,