Forward typing event in WebSocket
This commit is contained in:
@@ -42,6 +42,12 @@ pub struct WsReceiptEvent {
|
||||
pub receipts: Vec<WsReceiptEntry>,
|
||||
}
|
||||
|
||||
#[derive(Debug, serde::Serialize)]
|
||||
pub struct WsTypingEvent {
|
||||
pub room_id: OwnedRoomId,
|
||||
pub user_ids: Vec<OwnedUserId>,
|
||||
}
|
||||
|
||||
/// Messages sent to the client
|
||||
#[derive(Debug, serde::Serialize)]
|
||||
#[serde(tag = "type")]
|
||||
@@ -57,6 +63,9 @@ pub enum WsMessage {
|
||||
|
||||
/// Fully read message event
|
||||
ReceiptEvent(WsReceiptEvent),
|
||||
|
||||
/// User is typing event
|
||||
TypingEvent(WsTypingEvent),
|
||||
}
|
||||
|
||||
impl WsMessage {
|
||||
@@ -71,6 +80,7 @@ impl WsMessage {
|
||||
data: Box::new(evt.data.content.clone()),
|
||||
}))
|
||||
}
|
||||
|
||||
BroadcastMessage::ReactionEvent(evt) if &evt.user == user => {
|
||||
Some(Self::RoomReactionEvent(WsRoomEvent {
|
||||
room_id: evt.room.room_id().to_owned(),
|
||||
@@ -80,6 +90,7 @@ impl WsMessage {
|
||||
data: Box::new(evt.data.content.clone()),
|
||||
}))
|
||||
}
|
||||
|
||||
BroadcastMessage::RoomRedactionEvent(evt) if &evt.user == user => {
|
||||
Some(Self::RoomRedactionEvent(WsRoomEvent {
|
||||
room_id: evt.room.room_id().to_owned(),
|
||||
@@ -89,6 +100,7 @@ impl WsMessage {
|
||||
data: Box::new(evt.data.content.clone()),
|
||||
}))
|
||||
}
|
||||
|
||||
BroadcastMessage::ReceiptEvent(evt) if &evt.user == user => {
|
||||
let mut receipts = vec![];
|
||||
for (event_id, r) in &evt.data.content.0 {
|
||||
@@ -108,6 +120,14 @@ impl WsMessage {
|
||||
receipts,
|
||||
}))
|
||||
}
|
||||
|
||||
BroadcastMessage::TypingEvent(evt) if &evt.user == user => {
|
||||
Some(Self::TypingEvent(WsTypingEvent {
|
||||
room_id: evt.room.room_id().to_owned(),
|
||||
user_ids: evt.data.content.user_ids.clone(),
|
||||
}))
|
||||
}
|
||||
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user