From 7436368b505953d7603d01ecfbce58540ac268ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Kl=C3=A4hn?= Date: Sat, 9 Aug 2025 17:23:12 +0200 Subject: [PATCH] Delete webxdc info messages in sync --- src/sync.rs | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/sync.rs b/src/sync.rs index 90e302f06..0c8c275f9 100644 --- a/src/sync.rs +++ b/src/sync.rs @@ -11,7 +11,7 @@ use crate::contact::ContactId; use crate::context::Context; use crate::log::LogExt; use crate::log::{info, warn}; -use crate::message::{Message, MsgId, Viewtype}; +use crate::message::{Message, MsgId, Viewtype, get_webxdc_info_messages}; use crate::mimeparser::SystemMessage; use crate::param::Param; use crate::sync::SyncData::{AddQrToken, AlterChat, DeleteQrToken}; @@ -306,10 +306,15 @@ impl Context { async fn sync_message_deletion(&self, msgs: &Vec) -> Result<()> { let mut modified_chat_ids = HashSet::new(); + let mut deleted_info_msgs = vec![]; let mut msg_ids = Vec::new(); for rfc724_mid in msgs { if let Some((msg_id, _)) = message::rfc724_mid_exists(self, rfc724_mid).await? { if let Some(msg) = Message::load_from_db_optional(self, msg_id).await? { + if msg.viewtype == Viewtype::Webxdc { + let info_msgs = get_webxdc_info_messages(&self, &msg).await?; + deleted_info_msgs.extend(&info_msgs); + } message::delete_msg_locally(self, &msg).await?; msg_ids.push(msg.id); modified_chat_ids.insert(msg.chat_id); @@ -320,6 +325,15 @@ impl Context { warn!(self, "Sync message delete: {rfc724_mid:?} not found."); } } + if !deleted_info_msgs.is_empty() { + message::delete_msgs(&self, &deleted_info_msgs).await?; + for msg_id in deleted_info_msgs { + if let Some(msg) = Message::load_from_db_optional(&self, msg_id).await? { + message::delete_msg_locally(&self, &msg).await?; + msg_ids.push(msg.id); + } + } + } message::delete_msgs_locally_done(self, &msg_ids, modified_chat_ids).await?; Ok(()) }