From e790785db823d3e7de64c29f5e8e66ed28cd88d8 Mon Sep 17 00:00:00 2001 From: strawberry Date: Sun, 25 Aug 2024 11:49:38 -0400 Subject: [PATCH] fix: force argument for delete past remote media wasn't fully functional Signed-off-by: strawberry --- src/service/media/mod.rs | 34 ++++++++++++++++++++++++++++++---- 1 file changed, 30 insertions(+), 4 deletions(-) diff --git a/src/service/media/mod.rs b/src/service/media/mod.rs index 698f7dc2..ea225ae6 100644 --- a/src/service/media/mod.rs +++ b/src/service/media/mod.rs @@ -203,7 +203,20 @@ impl Service { let path = self.get_media_file(&key); debug!("MXC path: {path:?}"); - let file_metadata = fs::metadata(path.clone()).await?; + let file_metadata = match fs::metadata(path.clone()).await { + Ok(file_metadata) => file_metadata, + Err(e) => { + if force { + error!("Failed to obtain file metadata for MXC {mxc} at file path \"{path:?}\", skipping: {e}"); + continue; + } + + return Err!(Database( + "Failed to obtain file metadata for MXC {mxc} at file path \"{path:?}\": {e}" + )); + }, + }; + debug!("File metadata: {file_metadata:?}"); let file_created_at = match file_metadata.created() { @@ -214,9 +227,10 @@ impl Service { }, Err(err) => { if force { - error!("Could not delete MXC path {path:?}: {err:?}. Skipping..."); + error!("Could not delete MXC {mxc} at path {path:?}: {err:?}. Skipping..."); continue; } + return Err(err.into()); }, }; @@ -240,8 +254,20 @@ impl Service { for mxc in remote_mxcs { let mxc: Mxc<'_> = mxc.as_str().try_into()?; debug_info!("Deleting MXC {mxc} from database and filesystem"); - self.delete(&mxc).await?; - deletion_count = deletion_count.saturating_add(1); + + match self.delete(&mxc).await { + Ok(()) => { + deletion_count = deletion_count.saturating_add(1); + }, + Err(e) => { + if force { + warn!("Failed to delete {mxc}, ignoring error and skipping: {e}"); + continue; + } + + return Err!(Database(warn!("Failed to delete MXC {mxc}: {e}"))); + }, + } } Ok(deletion_count)