diff --git a/src/contact.rs b/src/contact.rs index b14cd1d86..e73d9f074 100644 --- a/src/contact.rs +++ b/src/contact.rs @@ -1001,7 +1001,6 @@ pub fn set_profile_image( contact.param.remove(Param::ProfileImage); true } - AvatarAction::None => false, }; if changed { contact.update_param(context)?; diff --git a/src/dc_receive_imf.rs b/src/dc_receive_imf.rs index e0bb62fe8..5375d7b81 100644 --- a/src/dc_receive_imf.rs +++ b/src/dc_receive_imf.rs @@ -181,8 +181,8 @@ pub fn dc_receive_imf( ); } - if mime_parser.user_avatar != AvatarAction::None { - match contact::set_profile_image(&context, from_id, &mime_parser.user_avatar) { + if let Some(avatar_action) = &mime_parser.user_avatar { + match contact::set_profile_image(&context, from_id, avatar_action) { Ok(()) => { context.call_cb(Event::ChatModified(chat_id)); } @@ -860,21 +860,21 @@ fn create_or_lookup_group( mime_parser.is_system_message = SystemMessage::GroupNameChanged; } else if let Some(value) = mime_parser.get(HeaderDef::ChatContent) { - if value == "group-avatar-changed" && mime_parser.group_avatar != AvatarAction::None - { - // this is just an explicit message containing the group-avatar, - // apart from that, the group-avatar is send along with various other messages - mime_parser.is_system_message = SystemMessage::GroupImageChanged; - better_msg = context.stock_system_msg( - if mime_parser.group_avatar == AvatarAction::Delete { - StockMessage::MsgGrpImgDeleted - } else { - StockMessage::MsgGrpImgChanged - }, - "", - "", - from_id as u32, - ) + if value == "group-avatar-changed" { + if let Some(avatar_action) = &mime_parser.group_avatar { + // this is just an explicit message containing the group-avatar, + // apart from that, the group-avatar is send along with various other messages + mime_parser.is_system_message = SystemMessage::GroupImageChanged; + better_msg = context.stock_system_msg( + match avatar_action { + AvatarAction::Delete => StockMessage::MsgGrpImgDeleted, + AvatarAction::Change(_) => StockMessage::MsgGrpImgChanged, + }, + "", + "", + from_id as u32, + ) + } } } } @@ -1004,17 +1004,16 @@ fn create_or_lookup_group( } } } - if mime_parser.group_avatar != AvatarAction::None { + if let Some(avatar_action) = &mime_parser.group_avatar { info!(context, "group-avatar change for {}", chat_id); if let Ok(mut chat) = Chat::load_from_db(context, chat_id) { - match &mime_parser.group_avatar { + match avatar_action { AvatarAction::Change(profile_image) => { chat.param.set(Param::ProfileImage, profile_image); } AvatarAction::Delete => { chat.param.remove(Param::ProfileImage); } - AvatarAction::None => {} }; chat.update_param(context)?; send_EVENT_CHAT_MODIFIED = true; diff --git a/src/mimeparser.rs b/src/mimeparser.rs index e8a665c8b..3c059b4fb 100644 --- a/src/mimeparser.rs +++ b/src/mimeparser.rs @@ -46,14 +46,13 @@ pub struct MimeMessage { pub is_system_message: SystemMessage, pub location_kml: Option, pub message_kml: Option, - pub user_avatar: AvatarAction, - pub group_avatar: AvatarAction, + pub user_avatar: Option, + pub group_avatar: Option, pub(crate) reports: Vec, } #[derive(Debug, PartialEq)] pub enum AvatarAction { - None, Delete, Change(String), } @@ -61,7 +60,6 @@ pub enum AvatarAction { impl AvatarAction { pub fn is_change(&self) -> bool { match self { - AvatarAction::None => false, AvatarAction::Delete => false, AvatarAction::Change(_) => true, } @@ -163,8 +161,8 @@ impl MimeMessage { is_system_message: SystemMessage::Unknown, location_kml: None, message_kml: None, - user_avatar: AvatarAction::None, - group_avatar: AvatarAction::None, + user_avatar: None, + group_avatar: None, }; parser.parse_mime_recursive(context, &mail)?; parser.parse_headers(context)?; @@ -360,9 +358,9 @@ impl MimeMessage { Ok(()) } - fn avatar_action_from_header(&mut self, header_value: String) -> AvatarAction { + fn avatar_action_from_header(&mut self, header_value: String) -> Option { if header_value == "0" { - return AvatarAction::Delete; + Some(AvatarAction::Delete) } else { let mut i = 0; while i != self.parts.len() { @@ -370,7 +368,7 @@ impl MimeMessage { if let Some(part_filename) = &part.org_filename { if part_filename == &header_value { if let Some(blob) = part.param.get(Param::File) { - let res = AvatarAction::Change(blob.to_string()); + let res = Some(AvatarAction::Change(blob.to_string())); self.parts.remove(i); return res; } @@ -379,8 +377,8 @@ impl MimeMessage { } i += 1; } + None } - AvatarAction::None } pub fn was_encrypted(&self) -> bool { @@ -1249,29 +1247,29 @@ mod tests { let raw = include_bytes!("../test-data/message/mail_attach_txt.eml"); let mimeparser = MimeMessage::from_bytes(&t.ctx, &raw[..]).unwrap(); - assert_eq!(mimeparser.user_avatar, AvatarAction::None); - assert_eq!(mimeparser.group_avatar, AvatarAction::None); + assert_eq!(mimeparser.user_avatar, None); + assert_eq!(mimeparser.group_avatar, None); let raw = include_bytes!("../test-data/message/mail_with_user_avatar.eml"); let mimeparser = MimeMessage::from_bytes(&t.ctx, &raw[..]).unwrap(); assert_eq!(mimeparser.parts.len(), 1); assert_eq!(mimeparser.parts[0].typ, Viewtype::Text); - assert!(mimeparser.user_avatar.is_change()); - assert_eq!(mimeparser.group_avatar, AvatarAction::None); + assert!(mimeparser.user_avatar.unwrap().is_change()); + assert_eq!(mimeparser.group_avatar, None); let raw = include_bytes!("../test-data/message/mail_with_user_avatar_deleted.eml"); let mimeparser = MimeMessage::from_bytes(&t.ctx, &raw[..]).unwrap(); assert_eq!(mimeparser.parts.len(), 1); assert_eq!(mimeparser.parts[0].typ, Viewtype::Text); - assert_eq!(mimeparser.user_avatar, AvatarAction::Delete); - assert_eq!(mimeparser.group_avatar, AvatarAction::None); + assert_eq!(mimeparser.user_avatar, Some(AvatarAction::Delete)); + assert_eq!(mimeparser.group_avatar, None); let raw = include_bytes!("../test-data/message/mail_with_user_and_group_avatars.eml"); let mimeparser = MimeMessage::from_bytes(&t.ctx, &raw[..]).unwrap(); assert_eq!(mimeparser.parts.len(), 1); assert_eq!(mimeparser.parts[0].typ, Viewtype::Text); - assert!(mimeparser.user_avatar.is_change()); - assert!(mimeparser.group_avatar.is_change()); + assert!(mimeparser.user_avatar.unwrap().is_change()); + assert!(mimeparser.group_avatar.unwrap().is_change()); // if the Chat-User-Avatar header is missing, the avatar become a normal attachment let raw = include_bytes!("../test-data/message/mail_with_user_and_group_avatars.eml"); @@ -1280,8 +1278,8 @@ mod tests { let mimeparser = MimeMessage::from_bytes(&t.ctx, raw.as_bytes()).unwrap(); assert_eq!(mimeparser.parts.len(), 1); assert_eq!(mimeparser.parts[0].typ, Viewtype::Image); - assert_eq!(mimeparser.user_avatar, AvatarAction::None); - assert!(mimeparser.group_avatar.is_change()); + assert_eq!(mimeparser.user_avatar, None); + assert!(mimeparser.group_avatar.unwrap().is_change()); } #[test]