mirror of
https://gitlab.com/comunic/comunicapiv3
synced 2025-06-21 08:55:16 +00:00
Start conversations system migration
This commit is contained in:
@ -2,9 +2,9 @@
|
||||
//!
|
||||
//! @author Pierre Hubert
|
||||
|
||||
use crate::constants::database_tables_names::{CONV_LIST_TABLE, CONV_MESSAGES_TABLE, CONV_MEMBERS_TABLE};
|
||||
use crate::constants::database_tables_names::{CONV_LIST_TABLE, CONV_MEMBERS_TABLE, CONV_MESSAGES_TABLE};
|
||||
use crate::data::conversation::Conversation;
|
||||
use crate::data::conversation_message::ConversationMessage;
|
||||
use crate::data::conversation_message::{ConversationMessage, ConversationMessageFile, ConversationServerMessageType};
|
||||
use crate::data::error::{ExecError, Res, ResultBoxError};
|
||||
use crate::data::new_conversation::NewConversation;
|
||||
use crate::data::new_conversation_message::NewConversationMessage;
|
||||
@ -14,7 +14,7 @@ use crate::helpers::{database, events_helper};
|
||||
use crate::helpers::database::InsertQuery;
|
||||
use crate::helpers::events_helper::Event;
|
||||
use crate::utils::date_utils::time;
|
||||
use crate::utils::user_data_utils::user_data_path;
|
||||
use crate::utils::user_data_utils::delete_user_data_file_if_exists;
|
||||
|
||||
/// Create a new conversation. This method returns the ID of the created conversation
|
||||
pub fn create(conv: &NewConversation) -> ResultBoxError<u64> {
|
||||
@ -377,11 +377,12 @@ pub fn update_message_content(msg_id: u64, new_content: &str) -> ResultBoxError<
|
||||
/// Remove a message from a conversation
|
||||
pub fn delete_message(msg: &ConversationMessage) -> ResultBoxError<()> {
|
||||
|
||||
// Delete associated image (if any)
|
||||
if let Some(img) = &msg.image_path {
|
||||
let path = user_data_path(img.as_ref());
|
||||
if path.exists() {
|
||||
std::fs::remove_file(path)?;
|
||||
// Delete associated files
|
||||
if let Some(file) = &msg.file {
|
||||
delete_user_data_file_if_exists(&file.path)?;
|
||||
|
||||
if let Some(thumb) = &file.thumbnail {
|
||||
delete_user_data_file_if_exists(thumb)?;
|
||||
}
|
||||
}
|
||||
|
||||
@ -523,12 +524,39 @@ fn db_to_conversation_info(row: &database::RowResult) -> ResultBoxError<Conversa
|
||||
|
||||
/// Turn a database entry into a ConversationMessgae object
|
||||
fn db_to_conversation_message(row: &database::RowResult) -> ResultBoxError<ConversationMessage> {
|
||||
let user_id = match row.is_null("user_id")? {
|
||||
true => None,
|
||||
false => Some(row.get_user_id("user_id")?)
|
||||
};
|
||||
|
||||
let file = match row.is_null_or_empty("filepath")? {
|
||||
true => None,
|
||||
false => Some(ConversationMessageFile {
|
||||
path: row.get_str("filepath")?,
|
||||
size: row.get_u64("file_size")?,
|
||||
name: row.get_str("file_name")?,
|
||||
thumbnail: row.get_optional_str("file_thumbnail")?,
|
||||
r#type: row.get_str("file_type")?,
|
||||
})
|
||||
};
|
||||
|
||||
let server_message = match &user_id {
|
||||
Some(_) => None,
|
||||
None => Some(ConversationServerMessageType::from_db(&row.get_str("message")?)?)
|
||||
};
|
||||
|
||||
let message = match server_message {
|
||||
None => row.get_optional_str("message")?,
|
||||
Some(_) => None,
|
||||
};
|
||||
|
||||
Ok(ConversationMessage {
|
||||
id: row.get_u64("id")?,
|
||||
time_sent: row.get_u64("time_insert")?,
|
||||
time_sent: row.get_u64("time_sent")?,
|
||||
conv_id: row.get_u64("conv_id")?,
|
||||
user_id: row.get_user_id("user_id")?,
|
||||
message: row.get_optional_str("message")?,
|
||||
image_path: row.get_optional_str("image_path")?,
|
||||
user_id,
|
||||
message,
|
||||
server_message,
|
||||
file,
|
||||
})
|
||||
}
|
@ -380,6 +380,15 @@ impl<'a> RowResult<'a> {
|
||||
}
|
||||
}
|
||||
|
||||
/// Check out whether a given value is null or empty or not
|
||||
pub fn is_null_or_empty(&self, name: &str) -> ResultBoxError<bool> {
|
||||
if self.is_null(name)? {
|
||||
return Ok(true);
|
||||
}
|
||||
|
||||
Ok(self.get_str(name)?.is_empty())
|
||||
}
|
||||
|
||||
/// Get an optional string => Set to None if string is null / empty
|
||||
pub fn get_optional_str(&self, name: &str) -> ResultBoxError<Option<String>> {
|
||||
match self.is_null(name)? {
|
||||
|
Reference in New Issue
Block a user