diff --git a/matrixgw_backend/src/broadcast_messages.rs b/matrixgw_backend/src/broadcast_messages.rs index 3294449..db34a75 100644 --- a/matrixgw_backend/src/broadcast_messages.rs +++ b/matrixgw_backend/src/broadcast_messages.rs @@ -11,7 +11,7 @@ pub type BroadcastSender = tokio::sync::broadcast::Sender; #[derive(Debug, Clone)] pub struct BxRoomEvent { pub user: UserEmail, - pub event: Box, + pub data: Box, pub room: Room, } diff --git a/matrixgw_backend/src/controllers/ws_controller.rs b/matrixgw_backend/src/controllers/ws_controller.rs index c516737..0c0fab1 100644 --- a/matrixgw_backend/src/controllers/ws_controller.rs +++ b/matrixgw_backend/src/controllers/ws_controller.rs @@ -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 { - pub event: Box, pub room_id: OwnedRoomId, + pub event_id: OwnedEventId, + pub sender: OwnedUserId, + pub origin_server_ts: MilliSecondsSinceUnixEpoch, + pub data: Box, } /// 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, diff --git a/matrixgw_backend/src/matrix_connection/sync_thread.rs b/matrixgw_backend/src/matrix_connection/sync_thread.rs index 4a32e61..30f4307 100644 --- a/matrixgw_backend/src/matrix_connection/sync_thread.rs +++ b/matrixgw_backend/src/matrix_connection/sync_thread.rs @@ -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, })) {