Edit and Remove message

This commit is contained in:
2025-12-21 22:04:46 +01:00
parent 8aa3fe17c1
commit 1222a444a4
3 changed files with 32 additions and 12 deletions
+24 -4
View File
@@ -1,5 +1,7 @@
use std::sync::Arc; use std::sync::Arc;
use anyhow::anyhow;
use crate::{plugin::types::LoaderMessage, server::Server, types, utils::client::Client}; use crate::{plugin::types::LoaderMessage, server::Server, types, utils::client::Client};
crate::logger!(LOGGER "Message Manager"); crate::logger!(LOGGER "Message Manager");
@@ -52,16 +54,34 @@ pub fn send(
} }
pub fn edit( pub fn edit(
_server: &Arc<Server>, server: &Arc<Server>,
_client: &Client, client: &Client,
message_id: usize, message_id: i64,
new_contents: &str, new_contents: &str,
) -> crate::Result<()> { ) -> crate::Result<()> {
LOGGER.info(format!("EditMessage {message_id}: {new_contents}")); LOGGER.info(format!("EditMessage {message_id}: {new_contents}"));
let Some(msg) = server.db.get_message_by_id(message_id)? else {
return Err(anyhow!("Message does not exist"));
};
if msg.from != client.get_uuid()? {
return Err(anyhow!("You are not the author of this message"));
}
server.db.edit_message(message_id, new_contents)?;
Ok(()) Ok(())
} }
pub fn delete(_server: &Arc<Server>, _client: &Client, message_id: usize) -> crate::Result<()> { pub fn delete(server: &Arc<Server>, client: &Client, message_id: i64) -> crate::Result<()> {
LOGGER.info(format!("DeleteMessage {message_id}")); LOGGER.info(format!("DeleteMessage {message_id}"));
let Some(msg) = server.db.get_message_by_id(message_id)? else {
return Err(anyhow!("Message does not exist"));
};
if msg.from != client.get_uuid()? {
return Err(anyhow!("You are not the author of this message"));
}
server.db.delete_message(message_id)?;
Ok(()) Ok(())
} }
+4 -4
View File
@@ -49,7 +49,7 @@ pub mod handshake {
pub struct ClientDetails { pub struct ClientDetails {
pub version: String, pub version: String,
pub auth_token: String, pub auth_token: String,
pub last_message: Option<usize>, pub last_message: Option<i64>,
} }
} }
@@ -70,12 +70,12 @@ pub mod message {
/// Edit a message (if allowed) /// Edit a message (if allowed)
EditMessage { EditMessage {
message_id: usize, message_id: i64,
new_contents: String, new_contents: String,
}, },
/// Delete a message (if allowed) /// Delete a message (if allowed)
DeleteMessage { message_id: usize }, DeleteMessage { message_id: i64 },
} }
/// Messages sent *from the server* to the client /// Messages sent *from the server* to the client
@@ -101,7 +101,7 @@ pub mod message {
/// A message was deleted /// A message was deleted
MessageDelete { MessageDelete {
channel_id: String, channel_id: String,
message_id: usize, message_id: i64,
}, },
/// Presence updates /// Presence updates
+4 -4
View File
@@ -52,7 +52,7 @@ impl Database {
} }
/// Delete a message from the DB /// Delete a message from the DB
pub fn delete_message(&self, message_id: usize) -> Result<()> { pub fn delete_message(&self, message_id: i64) -> Result<()> {
self.0 self.0
.execute("DELETE FROM chat WHERE id = ?1;", params![message_id])?; .execute("DELETE FROM chat WHERE id = ?1;", params![message_id])?;
@@ -60,7 +60,7 @@ impl Database {
} }
/// Delete a message from the DB /// Delete a message from the DB
pub fn edit_message(&self, message_id: usize, contents: &str) -> Result<()> { pub fn edit_message(&self, message_id: i64, contents: &str) -> Result<()> {
self.0.execute( self.0.execute(
"UPDATE table_name "UPDATE table_name
SET contents = ?2 SET contents = ?2
@@ -73,7 +73,7 @@ impl Database {
} }
/// Get a message by its ID /// Get a message by its ID
pub fn get_message_by_id(&self, message_id: &str) -> Result<Option<Message>> { pub fn get_message_by_id(&self, message_id: i64) -> Result<Option<Message>> {
let mut stmt = self.0.prepare( let mut stmt = self.0.prepare(
"SELECT id, channel_id, user_id, contents, timestamp "SELECT id, channel_id, user_id, contents, timestamp
FROM chat FROM chat
@@ -104,7 +104,7 @@ impl Database {
} }
/// Get all messages with an ID greater than the given one /// Get all messages with an ID greater than the given one
pub fn get_messages_after_id(&self, message_id: usize) -> Result<Vec<Message>> { pub fn get_messages_after_id(&self, message_id: i64) -> Result<Vec<Message>> {
let mut stmt = self.0.prepare( let mut stmt = self.0.prepare(
"SELECT id, channel_id, user_id, contents, timestamp "SELECT id, channel_id, user_id, contents, timestamp
FROM chat FROM chat