diff --git a/src/service/media.rs b/src/service/media.rs index 836e8ef9..0d231c67 100644 --- a/src/service/media.rs +++ b/src/service/media.rs @@ -117,16 +117,11 @@ impl Service { /// Deletes a media object and all associated thumbnails. #[tracing::instrument(skip(self))] pub(crate) async fn delete(&self, mxc: OwnedMxcUri) -> Result<()> { - let (_, key) = self - .db - .search_file_metadata(mxc.clone(), 0, 0) - .inspect_err( - |error| warn!(%error, "Failed to find original media key"), - )? - .ok_or(Error::BadRequest(ErrorKind::NotFound, "Media not found"))?; + let mut any_files = false; - let thumbnails = self.db.search_thumbnails_metadata(mxc)?; + let thumbnails = self.db.search_thumbnails_metadata(mxc.clone())?; for (_, thumbnail_key) in thumbnails { + any_files = true; self.delete_by_key(thumbnail_key.clone()).await.inspect_err( |error| { warn!( @@ -140,11 +135,25 @@ impl Service { )?; } - self.delete_by_key(key).await.inspect_err( - |error| warn!(%error, "Failed to delete original media"), - )?; + if let Some((_, key)) = + self.db.search_file_metadata(mxc, 0, 0).inspect_err( + |error| warn!(%error, "Failed to find original media key"), + )? + { + any_files = true; + self.delete_by_key(key).await.inspect_err( + |error| warn!(%error, "Failed to delete original media"), + )?; + } - Ok(()) + if any_files { + Ok(()) + } else { + let error = + Error::BadRequest(ErrorKind::NotFound, "Media not found"); + warn!(%error, "Failed to delete media"); + Err(error) + } } /// Deletes a specific media key, which may or may not be a thumbnail.