Add more information to websocket messages

This commit is contained in:
2025-11-21 11:40:51 +01:00
parent 8d2cea5f82
commit 1385afc974
3 changed files with 21 additions and 9 deletions

View File

@@ -11,7 +11,7 @@ pub type BroadcastSender = tokio::sync::broadcast::Sender<BroadcastMessage>;
#[derive(Debug, Clone)] #[derive(Debug, Clone)]
pub struct BxRoomEvent<E> { pub struct BxRoomEvent<E> {
pub user: UserEmail, pub user: UserEmail,
pub event: Box<E>, pub data: Box<E>,
pub room: Room, pub room: Room,
} }

View File

@@ -10,10 +10,10 @@ use actix_web::dev::Payload;
use actix_web::{FromRequest, HttpRequest, HttpResponse, web}; use actix_web::{FromRequest, HttpRequest, HttpResponse, web};
use actix_ws::Message; use actix_ws::Message;
use futures_util::StreamExt; use futures_util::StreamExt;
use matrix_sdk::ruma::OwnedRoomId;
use matrix_sdk::ruma::events::reaction::ReactionEventContent; use matrix_sdk::ruma::events::reaction::ReactionEventContent;
use matrix_sdk::ruma::events::room::message::RoomMessageEventContent; use matrix_sdk::ruma::events::room::message::RoomMessageEventContent;
use matrix_sdk::ruma::events::room::redaction::RoomRedactionEventContent; use matrix_sdk::ruma::events::room::redaction::RoomRedactionEventContent;
use matrix_sdk::ruma::{MilliSecondsSinceUnixEpoch, OwnedEventId, OwnedRoomId, OwnedUserId};
use ractor::ActorRef; use ractor::ActorRef;
use std::time::Instant; use std::time::Instant;
use tokio::sync::broadcast; use tokio::sync::broadcast;
@@ -22,8 +22,11 @@ use tokio::time::interval;
#[derive(Debug, serde::Serialize)] #[derive(Debug, serde::Serialize)]
pub struct WsRoomEvent<E> { pub struct WsRoomEvent<E> {
pub event: Box<E>,
pub room_id: OwnedRoomId, 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 /// Messages sent to the client
@@ -45,20 +48,29 @@ impl WsMessage {
match msg { match msg {
BroadcastMessage::RoomMessageEvent(evt) if &evt.user == user => { BroadcastMessage::RoomMessageEvent(evt) if &evt.user == user => {
Some(Self::RoomMessageEvent(WsRoomEvent { Some(Self::RoomMessageEvent(WsRoomEvent {
event: Box::new(evt.event.content.clone()),
room_id: evt.room.room_id().to_owned(), 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 => { BroadcastMessage::ReactionEvent(evt) if &evt.user == user => {
Some(Self::RoomReactionEvent(WsRoomEvent { Some(Self::RoomReactionEvent(WsRoomEvent {
event: Box::new(evt.event.content.clone()),
room_id: evt.room.room_id().to_owned(), 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 => { BroadcastMessage::RoomRedactionEvent(evt) if &evt.user == user => {
Some(Self::RoomRedactionEvent(WsRoomEvent { Some(Self::RoomRedactionEvent(WsRoomEvent {
event: Box::new(evt.event.content.clone()),
room_id: evt.room.room_id().to_owned(), 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, _ => None,

View File

@@ -58,7 +58,7 @@ async fn sync_thread_task(
async move |event: OriginalSyncRoomMessageEvent, room: Room| { async move |event: OriginalSyncRoomMessageEvent, room: Room| {
if let Err(e) = tx_msg_handle.send(BroadcastMessage::RoomMessageEvent(BxRoomEvent { if let Err(e) = tx_msg_handle.send(BroadcastMessage::RoomMessageEvent(BxRoomEvent {
user: user_msg_handle.clone(), user: user_msg_handle.clone(),
event: Box::new(event), data: Box::new(event),
room, room,
})) { })) {
log::warn!("Failed to forward room message event! {e}"); log::warn!("Failed to forward room message event! {e}");
@@ -72,7 +72,7 @@ async fn sync_thread_task(
async move |event: OriginalSyncReactionEvent, room: Room| { async move |event: OriginalSyncReactionEvent, room: Room| {
if let Err(e) = tx_reac_handle.send(BroadcastMessage::ReactionEvent(BxRoomEvent { if let Err(e) = tx_reac_handle.send(BroadcastMessage::ReactionEvent(BxRoomEvent {
user: user_reac_handle.clone(), user: user_reac_handle.clone(),
event: Box::new(event), data: Box::new(event),
room, room,
})) { })) {
log::warn!("Failed to forward reaction event! {e}"); log::warn!("Failed to forward reaction event! {e}");
@@ -87,7 +87,7 @@ async fn sync_thread_task(
if let Err(e) = if let Err(e) =
tx_redac_handle.send(BroadcastMessage::RoomRedactionEvent(BxRoomEvent { tx_redac_handle.send(BroadcastMessage::RoomRedactionEvent(BxRoomEvent {
user: user_redac_handle.clone(), user: user_redac_handle.clone(),
event: Box::new(event), data: Box::new(event),
room, room,
})) }))
{ {