Skip to content

Commit fe11fda

Browse files
committed
refactor(timeline): extract the method to fetch a latest thread reply as an item
Do the ~~~loco~~ code motion 🎶
1 parent 281faa7 commit fe11fda

File tree

1 file changed

+37
-32
lines changed

1 file changed

+37
-32
lines changed

crates/matrix-sdk-ui/src/timeline/controller/state_transaction.rs

Lines changed: 37 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,11 @@ use std::collections::{HashMap, HashSet};
1616

1717
use eyeball_im::VectorDiff;
1818
use itertools::Itertools as _;
19-
use matrix_sdk::deserialized_responses::{TimelineEvent, TimelineEventKind, UnsignedEventLocation};
19+
use matrix_sdk::deserialized_responses::{
20+
ThreadSummaryStatus, TimelineEvent, TimelineEventKind, UnsignedEventLocation,
21+
};
2022
use ruma::{
21-
events::AnySyncTimelineEvent, push::Action, serde::Raw, MilliSecondsSinceUnixEpoch,
23+
events::AnySyncTimelineEvent, push::Action, serde::Raw, EventId, MilliSecondsSinceUnixEpoch,
2224
OwnedEventId, OwnedTransactionId, OwnedUserId, UserId,
2325
};
2426
use tracing::{debug, instrument, warn};
@@ -544,6 +546,36 @@ impl<'a> TimelineStateTransaction<'a> {
544546
}
545547
}
546548

549+
// Attempt to load a thread's latest reply as an embedded timeline item, either
550+
// using the event cache or the storage.
551+
async fn fetch_latest_thread_reply(
552+
&mut self,
553+
event_id: &EventId,
554+
room_data_provider: &impl RoomDataProvider,
555+
) -> Option<Box<EmbeddedEvent>> {
556+
let event = room_data_provider
557+
.load_event(event_id)
558+
.await
559+
.inspect_err(|err| {
560+
warn!("Failed to load thread latest event: {err}");
561+
})
562+
.ok()?;
563+
564+
EmbeddedEvent::try_from_timeline_event(
565+
event,
566+
room_data_provider,
567+
&self.items,
568+
&mut self.meta,
569+
)
570+
.await
571+
.inspect_err(|err| {
572+
warn!("Failed to extract thread latest event into a timeline item content: {err}");
573+
})
574+
.ok()
575+
.flatten()
576+
.map(Box::new)
577+
}
578+
547579
/// Handle a remote event.
548580
///
549581
/// Returns whether an item has been removed from the timeline.
@@ -557,39 +589,12 @@ impl<'a> TimelineStateTransaction<'a> {
557589
) -> RemovedItem {
558590
let TimelineEvent { push_actions, kind, thread_summary } = event;
559591

560-
let thread_summary = if let Some(summary) = thread_summary.summary() {
561-
let latest_reply_item = if let Some(event_id) = summary.latest_reply.as_ref() {
562-
// Attempt to load the timeline event, either from the event cache or the
563-
// storage.
564-
let event = room_data_provider
565-
.load_event(event_id)
566-
.await
567-
.inspect_err(|err| {
568-
warn!("Failed to load thread latest event: {err}");
569-
})
570-
.ok();
571-
572-
if let Some(event) = event {
573-
EmbeddedEvent::try_from_timeline_event(
574-
event,
575-
room_data_provider,
576-
&self.items,
577-
&mut self.meta,
578-
)
579-
.await
580-
.inspect_err(|err| {
581-
warn!("Failed to extract thread event into a timeline item content: {err}");
582-
})
583-
.ok()
584-
.flatten()
585-
.map(Box::new)
586-
} else {
587-
None
588-
}
592+
let thread_summary = if let ThreadSummaryStatus::Some(summary) = thread_summary {
593+
let latest_reply_item = if let Some(latest_reply) = summary.latest_reply {
594+
self.fetch_latest_thread_reply(&latest_reply, room_data_provider).await
589595
} else {
590596
None
591597
};
592-
593598
Some(ThreadSummary {
594599
latest_event: TimelineDetails::from_initial_value(latest_reply_item),
595600
num_replies: summary.num_replies,

0 commit comments

Comments
 (0)