File tree Expand file tree Collapse file tree
crates/matrix-sdk/src/event_cache/caches Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -23,10 +23,8 @@ use matrix_sdk_base::{
2323use ruma:: { OwnedRoomId , RoomId } ;
2424use tokio:: sync:: { broadcast:: Sender , mpsc} ;
2525
26- use super :: { EventCacheError , EventsOrigin , Result } ;
27- use crate :: {
28- client:: WeakClient , event_cache:: automatic_pagination:: AutomaticPagination , room:: WeakRoom ,
29- } ;
26+ use super :: { EventCacheError , EventsOrigin , Result , automatic_pagination:: AutomaticPagination } ;
27+ use crate :: { client:: WeakClient , room:: WeakRoom } ;
3028
3129pub mod event_focused;
3230pub mod event_linked_chunk;
Original file line number Diff line number Diff line change @@ -80,26 +80,40 @@ impl ThreadEventCache {
8080 generic_update_sender : Sender < RoomEventCacheGenericUpdate > ,
8181 linked_chunk_update_sender : Sender < RoomEventCacheLinkedChunkUpdate > ,
8282 ) -> Result < Self > {
83- let update_sender = ThreadEventCacheUpdateSender :: new ( generic_update_sender) ;
83+ let update_sender = ThreadEventCacheUpdateSender :: new ( generic_update_sender. clone ( ) ) ;
84+
85+ let state = LockedThreadEventCacheState :: new (
86+ room_id. clone ( ) ,
87+ thread_id. clone ( ) ,
88+ own_user_id,
89+ store,
90+ update_sender. clone ( ) ,
91+ linked_chunk_update_sender,
92+ )
93+ . await ?;
94+
95+ let timeline_is_not_empty =
96+ state. read ( ) . await ?. thread_linked_chunk ( ) . revents ( ) . next ( ) . is_some ( ) ;
8497
85- Ok ( Self {
98+ let cache = Self {
8699 inner : Arc :: new ( ThreadEventCacheInner {
87100 room_id : room_id. clone ( ) ,
88- thread_id : thread_id . clone ( ) ,
101+ thread_id,
89102 weak_room,
90- state : LockedThreadEventCacheState :: new (
91- room_id,
92- thread_id,
93- own_user_id,
94- store,
95- update_sender. clone ( ) ,
96- linked_chunk_update_sender,
97- )
98- . await ?,
103+ state,
99104 pagination_batch_token_notifier : Notify :: new ( ) ,
100105 update_sender,
101106 } ) ,
102- } )
107+ } ;
108+
109+ // If at least one event has been loaded, it means there is a timeline. Let's
110+ // emit a generic update.
111+ if timeline_is_not_empty {
112+ let _ = generic_update_sender
113+ . send ( RoomEventCacheGenericUpdate { room_id : room_id. to_owned ( ) } ) ;
114+ }
115+
116+ Ok ( cache)
103117 }
104118
105119 /// Subscribe to live events from this thread.
You can’t perform that action at this time.
0 commit comments