Remove AvatarAction::None

Where needed, Option<AvatarAction> can be used to extend it.
This commit is contained in:
Alexander Krotov
2020-02-13 22:39:42 +03:00
parent 772127d9d8
commit e00d4e0ed8
3 changed files with 37 additions and 41 deletions

View File

@@ -1001,7 +1001,6 @@ pub fn set_profile_image(
contact.param.remove(Param::ProfileImage); contact.param.remove(Param::ProfileImage);
true true
} }
AvatarAction::None => false,
}; };
if changed { if changed {
contact.update_param(context)?; contact.update_param(context)?;

View File

@@ -181,8 +181,8 @@ pub fn dc_receive_imf(
); );
} }
if mime_parser.user_avatar != AvatarAction::None { if let Some(avatar_action) = &mime_parser.user_avatar {
match contact::set_profile_image(&context, from_id, &mime_parser.user_avatar) { match contact::set_profile_image(&context, from_id, avatar_action) {
Ok(()) => { Ok(()) => {
context.call_cb(Event::ChatModified(chat_id)); context.call_cb(Event::ChatModified(chat_id));
} }
@@ -860,21 +860,21 @@ fn create_or_lookup_group(
mime_parser.is_system_message = SystemMessage::GroupNameChanged; mime_parser.is_system_message = SystemMessage::GroupNameChanged;
} else if let Some(value) = mime_parser.get(HeaderDef::ChatContent) { } else if let Some(value) = mime_parser.get(HeaderDef::ChatContent) {
if value == "group-avatar-changed" && mime_parser.group_avatar != AvatarAction::None if value == "group-avatar-changed" {
{ if let Some(avatar_action) = &mime_parser.group_avatar {
// this is just an explicit message containing the 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 // apart from that, the group-avatar is send along with various other messages
mime_parser.is_system_message = SystemMessage::GroupImageChanged; mime_parser.is_system_message = SystemMessage::GroupImageChanged;
better_msg = context.stock_system_msg( better_msg = context.stock_system_msg(
if mime_parser.group_avatar == AvatarAction::Delete { match avatar_action {
StockMessage::MsgGrpImgDeleted AvatarAction::Delete => StockMessage::MsgGrpImgDeleted,
} else { AvatarAction::Change(_) => StockMessage::MsgGrpImgChanged,
StockMessage::MsgGrpImgChanged },
}, "",
"", "",
"", from_id as u32,
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); info!(context, "group-avatar change for {}", chat_id);
if let Ok(mut chat) = Chat::load_from_db(context, 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) => { AvatarAction::Change(profile_image) => {
chat.param.set(Param::ProfileImage, profile_image); chat.param.set(Param::ProfileImage, profile_image);
} }
AvatarAction::Delete => { AvatarAction::Delete => {
chat.param.remove(Param::ProfileImage); chat.param.remove(Param::ProfileImage);
} }
AvatarAction::None => {}
}; };
chat.update_param(context)?; chat.update_param(context)?;
send_EVENT_CHAT_MODIFIED = true; send_EVENT_CHAT_MODIFIED = true;

View File

@@ -46,14 +46,13 @@ pub struct MimeMessage {
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 user_avatar: AvatarAction, pub user_avatar: Option<AvatarAction>,
pub group_avatar: AvatarAction, pub group_avatar: Option<AvatarAction>,
pub(crate) reports: Vec<Report>, pub(crate) reports: Vec<Report>,
} }
#[derive(Debug, PartialEq)] #[derive(Debug, PartialEq)]
pub enum AvatarAction { pub enum AvatarAction {
None,
Delete, Delete,
Change(String), Change(String),
} }
@@ -61,7 +60,6 @@ pub enum AvatarAction {
impl AvatarAction { impl AvatarAction {
pub fn is_change(&self) -> bool { pub fn is_change(&self) -> bool {
match self { match self {
AvatarAction::None => false,
AvatarAction::Delete => false, AvatarAction::Delete => false,
AvatarAction::Change(_) => true, AvatarAction::Change(_) => true,
} }
@@ -163,8 +161,8 @@ impl MimeMessage {
is_system_message: SystemMessage::Unknown, is_system_message: SystemMessage::Unknown,
location_kml: None, location_kml: None,
message_kml: None, message_kml: None,
user_avatar: AvatarAction::None, user_avatar: None,
group_avatar: AvatarAction::None, group_avatar: None,
}; };
parser.parse_mime_recursive(context, &mail)?; parser.parse_mime_recursive(context, &mail)?;
parser.parse_headers(context)?; parser.parse_headers(context)?;
@@ -360,9 +358,9 @@ impl MimeMessage {
Ok(()) Ok(())
} }
fn avatar_action_from_header(&mut self, header_value: String) -> AvatarAction { fn avatar_action_from_header(&mut self, header_value: String) -> Option<AvatarAction> {
if header_value == "0" { if header_value == "0" {
return AvatarAction::Delete; Some(AvatarAction::Delete)
} else { } else {
let mut i = 0; let mut i = 0;
while i != self.parts.len() { while i != self.parts.len() {
@@ -370,7 +368,7 @@ impl MimeMessage {
if let Some(part_filename) = &part.org_filename { if let Some(part_filename) = &part.org_filename {
if part_filename == &header_value { if part_filename == &header_value {
if let Some(blob) = part.param.get(Param::File) { 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); self.parts.remove(i);
return res; return res;
} }
@@ -379,8 +377,8 @@ impl MimeMessage {
} }
i += 1; i += 1;
} }
None
} }
AvatarAction::None
} }
pub fn was_encrypted(&self) -> bool { pub fn was_encrypted(&self) -> bool {
@@ -1249,29 +1247,29 @@ mod tests {
let raw = include_bytes!("../test-data/message/mail_attach_txt.eml"); let raw = include_bytes!("../test-data/message/mail_attach_txt.eml");
let mimeparser = MimeMessage::from_bytes(&t.ctx, &raw[..]).unwrap(); let mimeparser = MimeMessage::from_bytes(&t.ctx, &raw[..]).unwrap();
assert_eq!(mimeparser.user_avatar, AvatarAction::None); assert_eq!(mimeparser.user_avatar, None);
assert_eq!(mimeparser.group_avatar, AvatarAction::None); assert_eq!(mimeparser.group_avatar, None);
let raw = include_bytes!("../test-data/message/mail_with_user_avatar.eml"); let raw = include_bytes!("../test-data/message/mail_with_user_avatar.eml");
let mimeparser = MimeMessage::from_bytes(&t.ctx, &raw[..]).unwrap(); let mimeparser = MimeMessage::from_bytes(&t.ctx, &raw[..]).unwrap();
assert_eq!(mimeparser.parts.len(), 1); assert_eq!(mimeparser.parts.len(), 1);
assert_eq!(mimeparser.parts[0].typ, Viewtype::Text); assert_eq!(mimeparser.parts[0].typ, Viewtype::Text);
assert!(mimeparser.user_avatar.is_change()); assert!(mimeparser.user_avatar.unwrap().is_change());
assert_eq!(mimeparser.group_avatar, AvatarAction::None); assert_eq!(mimeparser.group_avatar, None);
let raw = include_bytes!("../test-data/message/mail_with_user_avatar_deleted.eml"); let raw = include_bytes!("../test-data/message/mail_with_user_avatar_deleted.eml");
let mimeparser = MimeMessage::from_bytes(&t.ctx, &raw[..]).unwrap(); let mimeparser = MimeMessage::from_bytes(&t.ctx, &raw[..]).unwrap();
assert_eq!(mimeparser.parts.len(), 1); assert_eq!(mimeparser.parts.len(), 1);
assert_eq!(mimeparser.parts[0].typ, Viewtype::Text); assert_eq!(mimeparser.parts[0].typ, Viewtype::Text);
assert_eq!(mimeparser.user_avatar, AvatarAction::Delete); assert_eq!(mimeparser.user_avatar, Some(AvatarAction::Delete));
assert_eq!(mimeparser.group_avatar, AvatarAction::None); assert_eq!(mimeparser.group_avatar, None);
let raw = include_bytes!("../test-data/message/mail_with_user_and_group_avatars.eml"); let raw = include_bytes!("../test-data/message/mail_with_user_and_group_avatars.eml");
let mimeparser = MimeMessage::from_bytes(&t.ctx, &raw[..]).unwrap(); let mimeparser = MimeMessage::from_bytes(&t.ctx, &raw[..]).unwrap();
assert_eq!(mimeparser.parts.len(), 1); assert_eq!(mimeparser.parts.len(), 1);
assert_eq!(mimeparser.parts[0].typ, Viewtype::Text); assert_eq!(mimeparser.parts[0].typ, Viewtype::Text);
assert!(mimeparser.user_avatar.is_change()); assert!(mimeparser.user_avatar.unwrap().is_change());
assert!(mimeparser.group_avatar.is_change()); assert!(mimeparser.group_avatar.unwrap().is_change());
// if the Chat-User-Avatar header is missing, the avatar become a normal attachment // 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"); 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(); let mimeparser = MimeMessage::from_bytes(&t.ctx, raw.as_bytes()).unwrap();
assert_eq!(mimeparser.parts.len(), 1); assert_eq!(mimeparser.parts.len(), 1);
assert_eq!(mimeparser.parts[0].typ, Viewtype::Image); assert_eq!(mimeparser.parts[0].typ, Viewtype::Image);
assert_eq!(mimeparser.user_avatar, AvatarAction::None); assert_eq!(mimeparser.user_avatar, None);
assert!(mimeparser.group_avatar.is_change()); assert!(mimeparser.group_avatar.unwrap().is_change());
} }
#[test] #[test]