diff --git a/src/chat.rs b/src/chat.rs index b8d6c8c52..b08bd17af 100644 --- a/src/chat.rs +++ b/src/chat.rs @@ -4234,6 +4234,9 @@ pub async fn forward_msgs(context: &Context, msg_ids: &[MsgId], chat_id: ChatId) bail!("cannot forward drafts."); } + let mut param = msg.param; + msg.param = Params::new(); + if msg.get_viewtype() != Viewtype::Sticker { msg.param .set_int(Param::Forwarded, src_msg_id.to_u32() as i32); @@ -4243,17 +4246,16 @@ pub async fn forward_msgs(context: &Context, msg_ids: &[MsgId], chat_id: ChatId) msg.viewtype = Viewtype::Text; } - msg.param.remove(Param::GuaranteeE2ee); - msg.param.remove(Param::ForcePlaintext); - msg.param.remove(Param::Cmd); - msg.param.remove(Param::OverrideSenderDisplayname); - msg.param.remove(Param::WebxdcDocument); - msg.param.remove(Param::WebxdcDocumentTimestamp); - msg.param.remove(Param::WebxdcSummary); - msg.param.remove(Param::WebxdcSummaryTimestamp); - msg.param.remove(Param::IsEdited); - msg.param.remove(Param::WebrtcRoom); - msg.param.remove(Param::WebrtcAccepted); + let param = &mut param; + msg.param.steal(param, Param::File); + msg.param.steal(param, Param::Filename); + msg.param.steal(param, Param::Width); + msg.param.steal(param, Param::Height); + msg.param.steal(param, Param::Duration); + msg.param.steal(param, Param::MimeType); + msg.param.steal(param, Param::ProtectQuote); + msg.param.steal(param, Param::Quote); + msg.param.steal(param, Param::Summary1); msg.in_reply_to = None; // do not leak data as group names; a default subject is generated by mimefactory diff --git a/src/param.rs b/src/param.rs index 16c10b033..0640b551e 100644 --- a/src/param.rs +++ b/src/param.rs @@ -433,6 +433,14 @@ impl Params { self.set(key, format!("{value}")); self } + + pub fn steal(&mut self, src: &mut Self, key: Param) -> &mut Self { + let val = src.inner.remove(&key); + if let Some(val) = val { + self.inner.insert(key, val); + } + self + } } #[cfg(test)]