move ImageAction parsing to a reusable function

This commit is contained in:
B. Petersen
2019-12-09 17:16:23 +01:00
committed by holger krekel
parent c3fd0889e2
commit ab12a4eb39

View File

@@ -190,6 +190,7 @@ impl<'a> MimeParser<'a> {
self.is_system_message = SystemMessage::LocationStreamingEnabled; self.is_system_message = SystemMessage::LocationStreamingEnabled;
} }
} }
if self.get(HeaderDef::ChatGroupImage).is_some() && !self.parts.is_empty() { if self.get(HeaderDef::ChatGroupImage).is_some() && !self.parts.is_empty() {
let textpart = &self.parts[0]; let textpart = &self.parts[0];
if textpart.typ == Viewtype::Text && self.parts.len() >= 2 { if textpart.typ == Viewtype::Text && self.parts.len() >= 2 {
@@ -200,25 +201,8 @@ impl<'a> MimeParser<'a> {
} }
} }
if let Some(header_value) = self.get(HeaderDef::ChatProfileImage) { if let Some(header_value) = self.get(HeaderDef::ChatProfileImage).cloned() {
if header_value == "0" { self.profile_image = self.image_action_from_header(header_value);
self.profile_image = ImageAction::Delete;
} 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 = ImageAction::Change(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 {
@@ -352,6 +336,29 @@ impl<'a> MimeParser<'a> {
Ok(()) Ok(())
} }
fn image_action_from_header(&mut self, header_value: String) -> ImageAction {
if header_value == "0" {
return ImageAction::Delete;
} else {
let mut i = 0;
while i != self.parts.len() {
let part = &mut 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) {
let res = ImageAction::Change(blob.to_string());
self.parts.remove(i);
return res;
}
break;
}
}
i += 1;
}
}
ImageAction::None
}
pub fn get_last_nonmeta(&self) -> Option<&Part> { pub fn get_last_nonmeta(&self) -> Option<&Part> {
self.parts.iter().rev().find(|part| !part.is_meta) self.parts.iter().rev().find(|part| !part.is_meta)
} }