Skip to content

Commit e4f2299

Browse files
committed
refactor(timeline): get rid of FullEventMeta and replace it with EventMeta + function parameters
1 parent 81a2679 commit e4f2299

File tree

5 files changed

+51
-63
lines changed

5 files changed

+51
-63
lines changed

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -372,3 +372,9 @@ pub(in crate::timeline) struct EventMeta {
372372
/// remote event, but if it moves, it has an impact on this mapping.
373373
pub timeline_item_index: Option<usize>,
374374
}
375+
376+
impl EventMeta {
377+
pub fn new(event_id: OwnedEventId, visible: bool) -> Self {
378+
Self { event_id, visible, timeline_item_index: None }
379+
}
380+
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ pub(super) use self::{
5959
AllRemoteEvents, ObservableItems, ObservableItemsEntry, ObservableItemsTransaction,
6060
ObservableItemsTransactionEntry,
6161
},
62-
state::{FullEventMeta, PendingEdit, PendingEditKind, TimelineState},
62+
state::{PendingEdit, PendingEditKind, TimelineState},
6363
state_transaction::TimelineStateTransaction,
6464
};
6565
use super::{

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

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,15 @@ use futures_core::Stream;
1818
use indexmap::IndexMap;
1919
use ruma::{
2020
events::receipt::{Receipt, ReceiptEventContent, ReceiptThread, ReceiptType},
21-
EventId, OwnedEventId, OwnedUserId, UserId,
21+
EventId, MilliSecondsSinceUnixEpoch, OwnedEventId, OwnedUserId, UserId,
2222
};
2323
use tokio::sync::watch;
2424
use tokio_stream::wrappers::WatchStream;
2525
use tracing::{debug, error, instrument, trace, warn};
2626

2727
use super::{
28-
rfind_event_by_id, AllRemoteEvents, FullEventMeta, ObservableItemsTransaction,
29-
RelativePosition, RoomDataProvider, TimelineMetadata, TimelineState,
28+
rfind_event_by_id, AllRemoteEvents, ObservableItemsTransaction, RelativePosition,
29+
RoomDataProvider, TimelineMetadata, TimelineState,
3030
};
3131
use crate::timeline::{controller::TimelineStateTransaction, TimelineItem};
3232

@@ -555,9 +555,12 @@ impl TimelineStateTransaction<'_> {
555555
/// count, so we need to handle them locally too. For that we create an
556556
/// "implicit" read receipt, compared to the "explicit" ones sent by the
557557
/// client.
558-
pub(super) fn maybe_add_implicit_read_receipt(&mut self, event_meta: FullEventMeta<'_>) {
559-
let FullEventMeta { event_id, sender, timestamp, .. } = event_meta;
560-
558+
pub(super) fn maybe_add_implicit_read_receipt(
559+
&mut self,
560+
event_id: &EventId,
561+
sender: Option<&UserId>,
562+
timestamp: Option<MilliSecondsSinceUnixEpoch>,
563+
) {
561564
let (Some(user_id), Some(timestamp)) = (sender, timestamp) else {
562565
// We cannot add a read receipt if we do not know the user or the timestamp.
563566
return;

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

Lines changed: 2 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ use ruma::{
2626
},
2727
serde::Raw,
2828
EventId, MilliSecondsSinceUnixEpoch, OwnedEventId, OwnedTransactionId, OwnedUserId,
29-
RoomVersionId, UserId,
29+
RoomVersionId,
3030
};
3131
use tracing::{instrument, trace, warn};
3232

@@ -40,7 +40,6 @@ use super::{
4040
traits::RoomDataProvider,
4141
Profile, TimelineItem,
4242
},
43-
metadata::EventMeta,
4443
observable_items::ObservableItems,
4544
DateDividerMode, TimelineFocusKind, TimelineMetadata, TimelineSettings,
4645
TimelineStateTransaction,
@@ -230,7 +229,7 @@ impl TimelineState {
230229
pub(super) fn handle_read_receipts(
231230
&mut self,
232231
receipt_event_content: ReceiptEventContent,
233-
own_user_id: &UserId,
232+
own_user_id: &ruma::UserId,
234233
) {
235234
let mut txn = self.transaction();
236235
txn.handle_explicit_read_receipts(receipt_event_content, own_user_id);
@@ -316,27 +315,3 @@ impl std::fmt::Debug for PendingEdit {
316315
}
317316
}
318317
}
319-
320-
/// Full metadata about an event.
321-
///
322-
/// Only used to group function parameters.
323-
pub(crate) struct FullEventMeta<'a> {
324-
/// The ID of the event.
325-
pub event_id: &'a EventId,
326-
/// Whether the event is among the timeline items.
327-
pub visible: bool,
328-
/// The sender of the event.
329-
pub sender: Option<&'a UserId>,
330-
/// The timestamp of the event.
331-
pub timestamp: Option<MilliSecondsSinceUnixEpoch>,
332-
}
333-
334-
impl FullEventMeta<'_> {
335-
pub(super) fn base_meta(&self) -> EventMeta {
336-
EventMeta {
337-
event_id: self.event_id.to_owned(),
338-
visible: self.visible,
339-
timeline_item_index: None,
340-
}
341-
}
342-
}

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

Lines changed: 33 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -19,18 +19,19 @@ use itertools::Itertools as _;
1919
use matrix_sdk::deserialized_responses::TimelineEvent;
2020
use ruma::{
2121
events::AnySyncTimelineEvent, push::Action, serde::Raw, MilliSecondsSinceUnixEpoch,
22-
OwnedEventId, OwnedTransactionId, OwnedUserId,
22+
OwnedEventId, OwnedTransactionId, OwnedUserId, UserId,
2323
};
2424
use tracing::{debug, instrument, warn};
2525

2626
use super::{
2727
super::{
28-
controller::{FullEventMeta, ObservableItemsTransactionEntry},
28+
controller::ObservableItemsTransactionEntry,
2929
date_dividers::DateDividerAdjuster,
3030
event_handler::{Flow, TimelineEventContext, TimelineEventHandler, TimelineItemPosition},
3131
event_item::RemoteEventOrigin,
3232
traits::RoomDataProvider,
3333
},
34+
metadata::EventMeta,
3435
ObservableItems, ObservableItemsTransaction, TimelineFocusKind, TimelineMetadata,
3536
TimelineSettings,
3637
};
@@ -365,17 +366,17 @@ impl<'a> TimelineStateTransaction<'a> {
365366
"Failed to deserialize timeline event: {deserialization_error}"
366367
);
367368

368-
let event_meta = FullEventMeta {
369-
event_id: &event_id,
370-
sender: sender.as_deref(),
371-
timestamp: origin_server_ts,
372-
visible: false,
373-
};
374-
375369
// Remember the event before returning prematurely.
376370
// See [`ObservableItems::all_remote_events`].
377-
self.add_or_update_remote_event(event_meta, position, room_data_provider, settings)
378-
.await;
371+
self.add_or_update_remote_event(
372+
EventMeta::new(event_id, false),
373+
sender.as_deref(),
374+
origin_server_ts,
375+
position,
376+
room_data_provider,
377+
settings,
378+
)
379+
.await;
379380
None
380381
}
381382
}
@@ -440,16 +441,17 @@ impl<'a> TimelineStateTransaction<'a> {
440441
}
441442
};
442443

443-
let event_meta = FullEventMeta {
444-
event_id: &event_id,
445-
sender: Some(&sender),
446-
timestamp: Some(timestamp),
447-
visible: should_add,
448-
};
449-
450444
// Remember the event.
451445
// See [`ObservableItems::all_remote_events`].
452-
self.add_or_update_remote_event(event_meta, position, room_data_provider, settings).await;
446+
self.add_or_update_remote_event(
447+
EventMeta::new(event_id.clone(), should_add),
448+
Some(&sender),
449+
Some(timestamp),
450+
position,
451+
room_data_provider,
452+
settings,
453+
)
454+
.await;
453455

454456
// Handle the event to create or update a timeline item.
455457
if let Some(timeline_action) = timeline_action {
@@ -596,35 +598,37 @@ impl<'a> TimelineStateTransaction<'a> {
596598
/// This method also adjusts read receipt if needed.
597599
async fn add_or_update_remote_event<P: RoomDataProvider>(
598600
&mut self,
599-
event_meta: FullEventMeta<'_>,
601+
event_meta: EventMeta,
602+
sender: Option<&UserId>,
603+
timestamp: Option<MilliSecondsSinceUnixEpoch>,
600604
position: TimelineItemPosition,
601605
room_data_provider: &P,
602606
settings: &TimelineSettings,
603607
) {
608+
let event_id = event_meta.event_id.clone();
609+
604610
match position {
605-
TimelineItemPosition::Start { .. } => {
606-
self.items.push_front_remote_event(event_meta.base_meta())
607-
}
611+
TimelineItemPosition::Start { .. } => self.items.push_front_remote_event(event_meta),
608612

609613
TimelineItemPosition::End { .. } => {
610-
self.items.push_back_remote_event(event_meta.base_meta());
614+
self.items.push_back_remote_event(event_meta);
611615
}
612616

613617
TimelineItemPosition::At { event_index, .. } => {
614-
self.items.insert_remote_event(event_index, event_meta.base_meta());
618+
self.items.insert_remote_event(event_index, event_meta);
615619
}
616620

617621
TimelineItemPosition::UpdateAt { .. } => {
618622
if let Some(event) =
619-
self.items.get_remote_event_by_event_id_mut(event_meta.event_id)
623+
self.items.get_remote_event_by_event_id_mut(&event_meta.event_id)
620624
{
621625
if event.visible != event_meta.visible {
622626
event.visible = event_meta.visible;
623627

624628
if settings.track_read_receipts {
625629
// Since the event's visibility changed, we need to update the read
626630
// receipts of the previous visible event.
627-
self.maybe_update_read_receipts_of_prev_event(event_meta.event_id);
631+
self.maybe_update_read_receipts_of_prev_event(&event_meta.event_id);
628632
}
629633
}
630634
}
@@ -639,9 +643,9 @@ impl<'a> TimelineStateTransaction<'a> {
639643
| TimelineItemPosition::At { .. }
640644
)
641645
{
642-
self.load_read_receipts_for_event(event_meta.event_id, room_data_provider).await;
646+
self.load_read_receipts_for_event(&event_id, room_data_provider).await;
643647

644-
self.maybe_add_implicit_read_receipt(event_meta);
648+
self.maybe_add_implicit_read_receipt(&event_id, sender, timestamp);
645649
}
646650
}
647651

0 commit comments

Comments
 (0)