mirror of
https://github.com/chatmail/core.git
synced 2026-05-03 13:26:28 +03:00
let mimeparser handle profile-images
This commit is contained in:
committed by
holger krekel
parent
da421438cd
commit
a1f496b019
@@ -37,6 +37,7 @@ pub struct MimeParser<'a> {
|
|||||||
pub is_system_message: SystemMessage,
|
pub is_system_message: SystemMessage,
|
||||||
pub location_kml: Option<location::Kml>,
|
pub location_kml: Option<location::Kml>,
|
||||||
pub message_kml: Option<location::Kml>,
|
pub message_kml: Option<location::Kml>,
|
||||||
|
pub profile_image: Option<Option<String>>,
|
||||||
reports: Vec<Report>,
|
reports: Vec<Report>,
|
||||||
mdns_enabled: bool,
|
mdns_enabled: bool,
|
||||||
parsed_protected_headers: bool,
|
parsed_protected_headers: bool,
|
||||||
@@ -83,6 +84,7 @@ impl<'a> MimeParser<'a> {
|
|||||||
is_system_message: SystemMessage::Unknown,
|
is_system_message: SystemMessage::Unknown,
|
||||||
location_kml: None,
|
location_kml: None,
|
||||||
message_kml: None,
|
message_kml: None,
|
||||||
|
profile_image: None,
|
||||||
mdns_enabled,
|
mdns_enabled,
|
||||||
parsed_protected_headers: false,
|
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 {
|
if self.has_chat_version() && self.parts.len() == 2 {
|
||||||
let need_drop = {
|
let need_drop = {
|
||||||
let textpart = &self.parts[0];
|
let textpart = &self.parts[0];
|
||||||
@@ -638,6 +661,7 @@ impl<'a> MimeParser<'a> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
part.typ = msg_type;
|
part.typ = msg_type;
|
||||||
|
part.org_filename = Some(filename.to_string());
|
||||||
part.mimetype = Some(mime_type);
|
part.mimetype = Some(mime_type);
|
||||||
part.bytes = decoded_data.len();
|
part.bytes = decoded_data.len();
|
||||||
part.param.set(Param::File, blob.as_name());
|
part.param.set(Param::File, blob.as_name());
|
||||||
@@ -851,6 +875,7 @@ pub struct Part {
|
|||||||
pub msg_raw: Option<String>,
|
pub msg_raw: Option<String>,
|
||||||
pub bytes: usize,
|
pub bytes: usize,
|
||||||
pub param: Params,
|
pub param: Params,
|
||||||
|
org_filename: Option<String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// return mimetype and viewtype for a parsed mail
|
/// return mimetype and viewtype for a parsed mail
|
||||||
@@ -1127,4 +1152,21 @@ mod tests {
|
|||||||
assert_eq!(of, "1.0");
|
assert_eq!(of, "1.0");
|
||||||
assert_eq!(mimeparser.parts.len(), 1);
|
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());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
28
test-data/message/mail_with_profile_image.eml
Normal file
28
test-data/message/mail_with_profile_image.eml
Normal file
@@ -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: <tunis3@example.org>
|
||||||
|
From: "=?utf-8?q??=" <tunis4@example.org>
|
||||||
|
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--
|
||||||
14
test-data/message/mail_with_profile_image_deleted.eml
Normal file
14
test-data/message/mail_with_profile_image_deleted.eml
Normal file
@@ -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: <tunis3@example>
|
||||||
|
From: "=?utf-8?q??=" <tunis4@example.org>
|
||||||
|
|
||||||
|
profile image deleted
|
||||||
|
|
||||||
|
--
|
||||||
|
Sent with my Delta Chat Messenger: https://delta.chat
|
||||||
Reference in New Issue
Block a user