@@ -19,18 +19,19 @@ use itertools::Itertools as _;
19
19
use matrix_sdk:: deserialized_responses:: TimelineEvent ;
20
20
use ruma:: {
21
21
events:: AnySyncTimelineEvent , push:: Action , serde:: Raw , MilliSecondsSinceUnixEpoch ,
22
- OwnedEventId , OwnedTransactionId , OwnedUserId ,
22
+ OwnedEventId , OwnedTransactionId , OwnedUserId , UserId ,
23
23
} ;
24
24
use tracing:: { debug, instrument, warn} ;
25
25
26
26
use super :: {
27
27
super :: {
28
- controller:: { FullEventMeta , ObservableItemsTransactionEntry } ,
28
+ controller:: ObservableItemsTransactionEntry ,
29
29
date_dividers:: DateDividerAdjuster ,
30
30
event_handler:: { Flow , TimelineEventContext , TimelineEventHandler , TimelineItemPosition } ,
31
31
event_item:: RemoteEventOrigin ,
32
32
traits:: RoomDataProvider ,
33
33
} ,
34
+ metadata:: EventMeta ,
34
35
ObservableItems , ObservableItemsTransaction , TimelineFocusKind , TimelineMetadata ,
35
36
TimelineSettings ,
36
37
} ;
@@ -365,17 +366,17 @@ impl<'a> TimelineStateTransaction<'a> {
365
366
"Failed to deserialize timeline event: {deserialization_error}"
366
367
) ;
367
368
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
-
375
369
// Remember the event before returning prematurely.
376
370
// 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 ;
379
380
None
380
381
}
381
382
}
@@ -440,16 +441,17 @@ impl<'a> TimelineStateTransaction<'a> {
440
441
}
441
442
} ;
442
443
443
- let event_meta = FullEventMeta {
444
- event_id : & event_id,
445
- sender : Some ( & sender) ,
446
- timestamp : Some ( timestamp) ,
447
- visible : should_add,
448
- } ;
449
-
450
444
// Remember the event.
451
445
// 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 ;
453
455
454
456
// Handle the event to create or update a timeline item.
455
457
if let Some ( timeline_action) = timeline_action {
@@ -596,35 +598,37 @@ impl<'a> TimelineStateTransaction<'a> {
596
598
/// This method also adjusts read receipt if needed.
597
599
async fn add_or_update_remote_event < P : RoomDataProvider > (
598
600
& mut self ,
599
- event_meta : FullEventMeta < ' _ > ,
601
+ event_meta : EventMeta ,
602
+ sender : Option < & UserId > ,
603
+ timestamp : Option < MilliSecondsSinceUnixEpoch > ,
600
604
position : TimelineItemPosition ,
601
605
room_data_provider : & P ,
602
606
settings : & TimelineSettings ,
603
607
) {
608
+ let event_id = event_meta. event_id . clone ( ) ;
609
+
604
610
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) ,
608
612
609
613
TimelineItemPosition :: End { .. } => {
610
- self . items . push_back_remote_event ( event_meta. base_meta ( ) ) ;
614
+ self . items . push_back_remote_event ( event_meta) ;
611
615
}
612
616
613
617
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) ;
615
619
}
616
620
617
621
TimelineItemPosition :: UpdateAt { .. } => {
618
622
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 )
620
624
{
621
625
if event. visible != event_meta. visible {
622
626
event. visible = event_meta. visible ;
623
627
624
628
if settings. track_read_receipts {
625
629
// Since the event's visibility changed, we need to update the read
626
630
// 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 ) ;
628
632
}
629
633
}
630
634
}
@@ -639,9 +643,9 @@ impl<'a> TimelineStateTransaction<'a> {
639
643
| TimelineItemPosition :: At { .. }
640
644
)
641
645
{
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 ;
643
647
644
- self . maybe_add_implicit_read_receipt ( event_meta ) ;
648
+ self . maybe_add_implicit_read_receipt ( & event_id , sender , timestamp ) ;
645
649
}
646
650
}
647
651
0 commit comments