Delete info messages on delete requets

When receiving a delete request for webxdcs, delete the associated info
messages
This commit is contained in:
Sebastian Klähn
2025-08-09 17:22:52 +02:00
parent 0ce2f35909
commit c9fdfc32f2

View File

@@ -33,7 +33,8 @@ use crate::log::LogExt;
use crate::log::{info, warn};
use crate::logged_debug_assert;
use crate::message::{
self, Message, MessageState, MessengerMessage, MsgId, Viewtype, rfc724_mid_exists,
self, Message, MessageState, MessengerMessage, MsgId, Viewtype, get_webxdc_info_messages,
rfc724_mid_exists,
};
use crate::mimeparser::{AvatarAction, MimeMessage, SystemMessage, parse_message_ids};
use crate::param::{Param, Params};
@@ -2295,12 +2296,18 @@ async fn handle_edit_delete(
let mut modified_chat_ids = HashSet::new();
let mut msg_ids = Vec::new();
let mut deleted_info_msgs = vec![];
let rfc724_mid_vec: Vec<&str> = rfc724_mid_list.split_whitespace().collect();
for rfc724_mid in rfc724_mid_vec {
if let Some((msg_id, _)) =
message::rfc724_mid_exists(context, rfc724_mid).await?
{
if let Some(msg) = Message::load_from_db_optional(context, msg_id).await? {
if msg.viewtype == Viewtype::Webxdc {
let info_msgs = get_webxdc_info_messages(context, &msg).await?;
deleted_info_msgs.extend(&info_msgs);
}
if msg.from_id == from_id {
message::delete_msg_locally(context, &msg).await?;
msg_ids.push(msg.id);
@@ -2315,6 +2322,15 @@ async fn handle_edit_delete(
warn!(context, "Delete message: {rfc724_mid:?} not found.");
}
}
if !deleted_info_msgs.is_empty() {
message::delete_msgs(context, &deleted_info_msgs).await?;
for msg_id in deleted_info_msgs {
if let Some(msg) = Message::load_from_db_optional(context, msg_id).await? {
message::delete_msg_locally(context, &msg).await?;
msg_ids.push(msg.id);
}
}
}
message::delete_msgs_locally_done(context, &msg_ids, modified_chat_ids).await?;
} else {
warn!(context, "Delete message: Not encrypted.");