Skip to content

Commit ff70a34

Browse files
committed
feat(sdk): Emit a RoomEventCacheGenericUpdate when the ThreadEventCache is built.
This patch updates `ThreadEventCache::new` to emit a `RoomEventCacheGenericUpdate` when it's built, similarly to `RoomEventCache`. This is important for external API, like Latest Event.
1 parent d5286c7 commit ff70a34

2 files changed

Lines changed: 29 additions & 17 deletions

File tree

crates/matrix-sdk/src/event_cache/caches/mod.rs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,8 @@ use matrix_sdk_base::{
2323
use ruma::{OwnedRoomId, RoomId};
2424
use 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

3129
pub mod event_focused;
3230
pub mod event_linked_chunk;

crates/matrix-sdk/src/event_cache/caches/thread/mod.rs

Lines changed: 27 additions & 13 deletions
Original file line numberDiff line numberDiff 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.

0 commit comments

Comments
 (0)