refactor: Extract forwarder data fetcing to a helper function.

This commit is contained in:
Skye Elliot
2026-01-06 14:28:44 +00:00
parent 6fdd83478a
commit 503234976f
@@ -227,22 +227,14 @@ impl<'a, P: RoomDataProvider> TimelineStateTransaction<'a, P> {
let encryption_info = event.kind.encryption_info().cloned();
let sender_profile = room_data_provider.profile_from_user_id(&sender).await;
let forwarder = encryption_info
.as_ref()
.and_then(|info| info.forwarder.as_ref())
.map(|info| info.user_id.clone());
let forwarder_profile = if let Some(ref forwarder_id) = forwarder {
Some(room_data_provider.profile_from_user_id(forwarder_id).await)
} else {
None
};
let (forwarder, forwarder_profile) =
get_forwarder_info(&event, room_data_provider).await;
let mut ctx = TimelineEventContext {
sender,
sender_profile,
forwarder,
forwarder_profile: forwarder_profile.flatten(),
forwarder_profile,
timestamp,
// These are not used when handling an aggregation.
read_receipts: Default::default(),
@@ -694,9 +686,9 @@ impl<'a, P: RoomDataProvider> TimelineStateTransaction<'a, P> {
let is_highlighted =
event.push_actions().is_some_and(|actions| actions.iter().any(Action::is_highlight));
let thread_summary = if let ThreadSummaryStatus::Some(summary) = event.thread_summary {
let latest_reply_item = if let Some(latest_reply) = summary.latest_reply {
self.fetch_latest_thread_reply(&latest_reply, room_data_provider).await
let thread_summary = if let ThreadSummaryStatus::Some(ref summary) = event.thread_summary {
let latest_reply_item = if let Some(ref latest_reply) = summary.latest_reply {
self.fetch_latest_thread_reply(latest_reply, room_data_provider).await
} else {
None
};
@@ -714,17 +706,7 @@ impl<'a, P: RoomDataProvider> TimelineStateTransaction<'a, P> {
map.get(&UnsignedEventLocation::RelationsReplace)?.encryption_info().cloned()
});
let forwarder = event
.kind
.encryption_info()
.and_then(|info| info.forwarder.as_ref())
.map(|info| info.user_id.clone());
let forwarder_profile = if let Some(ref forwarder_id) = forwarder {
Some(room_data_provider.profile_from_user_id(forwarder_id).await)
} else {
None
};
let (forwarder, forwarder_profile) = get_forwarder_info(&event, room_data_provider).await;
let (raw, utd_info) = match event.kind {
TimelineEventKind::UnableToDecrypt { utd_info, event } => (event, Some(utd_info)),
@@ -821,7 +803,7 @@ impl<'a, P: RoomDataProvider> TimelineStateTransaction<'a, P> {
sender,
sender_profile,
forwarder,
forwarder_profile: forwarder_profile.flatten(),
forwarder_profile,
timestamp,
read_receipts: if settings.track_read_receipts.is_enabled()
&& should_add
@@ -1057,3 +1039,34 @@ impl<'a, P: RoomDataProvider> TimelineStateTransaction<'a, P> {
}
}
}
/// Retrieves the forwarder information for a given timeline event.
///
/// # Parameters
///
/// - `event`: The timeline event to extract forwarder information from.
/// - `room_data_provider`: A reference to the room data provider.
///
/// # Returns
///
/// A tuple containing:
/// - `Option<OwnedUserId>`: The user ID of the forwarder, if available.
/// - `Option<Profile>`: The profile of the forwarder, if available.
async fn get_forwarder_info<P: RoomDataProvider>(
event: &TimelineEvent,
room_data_provider: &P,
) -> (Option<OwnedUserId>, Option<Profile>) {
let forwarder = event
.kind
.encryption_info()
.and_then(|info| info.forwarder.as_ref())
.map(|info| info.user_id.clone());
let forwarder_profile = if let Some(ref forwarder_id) = forwarder {
Some(room_data_provider.profile_from_user_id(forwarder_id).await)
} else {
None
};
(forwarder, forwarder_profile.flatten())
}