use std::sync::Arc; use crate::{Server, types, utils::client::Client}; crate::logger!(LOGGER "Message Manager"); pub fn send( server: &Arc, client: &Client, channel_id: &str, contents: &str, ) -> crate::Result<()> { LOGGER.info(format!("SendMessage to {channel_id}: {contents}")); if contents.is_empty() { client.send(types::ResponseError::InvalidRequest(format!( "Invalid message: empty message" )))?; return Ok(()); } let msg = server.db.insert_message( &channel_id, client.get_uuid()?, &contents, 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::ServerMessage::MessageCreate(msg))) .expect("Failed to broadcast"); }); } Ok(()) } pub fn edit( _server: &Arc, _client: &Client, message_id: usize, new_contents: &str, ) -> crate::Result<()> { LOGGER.info(format!("EditMessage {message_id}: {new_contents}")); Ok(()) } pub fn delete(_server: &Arc, _client: &Client, message_id: usize) -> crate::Result<()> { LOGGER.info(format!("DeleteMessage {message_id}")); Ok(()) }