mirror of
https://github.com/chatmail/core.git
synced 2026-05-02 12:56:30 +03:00
Remove AvatarAction::None
Where needed, Option<AvatarAction> can be used to extend it.
This commit is contained in:
@@ -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)?;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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]
|
||||||
|
|||||||
Reference in New Issue
Block a user