From c9fdfc32f2f428471d3f0b34fa4d328faac2ddd7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Kl=C3=A4hn?= Date: Sat, 9 Aug 2025 17:22:52 +0200 Subject: [PATCH] Delete info messages on delete requets When receiving a delete request for webxdcs, delete the associated info messages --- src/receive_imf.rs | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/receive_imf.rs b/src/receive_imf.rs index 21dcf1c05..9dde7795c 100644 --- a/src/receive_imf.rs +++ b/src/receive_imf.rs @@ -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.");