diff --git a/src/mimeparser.rs b/src/mimeparser.rs index ab3073cee..15890b983 100644 --- a/src/mimeparser.rs +++ b/src/mimeparser.rs @@ -37,6 +37,7 @@ pub struct MimeParser<'a> { pub is_system_message: SystemMessage, pub location_kml: Option, pub message_kml: Option, + pub profile_image: Option>, reports: Vec, mdns_enabled: bool, parsed_protected_headers: bool, @@ -83,6 +84,7 @@ impl<'a> MimeParser<'a> { is_system_message: SystemMessage::Unknown, location_kml: None, message_kml: None, + profile_image: None, mdns_enabled, parsed_protected_headers: false, }; @@ -191,6 +193,27 @@ impl<'a> MimeParser<'a> { } } + if let Some(header_value) = self.lookup_field("Chat-Profile-Image") { + if header_value == "0" { + self.profile_image = Some(None); + } else { + let mut i = 0; + while i != self.parts.len() { + let part = &self.parts[i]; + if let Some(part_filename) = &part.org_filename { + if part_filename == header_value { + if let Some(blob) = part.param.get(Param::File) { + self.profile_image = Some(Some(blob.to_string())); + self.parts.remove(i); + } + break; + } + } + i += 1; + } + } + } + if self.has_chat_version() && self.parts.len() == 2 { let need_drop = { let textpart = &self.parts[0]; @@ -638,6 +661,7 @@ impl<'a> MimeParser<'a> { } part.typ = msg_type; + part.org_filename = Some(filename.to_string()); part.mimetype = Some(mime_type); part.bytes = decoded_data.len(); part.param.set(Param::File, blob.as_name()); @@ -851,6 +875,7 @@ pub struct Part { pub msg_raw: Option, pub bytes: usize, pub param: Params, + org_filename: Option, } /// return mimetype and viewtype for a parsed mail @@ -1127,4 +1152,21 @@ mod tests { assert_eq!(of, "1.0"); assert_eq!(mimeparser.parts.len(), 1); } + + #[test] + fn test_mimeparser_with_profile_image() { + let t = dummy_context(); + + let raw = include_bytes!("../test-data/message/mail_with_profile_image.eml"); + let mimeparser = MimeParser::from_bytes(&t.ctx, &raw[..]).unwrap(); + assert_eq!(mimeparser.parts.len(), 1); + assert!(mimeparser.profile_image.is_some()); + assert!(mimeparser.profile_image.unwrap().is_some()); + + let raw = include_bytes!("../test-data/message/mail_with_profile_image_deleted.eml"); + let mimeparser = MimeParser::from_bytes(&t.ctx, &raw[..]).unwrap(); + assert_eq!(mimeparser.parts.len(), 1); + assert!(mimeparser.profile_image.is_some()); + assert!(mimeparser.profile_image.unwrap().is_none()); + } } diff --git a/test-data/message/mail_with_profile_image.eml b/test-data/message/mail_with_profile_image.eml new file mode 100644 index 000000000..e7f4a21d4 --- /dev/null +++ b/test-data/message/mail_with_profile_image.eml @@ -0,0 +1,28 @@ +Chat-Profile-Image: avatar.png +Subject: =?utf-8?q?Chat=3A_this_is_a_message_with_a_=2E=2E=2E?= +Message-ID: Mr.wOBwZNbBTVt.NZpmQDwWoNk@example.org +In-Reply-To: Mr.ETXqza5-WpB.zDEYOLECxAw@example.org +Date: Sun, 08 Dec 2019 23:12:55 +0000 +X-Mailer: Delta Chat Core 1.0.0-beta.12/CLI +Chat-Version: 1.0 +To: +From: "=?utf-8?q??=" +Content-Type: multipart/mixed; boundary="luTiGu6GBoVLCvTkzVtmZmwsmhkNMw" + + +--luTiGu6GBoVLCvTkzVtmZmwsmhkNMw +Content-Type: text/plain; charset=utf-8 + +this is a message with a profile-image attached + +-- +Sent with my Delta Chat Messenger: https://delta.chat + +--luTiGu6GBoVLCvTkzVtmZmwsmhkNMw +Content-Type: image/png +Content-Disposition: attachment; filename="avatar.png" +Content-Transfer-Encoding: base64 + +iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAABhGlDQ1BJQ0MgcHJvZmlsZQAAKJF9kT1Iw0AcxV9TpUUqIhYRcchQnSyIFXHUKhShQqgVWnUwufQLmjQkKS6OgmvBwY/FqoOLs64OroIg+AHi4uqk6CIl/q8ptIjx4Lgf7+497t4BQr3MNKtrAtB020wl4mImuyoGXhFCEIOIoV9mljEnSUl4jq97+Ph6F+VZ3uf+HL1qzmKATySeZYZpE28QT2/aBud94jAryirxOfG4SRckfuS64vIb50KTBZ4ZNtOpeeIwsVjoYKWDWdHUiKeII6qmU76QcVnlvMVZK1dZ6578haGcvrLMdZojSGARS5AgQkEVJZRhI0qrToqFFO3HPfzDTb9ELoVcJTByLKACDXLTD/4Hv7u18rFJNykUB7pfHOdjFAjsAo2a43wfO07jBPA/A1d621+pAzOfpNfaWuQI6NsGLq7bmrIHXO4AQ0+GbMpNyU9TyOeB9zP6piwwcAv0rLm9tfZx+gCkqavkDXBwCIwVKHvd493Bzt7+PdPq7wd6nHKqMKZUTAAAAANQTFRF/sYAhYATyAAAAAlwSFlzAAAuIwAALiMBeKU/dgAAAAd0SU1FB+MMCBY0D29+N8YAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAADElEQVQI12NgIA0AAAAwAAHHqoWOAAAAAElFTkSuQmCC + +--luTiGu6GBoVLCvTkzVtmZmwsmhkNMw-- diff --git a/test-data/message/mail_with_profile_image_deleted.eml b/test-data/message/mail_with_profile_image_deleted.eml new file mode 100644 index 000000000..08e4f7dfa --- /dev/null +++ b/test-data/message/mail_with_profile_image_deleted.eml @@ -0,0 +1,14 @@ +Content-Type: text/plain; charset=utf-8 +Chat-Profile-Image: 0 +Subject: =?utf-8?q?Chat=3A_profile_image_deleted?= +Message-ID: Mr.tsgoJgn-cBf.0TkFWKJzeSp@example.org +Date: Sun, 08 Dec 2019 23:28:30 +0000 +X-Mailer: Delta Chat Core 1.0.0-beta.12/CLI +Chat-Version: 1.0 +To: +From: "=?utf-8?q??=" + +profile image deleted + +-- +Sent with my Delta Chat Messenger: https://delta.chat