Edit and Remove message
This commit is contained in:
+24
-4
@@ -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
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user