diff --git a/src/mimefactory.rs b/src/mimefactory.rs index c8eafdef6..32a64b6a8 100644 --- a/src/mimefactory.rs +++ b/src/mimefactory.rs @@ -933,7 +933,6 @@ impl<'a> MimeFactory<'a> { }; let command = self.msg.param.get_cmd(); let mut placeholdertext = None; - let mut meta_part = None; let send_verified_headers = match chat.typ { Chattype::Single => true, @@ -1119,17 +1118,13 @@ impl<'a> MimeFactory<'a> { if let Some(grpimage) = grpimage { info!(context, "setting group image '{}'", grpimage); - let mut meta = Message { - viewtype: Viewtype::Image, - ..Default::default() - }; - meta.param.set(Param::File, grpimage); - - let (mail, filename_as_sent) = build_body_file(context, &meta, "group-image").await?; - meta_part = Some(mail); - headers - .protected - .push(Header::new("Chat-Group-Avatar".into(), filename_as_sent)); + let avatar = build_avatar_file(context, grpimage) + .await + .context("Cannot attach group image")?; + headers.hidden.push(Header::new( + "Chat-Group-Avatar".into(), + format!("base64:{avatar}"), + )); } if self.msg.viewtype == Viewtype::Sticker { @@ -1253,10 +1248,6 @@ impl<'a> MimeFactory<'a> { parts.push(file_part); } - if let Some(meta_part) = meta_part { - parts.push(meta_part); - } - if let Some(msg_kml_part) = self.get_message_kml_part() { parts.push(msg_kml_part); } @@ -1288,7 +1279,7 @@ impl<'a> MimeFactory<'a> { if self.attach_selfavatar { match context.get_config(Config::Selfavatar).await? { - Some(path) => match build_selfavatar_file(context, &path).await { + Some(path) => match build_avatar_file(context, &path).await { Ok(avatar) => headers.hidden.push(Header::new( "Chat-User-Avatar".into(), format!("base64:{avatar}"), @@ -1497,8 +1488,11 @@ async fn build_body_file( Ok((mail, filename_to_send)) } -async fn build_selfavatar_file(context: &Context, path: &str) -> Result { - let blob = BlobObject::from_path(context, path.as_ref())?; +async fn build_avatar_file(context: &Context, path: &str) -> Result { + let blob = match path.starts_with("$BLOBDIR/") { + true => BlobObject::from_name(context, path.to_string())?, + false => BlobObject::from_path(context, path.as_ref())?, + }; let body = fs::read(blob.to_abs_path()).await?; let encoded_body = wrapped_base64_encode(&body); Ok(encoded_body) diff --git a/src/mimeparser.rs b/src/mimeparser.rs index 56b1efc79..125d43adf 100644 --- a/src/mimeparser.rs +++ b/src/mimeparser.rs @@ -265,8 +265,10 @@ impl MimeMessage { for field in &part.headers { let key = field.get_key().to_lowercase(); - // For now only Chat-User-Avatar can be hidden. - if !headers.contains_key(&key) && key == "chat-user-avatar" { + // For now only avatar headers can be hidden. + if !headers.contains_key(&key) + && (key == "chat-user-avatar" || key == "chat-group-avatar") + { headers.insert(key.to_string(), field.get_value()); } }