diff --git a/src/mimeparser.rs b/src/mimeparser.rs index c3d43d2f2..532863819 100644 --- a/src/mimeparser.rs +++ b/src/mimeparser.rs @@ -394,7 +394,7 @@ impl MimeMessage { if !subj.is_empty() { for part in self.parts.iter_mut() { - if part.typ == Viewtype::Text { + if !part.msg.is_empty() { part.msg = format!("{} – {}", subj, part.msg); break; } @@ -1420,7 +1420,14 @@ mod tests { #![allow(clippy::indexing_slicing)] use super::*; - use crate::test_utils::*; + use crate::{ + chatlist::Chatlist, + config::Config, + constants::Blocked, + dc_receive_imf::dc_receive_imf, + message::{Message, MessageState, MessengerMessage}, + test_utils::*, + }; use mailparse::ParsedMail; impl AvatarAction { @@ -2085,7 +2092,7 @@ MDYyMDYxNTE1RTlDOEE4Cj4+CnN0YXJ0eHJlZgo4Mjc4CiUlRU9GCg== assert_eq!(message.parts.len(), 1); assert_eq!(message.parts[0].typ, Viewtype::File); - assert_eq!(message.parts[0].msg, "Hello!"); + assert_eq!(message.parts[0].msg, "Mail with inline attachment – Hello!"); } #[async_std::test] @@ -2180,7 +2187,7 @@ CWt6wx7fiLp0qS9RrX75g6Gqw7nfCs6EcBERcIPt7DTe8VStJwf3LWqVwxl4gQl46yhfoqwEO+I= assert_eq!(message.parts.len(), 1); assert_eq!(message.parts[0].typ, Viewtype::Image); - assert_eq!(message.parts[0].msg, "Test"); + assert_eq!(message.parts[0].msg, "example – Test"); } #[async_std::test] @@ -2252,7 +2259,7 @@ CWt6wx7fiLp0qS9RrX75g6Gqw7nfCs6EcBERcIPt7DTe8VStJwf3LWqVwxl4gQl46yhfoqwEO+I= assert_eq!(message.parts.len(), 1); assert_eq!(message.parts[0].typ, Viewtype::Image); - assert_eq!(message.parts[0].msg, "Test"); + assert_eq!(message.parts[0].msg, "Test subject – Test"); } // Outlook specifies filename in the "name" attribute of Content-Type @@ -2326,7 +2333,7 @@ CWt6wx7fiLp0qS9RrX75g6Gqw7nfCs6EcBERcIPt7DTe8VStJwf3LWqVwxl4gQl46yhfoqwEO+I= assert_eq!(message.parts.len(), 1); assert_eq!(message.parts[0].typ, Viewtype::Image); - assert_eq!(message.parts[0].msg, "Test"); + assert_eq!(message.parts[0].msg, "Delta Chat is great stuff! – Test"); } #[test] @@ -2520,4 +2527,39 @@ On 2020-10-25, Bob wrote: assert_eq!(mimeparser.parts[0].msg, "YIPPEEEEEE\n\nMulti-line"); assert_eq!(mimeparser.parts[0].param.get(Param::Quote).unwrap(), "Now?"); } + + #[async_std::test] + async fn test_add_subj_to_multimedia_msg() { + let t = TestContext::new_alice().await; + t.set_config(Config::ShowEmails, Some("2")).await.unwrap(); + dc_receive_imf( + &t.ctx, + include_bytes!("../test-data/message/subj_with_multimedia_msg.eml"), + "INBOX", + 1, + false, + ) + .await + .unwrap(); + + let chats = Chatlist::try_load(&t.ctx, 0, None, None).await.unwrap(); + let msg_id = chats.get_msg_id(0).unwrap(); + let msg = Message::load_from_db(&t.ctx, msg_id).await.unwrap(); + + assert_eq!( + msg.text.as_ref().unwrap(), + "subj with important info – body text" + ); + assert_eq!(msg.viewtype, Viewtype::Image); + assert_eq!(msg.error(), None); + assert_eq!(msg.is_dc_message, MessengerMessage::No); + assert_eq!(msg.chat_blocked, Blocked::Deaddrop); + assert_eq!(msg.state, MessageState::InFresh); + assert_eq!(msg.get_filebytes(&t).await, 2115); + assert!(msg.get_file(&t).is_some()); + assert_eq!(msg.get_filename().unwrap(), "avatar64x64.png"); + assert_eq!(msg.get_width(), 64); + assert_eq!(msg.get_height(), 64); + assert_eq!(msg.get_filemime().unwrap(), "image/png"); + } } diff --git a/test-data/message/subj_with_multimedia_msg.eml b/test-data/message/subj_with_multimedia_msg.eml new file mode 100644 index 000000000..7e1be823f --- /dev/null +++ b/test-data/message/subj_with_multimedia_msg.eml @@ -0,0 +1,67 @@ +From: Hocuri +Subject: subj with important info +To: alice@example.com +Message-ID: <6e107266-b2bd-e87f-4996-29b000abcfb0@testrun.org> +Date: Thu, 17 Dec 2020 15:38:45 +0100 +User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 + Thunderbird/78.5.1 +MIME-Version: 1.0 +Content-Type: multipart/mixed; + boundary="------------BC183726BE35A99129BAD65F" +Content-Language: de-DE + +This is a multi-part message in MIME format. +--------------BC183726BE35A99129BAD65F +Content-Type: text/plain; charset=utf-8 +Content-Transfer-Encoding: 7bit + +body text + +--------------BC183726BE35A99129BAD65F +Content-Type: image/png; + name="avatar64x64.png" +Content-Transfer-Encoding: base64 +Content-Disposition: attachment; + filename="avatar64x64.png" + +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 +AElFTkSuQmCC +--------------BC183726BE35A99129BAD65F--