use ruma::events::receipt::ReceiptEventContent;
use tokio::sync::broadcast::{Receiver, Sender};
use super::super::{super::RoomEventCacheGenericUpdate, TimelineVectorDiffs};
#[derive(Debug, Clone)]
pub enum ThreadEventCacheUpdate {
UpdateTimelineEvents(TimelineVectorDiffs),
AddReadReceiptEvent {
event: ReceiptEventContent,
},
}
#[derive(Clone)]
pub struct ThreadEventCacheUpdateSender {
thread_sender: Sender<ThreadEventCacheUpdate>,
generic_sender: Sender<RoomEventCacheGenericUpdate>,
}
impl ThreadEventCacheUpdateSender {
pub fn new(generic_sender: Sender<RoomEventCacheGenericUpdate>) -> Self {
Self { thread_sender: Sender::new(32), generic_sender }
}
pub fn send(
&self,
thread_update: ThreadEventCacheUpdate,
generic_update: Option<RoomEventCacheGenericUpdate>,
) {
let _ = self.thread_sender.send(thread_update);
if let Some(generic_update) = generic_update {
let _ = self.generic_sender.send(generic_update);
}
}
pub(super) fn new_thread_receiver(&self) -> Receiver<ThreadEventCacheUpdate> {
self.thread_sender.subscribe()
}
}