From 1c9aa7c9072ac1cbd00a4dcd9902f7db3b526bb0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A9vin=20Commaille?= Date: Sun, 19 Feb 2023 10:47:38 +0100 Subject: [PATCH] refactor(sdk): Add private method to get the fully-read event for a timeline. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Kévin Commaille --- .../matrix-sdk/src/room/timeline/builder.rs | 20 ++------------- crates/matrix-sdk/src/room/timeline/inner.rs | 25 +++++++++++++++++++ 2 files changed, 27 insertions(+), 18 deletions(-) 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,