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)]
|
#[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,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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,
|
||||||
}))
|
}))
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user