Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -449,9 +449,12 @@ impl ReadReceiptTimelineUpdate {
// Don't iterate over all items if the `old_item_pos` is known: the `item_pos`
// for the new item is necessarily _after_ the old item.
.skip_while(|(nth, _)| *nth < old_item_pos)
.filter_map(|(nth, item)| Some((nth, item.as_event()?)))
.find_map(|(nth, event_item)| {
(event_item.event_id() == Some(&event_id)).then_some(nth)
.find_map(|(nth, item)| {
if let Some(event_item) = item.as_event() {
(event_item.event_id() == Some(&event_id)).then_some(nth)
} else {
None
}
})
});

Expand Down
1 change: 1 addition & 0 deletions crates/matrix-sdk-ui/src/timeline/controller/state.rs
Original file line number Diff line number Diff line change
Expand Up @@ -230,6 +230,7 @@ impl<P: RoomDataProvider> TimelineState<P> {
room_data_provider,
settings,
&mut date_divider_adjuster,
&mut Default::default(),
)
.await;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ use super::{
metadata::EventMeta,
};
use crate::timeline::{
EmbeddedEvent, ThreadSummary, TimelineDetails, VirtualTimelineItem,
EmbeddedEvent, Profile, ThreadSummary, TimelineDetails, VirtualTimelineItem,
controller::TimelineFocusKind,
event_handler::{FailedToParseEvent, RemovedItem, TimelineAction},
};
Expand Down Expand Up @@ -93,6 +93,8 @@ impl<'a, P: RoomDataProvider> TimelineStateTransaction<'a, P> {
let mut date_divider_adjuster =
DateDividerAdjuster::new(settings.date_divider_mode.clone());

let mut cached_profiles: HashMap<OwnedUserId, Option<Profile>> = HashMap::new();

for diff in diffs {
match diff {
VectorDiff::Append { values: events } => {
Expand All @@ -103,6 +105,7 @@ impl<'a, P: RoomDataProvider> TimelineStateTransaction<'a, P> {
room_data_provider,
settings,
&mut date_divider_adjuster,
&mut cached_profiles,
)
.await;
}
Expand All @@ -115,6 +118,7 @@ impl<'a, P: RoomDataProvider> TimelineStateTransaction<'a, P> {
room_data_provider,
settings,
&mut date_divider_adjuster,
&mut cached_profiles,
)
.await;
}
Expand All @@ -126,6 +130,7 @@ impl<'a, P: RoomDataProvider> TimelineStateTransaction<'a, P> {
room_data_provider,
settings,
&mut date_divider_adjuster,
&mut cached_profiles,
)
.await;
}
Expand All @@ -137,6 +142,7 @@ impl<'a, P: RoomDataProvider> TimelineStateTransaction<'a, P> {
room_data_provider,
settings,
&mut date_divider_adjuster,
&mut cached_profiles,
)
.await;
}
Expand All @@ -154,6 +160,7 @@ impl<'a, P: RoomDataProvider> TimelineStateTransaction<'a, P> {
room_data_provider,
settings,
&mut date_divider_adjuster,
&mut cached_profiles,
)
.await;
} else {
Expand Down Expand Up @@ -591,6 +598,7 @@ impl<'a, P: RoomDataProvider> TimelineStateTransaction<'a, P> {
room_data_provider: &P,
settings: &TimelineSettings,
date_divider_adjuster: &mut DateDividerAdjuster,
profiles: &mut HashMap<OwnedUserId, Option<Profile>>,
) -> RemovedItem {
let is_highlighted =
event.push_actions().is_some_and(|actions| actions.iter().any(Action::is_highlight));
Expand Down Expand Up @@ -687,7 +695,13 @@ impl<'a, P: RoomDataProvider> TimelineStateTransaction<'a, P> {

// Handle the event to create or update a timeline item.
let item_added = if let Some(timeline_action) = timeline_action {
let sender_profile = room_data_provider.profile_from_user_id(&sender).await;
let sender_profile = if let Some(profile) = profiles.get(&sender) {
profile.clone()
} else {
let profile = room_data_provider.profile_from_user_id(&sender).await;
profiles.insert(sender.clone(), profile.clone());
profile
};

let ctx = TimelineEventContext {
sender,
Expand Down
Loading