diff --git a/src/blob.rs b/src/blob.rs index b04d2dfea..ba46a1e96 100644 --- a/src/blob.rs +++ b/src/blob.rs @@ -377,27 +377,10 @@ impl<'a> BlobObject<'a> { true } - pub fn recode_to_avatar_size(&self, context: &Context) -> Result<(), BlobError> { + pub async fn recode_to_avatar_size(&self, context: &Context) -> Result<(), BlobError> { let blob_abs = self.to_abs_path(); - let img = image::open(&blob_abs).map_err(|err| BlobError::RecodeFailure { - blobdir: context.get_blobdir().to_path_buf(), - blobname: blob_abs.to_str().unwrap_or_default().to_string(), - cause: err, - })?; - if img.width() <= AVATAR_SIZE && img.height() <= AVATAR_SIZE { - return Ok(()); - } - - let img = img.thumbnail(AVATAR_SIZE, AVATAR_SIZE); - - img.save(&blob_abs).map_err(|err| BlobError::WriteFailure { - blobdir: context.get_blobdir().to_path_buf(), - blobname: blob_abs.to_str().unwrap_or_default().to_string(), - cause: err.into(), - })?; - - Ok(()) + self.recode_to_size(context, blob_abs, AVATAR_SIZE).await } pub async fn recode_to_image_size(&self, context: &Context) -> Result<(), BlobError> { @@ -459,7 +442,7 @@ impl<'a> BlobObject<'a> { cause: err.into(), })?; } - + Ok(()) } diff --git a/src/chat.rs b/src/chat.rs index 10f375041..f0cf7d913 100644 --- a/src/chat.rs +++ b/src/chat.rs @@ -2609,7 +2609,7 @@ pub async fn set_chat_profile_image( _ => Err(err), }, }?; - image_blob.recode_to_avatar_size(context)?; + image_blob.recode_to_avatar_size(context).await?; chat.param.set(Param::ProfileImage, image_blob.as_name()); msg.param.set(Param::Arg, image_blob.as_name()); msg.text = Some( diff --git a/src/config.rs b/src/config.rs index 73dc15da7..7ea8909a2 100644 --- a/src/config.rs +++ b/src/config.rs @@ -217,7 +217,7 @@ impl Context { match value { Some(value) => { let blob = BlobObject::new_from_path(&self, value).await?; - blob.recode_to_avatar_size(self)?; + blob.recode_to_avatar_size(self).await?; self.sql .set_raw_config(self, key, Some(blob.as_name())) .await