From 50a9699bb20ea0e0ecb1a33cc3fe359006fa0b54 Mon Sep 17 00:00:00 2001 From: Leo dev Date: Mon, 22 Dec 2025 14:13:34 +0100 Subject: [PATCH] Message database and protocol fixes --- src/requests/message.rs | 25 ++++++++++--------------- src/requests/mod.rs | 15 ++++++++++++++- src/types.rs | 6 ++++-- src/utils/database.rs | 4 ++-- 4 files changed, 30 insertions(+), 20 deletions(-) diff --git a/src/requests/message.rs b/src/requests/message.rs index 29c32dd..4d56969 100644 --- a/src/requests/message.rs +++ b/src/requests/message.rs @@ -29,21 +29,7 @@ pub fn send( chrono::Utc::now().timestamp(), )?; - let server = server.clone(); - - for c in server.clients.lock().unwrap().iter() { - let c = c.clone(); - let server = server.clone(); - let msg = msg.clone(); - std::thread::spawn(move || { - server - .wrap_err( - &c, - c.send(types::message::ServerMessage::MessageCreate(msg)), - ) - .expect("Failed to broadcast"); - }); - } + server.broadcast(types::message::ServerMessage::MessageCreate(msg.clone())); server.send_plugin_message(&LoaderMessage::MessageSent { user_id: client.get_uuid().unwrap_or_default(), @@ -69,6 +55,12 @@ pub fn edit( } server.db.edit_message(message_id, new_contents)?; + + server.broadcast(types::message::ServerMessage::MessageUpdate { + message_id, + contents: new_contents.to_string(), + }); + Ok(()) } @@ -83,5 +75,8 @@ pub fn delete(server: &Arc, client: &Client, message_id: i64) -> crate:: } server.db.delete_message(message_id)?; + + server.broadcast(types::message::ServerMessage::MessageDelete { message_id }); + Ok(()) } diff --git a/src/requests/mod.rs b/src/requests/mod.rs index 9faa764..91b25b6 100644 --- a/src/requests/mod.rs +++ b/src/requests/mod.rs @@ -4,7 +4,7 @@ use std::sync::Arc; use crate::{ server::Server, - types::message::{ClientMessage, WsMessage}, + types::message::{ClientMessage, ServerMessage, WsMessage}, utils::client::Client, }; @@ -44,4 +44,17 @@ impl Server { Ok(()) } + + pub fn broadcast(self: &Arc, msg: ServerMessage) { + for c in self.clients.lock().unwrap().iter() { + let c = c.clone(); + let server = self.clone(); + let msg = msg.clone(); + std::thread::spawn(move || { + server + .wrap_err(&c, c.send(msg)) + .expect("Failed to broadcast"); + }); + } + } } diff --git a/src/types.rs b/src/types.rs index 8122dff..01230a5 100644 --- a/src/types.rs +++ b/src/types.rs @@ -96,11 +96,13 @@ pub mod message { MessageCreate(data::Message), /// A message was edited - MessageUpdate(data::Message), + MessageUpdate { + message_id: i64, + contents: String, + }, /// A message was deleted MessageDelete { - channel_id: String, message_id: i64, }, diff --git a/src/utils/database.rs b/src/utils/database.rs index 406e8a5..6bc1420 100644 --- a/src/utils/database.rs +++ b/src/utils/database.rs @@ -62,7 +62,7 @@ impl Database { /// Delete a message from the DB pub fn edit_message(&self, message_id: i64, contents: &str) -> Result<()> { self.0.execute( - "UPDATE table_name + "UPDATE chat SET contents = ?2 WHERE id = ?1; ", @@ -84,7 +84,7 @@ impl Database { Ok(( row.get::<_, i64>(0)?, // id row.get::<_, String>(1)?, // channel_id - row.get::<_, u32>(2)?, // user_id + row.get::<_, String>(2)?, // user_id row.get::<_, String>(3)?, // contents row.get::<_, i64>(4)?, // timestamp ))