mirror of
https://github.com/chatmail/core.git
synced 2026-05-08 01:16:31 +03:00
feat: Send Chat-Group-Avatar as inline base64 (#5253)
Before group avatar was sent as an attachment. Let's do the same as with user avatar and send group avatar as base64. Receiver code uses the same functions for user and chat avatars, so base64 avatars are supported for most receivers already.
This commit is contained in:
@@ -933,7 +933,6 @@ impl<'a> MimeFactory<'a> {
|
|||||||
};
|
};
|
||||||
let command = self.msg.param.get_cmd();
|
let command = self.msg.param.get_cmd();
|
||||||
let mut placeholdertext = None;
|
let mut placeholdertext = None;
|
||||||
let mut meta_part = None;
|
|
||||||
|
|
||||||
let send_verified_headers = match chat.typ {
|
let send_verified_headers = match chat.typ {
|
||||||
Chattype::Single => true,
|
Chattype::Single => true,
|
||||||
@@ -1119,17 +1118,13 @@ impl<'a> MimeFactory<'a> {
|
|||||||
|
|
||||||
if let Some(grpimage) = grpimage {
|
if let Some(grpimage) = grpimage {
|
||||||
info!(context, "setting group image '{}'", grpimage);
|
info!(context, "setting group image '{}'", grpimage);
|
||||||
let mut meta = Message {
|
let avatar = build_avatar_file(context, grpimage)
|
||||||
viewtype: Viewtype::Image,
|
.await
|
||||||
..Default::default()
|
.context("Cannot attach group image")?;
|
||||||
};
|
headers.hidden.push(Header::new(
|
||||||
meta.param.set(Param::File, grpimage);
|
"Chat-Group-Avatar".into(),
|
||||||
|
format!("base64:{avatar}"),
|
||||||
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));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if self.msg.viewtype == Viewtype::Sticker {
|
if self.msg.viewtype == Viewtype::Sticker {
|
||||||
@@ -1253,10 +1248,6 @@ impl<'a> MimeFactory<'a> {
|
|||||||
parts.push(file_part);
|
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() {
|
if let Some(msg_kml_part) = self.get_message_kml_part() {
|
||||||
parts.push(msg_kml_part);
|
parts.push(msg_kml_part);
|
||||||
}
|
}
|
||||||
@@ -1288,7 +1279,7 @@ impl<'a> MimeFactory<'a> {
|
|||||||
|
|
||||||
if self.attach_selfavatar {
|
if self.attach_selfavatar {
|
||||||
match context.get_config(Config::Selfavatar).await? {
|
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(
|
Ok(avatar) => headers.hidden.push(Header::new(
|
||||||
"Chat-User-Avatar".into(),
|
"Chat-User-Avatar".into(),
|
||||||
format!("base64:{avatar}"),
|
format!("base64:{avatar}"),
|
||||||
@@ -1497,8 +1488,11 @@ async fn build_body_file(
|
|||||||
Ok((mail, filename_to_send))
|
Ok((mail, filename_to_send))
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn build_selfavatar_file(context: &Context, path: &str) -> Result<String> {
|
async fn build_avatar_file(context: &Context, path: &str) -> Result<String> {
|
||||||
let blob = BlobObject::from_path(context, path.as_ref())?;
|
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 body = fs::read(blob.to_abs_path()).await?;
|
||||||
let encoded_body = wrapped_base64_encode(&body);
|
let encoded_body = wrapped_base64_encode(&body);
|
||||||
Ok(encoded_body)
|
Ok(encoded_body)
|
||||||
|
|||||||
@@ -265,8 +265,10 @@ impl MimeMessage {
|
|||||||
for field in &part.headers {
|
for field in &part.headers {
|
||||||
let key = field.get_key().to_lowercase();
|
let key = field.get_key().to_lowercase();
|
||||||
|
|
||||||
// For now only Chat-User-Avatar can be hidden.
|
// For now only avatar headers can be hidden.
|
||||||
if !headers.contains_key(&key) && key == "chat-user-avatar" {
|
if !headers.contains_key(&key)
|
||||||
|
&& (key == "chat-user-avatar" || key == "chat-group-avatar")
|
||||||
|
{
|
||||||
headers.insert(key.to_string(), field.get_value());
|
headers.insert(key.to_string(), field.get_value());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user