Add more information to websocket messages
This commit is contained in:
@@ -11,7 +11,7 @@ pub type BroadcastSender = tokio::sync::broadcast::Sender<BroadcastMessage>;
|
||||
#[derive(Debug, Clone)]
|
||||
pub struct BxRoomEvent<E> {
|
||||
pub user: UserEmail,
|
||||
pub event: Box<E>,
|
||||
pub data: Box<E>,
|
||||
pub room: Room,
|
||||
}
|
||||
|
||||
|
||||
@@ -10,10 +10,10 @@ use actix_web::dev::Payload;
|
||||
use actix_web::{FromRequest, HttpRequest, HttpResponse, web};
|
||||
use actix_ws::Message;
|
||||
use futures_util::StreamExt;
|
||||
use matrix_sdk::ruma::OwnedRoomId;
|
||||
use matrix_sdk::ruma::events::reaction::ReactionEventContent;
|
||||
use matrix_sdk::ruma::events::room::message::RoomMessageEventContent;
|
||||
use matrix_sdk::ruma::events::room::redaction::RoomRedactionEventContent;
|
||||
use matrix_sdk::ruma::{MilliSecondsSinceUnixEpoch, OwnedEventId, OwnedRoomId, OwnedUserId};
|
||||
use ractor::ActorRef;
|
||||
use std::time::Instant;
|
||||
use tokio::sync::broadcast;
|
||||
@@ -22,8 +22,11 @@ use tokio::time::interval;
|
||||
|
||||
#[derive(Debug, serde::Serialize)]
|
||||
pub struct WsRoomEvent<E> {
|
||||
pub event: Box<E>,
|
||||
pub room_id: OwnedRoomId,
|
||||
pub event_id: OwnedEventId,
|
||||
pub sender: OwnedUserId,
|
||||
pub origin_server_ts: MilliSecondsSinceUnixEpoch,
|
||||
pub data: Box<E>,
|
||||
}
|
||||
|
||||
/// Messages sent to the client
|
||||
@@ -45,20 +48,29 @@ impl WsMessage {
|
||||
match msg {
|
||||
BroadcastMessage::RoomMessageEvent(evt) if &evt.user == user => {
|
||||
Some(Self::RoomMessageEvent(WsRoomEvent {
|
||||
event: Box::new(evt.event.content.clone()),
|
||||
room_id: evt.room.room_id().to_owned(),
|
||||
event_id: evt.data.event_id.clone(),
|
||||
sender: evt.data.sender.clone(),
|
||||
origin_server_ts: evt.data.origin_server_ts,
|
||||
data: Box::new(evt.data.content.clone()),
|
||||
}))
|
||||
}
|
||||
BroadcastMessage::ReactionEvent(evt) if &evt.user == user => {
|
||||
Some(Self::RoomReactionEvent(WsRoomEvent {
|
||||
event: Box::new(evt.event.content.clone()),
|
||||
room_id: evt.room.room_id().to_owned(),
|
||||
event_id: evt.data.event_id.clone(),
|
||||
sender: evt.data.sender.clone(),
|
||||
origin_server_ts: evt.data.origin_server_ts,
|
||||
data: Box::new(evt.data.content.clone()),
|
||||
}))
|
||||
}
|
||||
BroadcastMessage::RoomRedactionEvent(evt) if &evt.user == user => {
|
||||
Some(Self::RoomRedactionEvent(WsRoomEvent {
|
||||
event: Box::new(evt.event.content.clone()),
|
||||
room_id: evt.room.room_id().to_owned(),
|
||||
event_id: evt.data.event_id.clone(),
|
||||
sender: evt.data.sender.clone(),
|
||||
origin_server_ts: evt.data.origin_server_ts,
|
||||
data: Box::new(evt.data.content.clone()),
|
||||
}))
|
||||
}
|
||||
_ => None,
|
||||
|
||||
@@ -58,7 +58,7 @@ async fn sync_thread_task(
|
||||
async move |event: OriginalSyncRoomMessageEvent, room: Room| {
|
||||
if let Err(e) = tx_msg_handle.send(BroadcastMessage::RoomMessageEvent(BxRoomEvent {
|
||||
user: user_msg_handle.clone(),
|
||||
event: Box::new(event),
|
||||
data: Box::new(event),
|
||||
room,
|
||||
})) {
|
||||
log::warn!("Failed to forward room message event! {e}");
|
||||
@@ -72,7 +72,7 @@ async fn sync_thread_task(
|
||||
async move |event: OriginalSyncReactionEvent, room: Room| {
|
||||
if let Err(e) = tx_reac_handle.send(BroadcastMessage::ReactionEvent(BxRoomEvent {
|
||||
user: user_reac_handle.clone(),
|
||||
event: Box::new(event),
|
||||
data: Box::new(event),
|
||||
room,
|
||||
})) {
|
||||
log::warn!("Failed to forward reaction event! {e}");
|
||||
@@ -87,7 +87,7 @@ async fn sync_thread_task(
|
||||
if let Err(e) =
|
||||
tx_redac_handle.send(BroadcastMessage::RoomRedactionEvent(BxRoomEvent {
|
||||
user: user_redac_handle.clone(),
|
||||
event: Box::new(event),
|
||||
data: Box::new(event),
|
||||
room,
|
||||
}))
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user