From 08dcb267b33994845ec7b522971407ed4201708a Mon Sep 17 00:00:00 2001 From: Benjamin Bouvier Date: Mon, 30 Jun 2025 18:34:56 +0200 Subject: [PATCH] refactor(timeline): use the `TimelineFocusData` when processing relations --- .../src/timeline/controller/metadata.rs | 17 +++++++++-------- .../src/timeline/controller/state.rs | 2 +- .../timeline/controller/state_transaction.rs | 6 +++--- 3 files changed, 13 insertions(+), 12 deletions(-) diff --git a/crates/matrix-sdk-ui/src/timeline/controller/metadata.rs b/crates/matrix-sdk-ui/src/timeline/controller/metadata.rs index 085d6f846..7f78cac5c 100644 --- a/crates/matrix-sdk-ui/src/timeline/controller/metadata.rs +++ b/crates/matrix-sdk-ui/src/timeline/controller/metadata.rs @@ -38,11 +38,12 @@ use super::{ }; use crate::{ timeline::{ - controller::TimelineFocusKind, + controller::TimelineFocusData, event_item::{ extract_bundled_edit_event_json, extract_poll_edit_content, extract_room_msg_edit_content, }, + traits::RoomDataProvider, InReplyToDetails, TimelineEventItemId, }, unable_to_decrypt_hook::UtdHookManager, @@ -311,13 +312,13 @@ impl TimelineMetadata { /// Extract the content from a remote message-like event and process its /// relations. - pub(crate) fn process_event_relations( + pub(crate) fn process_event_relations( &mut self, event: &AnySyncTimelineEvent, raw_event: &Raw, bundled_edit_encryption_info: Option>, timeline_items: &Vector>, - timeline_focus: &TimelineFocusKind, + timeline_focus: &TimelineFocusData

, ) -> (Option, Option) { if let AnySyncTimelineEvent::MessageLike(ev) = event { if let Some(content) = ev.original_content() { @@ -343,12 +344,12 @@ impl TimelineMetadata { /// (like marking responses). /// /// Returns the in-reply-to details and the thread root event ID, if any. - pub(crate) fn process_content_relations( + pub(crate) fn process_content_relations( &mut self, content: &AnyMessageLikeEventContent, remote_ctx: Option>, timeline_items: &Vector>, - timeline_focus: &TimelineFocusKind, + timeline_focus: &TimelineFocusData

, ) -> (Option, Option) { match content { AnyMessageLikeEventContent::Sticker(content) => { @@ -449,10 +450,10 @@ impl TimelineMetadata { /// Extracts the in-reply-to details and thread root from a relation, if /// available. - fn extract_reply_and_thread_root( + fn extract_reply_and_thread_root( relates_to: Option, timeline_items: &Vector>, - timeline_focus: &TimelineFocusKind, + timeline_focus: &TimelineFocusData

, ) -> (Option, Option) { let mut thread_root = None; @@ -463,7 +464,7 @@ impl TimelineMetadata { RelationWithoutReplacement::Thread(thread) => { thread_root = Some(thread.event_id); - if matches!(timeline_focus, TimelineFocusKind::Thread { .. }) + if matches!(timeline_focus, TimelineFocusData::Thread { .. }) && thread.is_falling_back { // In general, a threaded event is marked as a response to the previous message diff --git a/crates/matrix-sdk-ui/src/timeline/controller/state.rs b/crates/matrix-sdk-ui/src/timeline/controller/state.rs index 92496ab47..ec210736e 100644 --- a/crates/matrix-sdk-ui/src/timeline/controller/state.rs +++ b/crates/matrix-sdk-ui/src/timeline/controller/state.rs @@ -165,7 +165,7 @@ impl TimelineState

{ let mut date_divider_adjuster = DateDividerAdjuster::new(date_divider_mode); let (in_reply_to, thread_root) = - txn.meta.process_content_relations(&content, None, &txn.items, &txn.timeline_focus); + txn.meta.process_content_relations(&content, None, &txn.items, txn.focus); // TODO merge with other should_add, one way or another? let should_add_new_items = match &txn.timeline_focus { diff --git a/crates/matrix-sdk-ui/src/timeline/controller/state_transaction.rs b/crates/matrix-sdk-ui/src/timeline/controller/state_transaction.rs index d0283dd2f..fcfa9e1fd 100644 --- a/crates/matrix-sdk-ui/src/timeline/controller/state_transaction.rs +++ b/crates/matrix-sdk-ui/src/timeline/controller/state_transaction.rs @@ -60,9 +60,9 @@ pub(in crate::timeline) struct TimelineStateTransaction<'a, P: RoomDataProvider> previous_meta: &'a mut TimelineMetadata, /// The kind of focus of this timeline. - pub(super) timeline_focus: TimelineFocusKind, + pub timeline_focus: TimelineFocusKind, - focus: &'a TimelineFocusData

, + pub focus: &'a TimelineFocusData

, } impl<'a, P: RoomDataProvider> TimelineStateTransaction<'a, P> { @@ -630,7 +630,7 @@ impl<'a, P: RoomDataProvider> TimelineStateTransaction<'a, P> { &raw, bundled_edit_encryption_info, &self.items, - &self.timeline_focus, + self.focus, ); let should_add = self.should_add_event_item(