From e5243e32be0aeaeb58427ccabc07f146e1db234e Mon Sep 17 00:00:00 2001 From: Stefan Ceriu Date: Thu, 27 Mar 2025 10:37:07 +0200 Subject: [PATCH] chore(ui): simplify the `fetch_replied_to_event` method --- .../src/timeline/controller/mod.rs | 42 ++++++------------- .../timeline/event_item/content/aggregated.rs | 4 ++ 2 files changed, 16 insertions(+), 30 deletions(-) diff --git a/crates/matrix-sdk-ui/src/timeline/controller/mod.rs b/crates/matrix-sdk-ui/src/timeline/controller/mod.rs index 68b4897de..f17c7d003 100644 --- a/crates/matrix-sdk-ui/src/timeline/controller/mod.rs +++ b/crates/matrix-sdk-ui/src/timeline/controller/mod.rs @@ -69,10 +69,9 @@ use super::{ item::TimelineUniqueId, subscriber::TimelineSubscriber, traits::{Decryptor, RoomDataProvider}, - DateDividerMode, Error, EventSendState, EventTimelineItem, InReplyToDetails, Message, - PaginationError, Profile, ReactionsByKeyBySender, RepliedToEvent, TimelineDetails, - TimelineEventItemId, TimelineFocus, TimelineItem, TimelineItemContent, TimelineItemKind, - VirtualTimelineItem, + DateDividerMode, Error, EventSendState, EventTimelineItem, InReplyToDetails, PaginationError, + Profile, RepliedToEvent, TimelineDetails, TimelineEventItemId, TimelineFocus, TimelineItem, + TimelineItemContent, TimelineItemKind, VirtualTimelineItem, }; use crate::{ timeline::{ @@ -1344,17 +1343,11 @@ impl TimelineController { .ok_or(Error::EventNotInTimeline(TimelineEventItemId::EventId(event_id.to_owned())))? .clone(); - let TimelineItemContent::Aggregated(AggregatedTimelineItemContent { - kind: AggregatedTimelineItemContentKind::Message(message), - reactions, - thread_root, - in_reply_to, - }) = item.content().clone() - else { + let TimelineItemContent::Aggregated(aggregated) = item.content().clone() else { debug!("Event is not a message"); return Ok(()); }; - let Some(in_reply_to) = in_reply_to else { + let Some(in_reply_to) = aggregated.in_reply_to.clone() else { debug!("Event is not a reply"); return Ok(()); }; @@ -1374,9 +1367,7 @@ impl TimelineController { index, &item, internal_id, - &message, - &reactions, - &thread_root, + &aggregated, &in_reply_to.event_id, self.room(), ) @@ -1523,15 +1514,12 @@ impl TimelineController { } } -#[allow(clippy::too_many_arguments)] async fn fetch_replied_to_event( mut state: RwLockWriteGuard<'_, TimelineState>, index: usize, item: &EventTimelineItem, internal_id: TimelineUniqueId, - message: &Message, - reactions: &ReactionsByKeyBySender, - thread_root: &Option, + aggregated: &AggregatedTimelineItemContent, in_reply_to: &EventId, room: &Room, ) -> Result>, Error> { @@ -1544,18 +1532,12 @@ async fn fetch_replied_to_event( // Replace the item with a new timeline item that has the fetching status of the // replied-to event to pending. trace!("Setting in-reply-to details to pending"); - let in_reply_to_details = Some(InReplyToDetails { - event_id: in_reply_to.to_owned(), - event: TimelineDetails::Pending, - }); + let in_reply_to_details = + InReplyToDetails { event_id: in_reply_to.to_owned(), event: TimelineDetails::Pending }; - let event_item = - item.with_content(TimelineItemContent::Aggregated(AggregatedTimelineItemContent { - kind: AggregatedTimelineItemContentKind::Message(message.clone()), - reactions: reactions.clone(), - thread_root: thread_root.clone(), - in_reply_to: in_reply_to_details, - })); + let event_item = item.with_content(TimelineItemContent::Aggregated( + aggregated.with_in_reply_to(in_reply_to_details), + )); let new_timeline_item = TimelineItem::new(event_item, internal_id); state.items.replace(index, new_timeline_item); diff --git a/crates/matrix-sdk-ui/src/timeline/event_item/content/aggregated.rs b/crates/matrix-sdk-ui/src/timeline/event_item/content/aggregated.rs index a4aaec35f..b2d933f44 100644 --- a/crates/matrix-sdk-ui/src/timeline/event_item/content/aggregated.rs +++ b/crates/matrix-sdk-ui/src/timeline/event_item/content/aggregated.rs @@ -56,4 +56,8 @@ impl AggregatedTimelineItemContent { pub fn is_threaded(&self) -> bool { self.thread_root.is_some() } + + pub fn with_in_reply_to(&self, in_reply_to: InReplyToDetails) -> Self { + Self { in_reply_to: Some(in_reply_to), ..self.clone() } + } }