about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--yt/src/cache/mod.rs28
1 files changed, 20 insertions, 8 deletions
diff --git a/yt/src/cache/mod.rs b/yt/src/cache/mod.rs
index 6ceef25..dfbc276 100644
--- a/yt/src/cache/mod.rs
+++ b/yt/src/cache/mod.rs
@@ -9,7 +9,7 @@
 // If not, see <https://www.gnu.org/licenses/gpl-3.0.txt>.
 
 use anyhow::{Context, Result};
-use log::info;
+use log::{debug, info};
 use tokio::fs;
 
 use crate::{
@@ -26,13 +26,25 @@ async fn invalidate_video(app: &App, video: &Video, hard: bool) -> Result<()> {
     if hard {
         if let Some(path) = &video.cache_path {
             info!("Removing cached video at: '{}'", path.display());
-            fs::remove_file(path).await.with_context(|| {
-                format!(
-                    "Failed to delete video ('{}') cache path: '{}'.",
-                    video.title,
-                    path.display()
-                )
-            })?;
+            if let Err(err) = fs::remove_file(path).await.map_err(|err| err.kind()) {
+                match err {
+                    std::io::ErrorKind::NotFound => {
+                        // The path is already gone
+                        debug!(
+                            "Not actually removing path: '{}'. \
+                             It is already gone.",
+                            path.display()
+                        );
+                    }
+                    err => Err(std::io::Error::from(err)).with_context(|| {
+                        format!(
+                            "Failed to delete video ('{}') cache path: '{}'.",
+                            video.title,
+                            path.display()
+                        )
+                    })?,
+                }
+            }
         }
     }