From 4661ca810a5bca0cf474aa180281b1f16e47cea1 Mon Sep 17 00:00:00 2001 From: Benjamin Bouvier Date: Thu, 14 Mar 2024 16:52:10 +0100 Subject: [PATCH] timeline: get rid of deref/deref_mut from `TimelineInnerStateTransaction` to `TimelineInnerMetadata` --- .../matrix-sdk-ui/src/timeline/inner/state.rs | 40 ++++++------------- .../src/timeline/read_receipts.rs | 5 ++- 2 files changed, 16 insertions(+), 29 deletions(-) diff --git a/crates/matrix-sdk-ui/src/timeline/inner/state.rs b/crates/matrix-sdk-ui/src/timeline/inner/state.rs index e8409a33f..6981a13cc 100644 --- a/crates/matrix-sdk-ui/src/timeline/inner/state.rs +++ b/crates/matrix-sdk-ui/src/timeline/inner/state.rs @@ -558,7 +558,7 @@ impl TimelineInnerStateTransaction<'_> { read_receipts: if settings.track_read_receipts && should_add { self.meta.read_receipts.compute_event_receipts( &event_id, - &self.all_events, + &self.meta.all_events, matches!(position, TimelineItemPosition::End { .. }), ) } else { @@ -607,13 +607,13 @@ impl TimelineInnerStateTransaction<'_> { self.items.clear(); } - self.all_events.clear(); - self.read_receipts.clear(); - self.reactions.clear(); - self.fully_read_event = None; + self.meta.all_events.clear(); + self.meta.read_receipts.clear(); + self.meta.reactions.clear(); + self.meta.fully_read_event = None; // We forgot about the fully read marker right above, so wait for a new one // before attempting to update it for each new timeline item. - self.has_up_to_date_read_marker_item = true; + self.meta.has_up_to_date_read_marker_item = true; debug!(remaining_items = self.items.len(), "Timeline cleared"); } @@ -621,11 +621,11 @@ impl TimelineInnerStateTransaction<'_> { #[instrument(skip_all)] fn set_fully_read_event(&mut self, fully_read_event_id: OwnedEventId) { // A similar event has been handled already. We can ignore it. - if self.fully_read_event.as_ref().is_some_and(|id| *id == fully_read_event_id) { + if self.meta.fully_read_event.as_ref().is_some_and(|id| *id == fully_read_event_id) { return; } - self.fully_read_event = Some(fully_read_event_id); + self.meta.fully_read_event = Some(fully_read_event_id); self.meta.update_read_marker(&mut self.items); } @@ -651,21 +651,21 @@ impl TimelineInnerStateTransaction<'_> { settings: &TimelineInnerSettings, ) { match position { - TimelineItemPosition::Start => self.all_events.push_front(event_meta.base_meta()), + TimelineItemPosition::Start => self.meta.all_events.push_front(event_meta.base_meta()), TimelineItemPosition::End { .. } => { // Handle duplicated event. if let Some(pos) = - self.all_events.iter().position(|ev| ev.event_id == event_meta.event_id) + self.meta.all_events.iter().position(|ev| ev.event_id == event_meta.event_id) { - self.all_events.remove(pos); + self.meta.all_events.remove(pos); } - self.all_events.push_back(event_meta.base_meta()); + self.meta.all_events.push_back(event_meta.base_meta()); } #[cfg(feature = "e2e-encryption")] TimelineItemPosition::Update(_) => { if let Some(event) = - self.all_events.iter_mut().find(|e| e.event_id == event_meta.event_id) + self.meta.all_events.iter_mut().find(|e| e.event_id == event_meta.event_id) { if event.visible != event_meta.visible { event.visible = event_meta.visible; @@ -701,20 +701,6 @@ impl Drop for TimelineInnerStateTransaction<'_> { } } -impl Deref for TimelineInnerStateTransaction<'_> { - type Target = TimelineInnerMetadata; - - fn deref(&self) -> &Self::Target { - self.meta - } -} - -impl DerefMut for TimelineInnerStateTransaction<'_> { - fn deref_mut(&mut self) -> &mut Self::Target { - self.meta - } -} - #[derive(Debug)] pub(in crate::timeline) struct TimelineInnerMetadata { /// List of all the events as received in the timeline, even the ones that diff --git a/crates/matrix-sdk-ui/src/timeline/read_receipts.rs b/crates/matrix-sdk-ui/src/timeline/read_receipts.rs index 06723096e..0c6150fb2 100644 --- a/crates/matrix-sdk-ui/src/timeline/read_receipts.rs +++ b/crates/matrix-sdk-ui/src/timeline/read_receipts.rs @@ -446,6 +446,7 @@ impl TimelineInnerStateTransaction<'_> { pub(super) fn maybe_update_read_receipts_of_prev_event(&mut self, event_id: &EventId) { // Find the previous visible event, if there is one. let Some(prev_event_meta) = self + .meta .all_events .iter() .rev() @@ -474,9 +475,9 @@ impl TimelineInnerStateTransaction<'_> { return; }; - let read_receipts = self.read_receipts.compute_event_receipts( + let read_receipts = self.meta.read_receipts.compute_event_receipts( &remote_prev_event_item.event_id, - &self.all_events, + &self.meta.all_events, false, );