From 977c8786009488cce399f6fbf7274c969b69631e Mon Sep 17 00:00:00 2001 From: Your Name Date: Fri, 5 Dec 2025 18:51:40 -0800 Subject: [PATCH] Empty trash as much as possible Fixes #1134 --- src/operation/mod.rs | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/src/operation/mod.rs b/src/operation/mod.rs index 49dd415..1442b74 100644 --- a/src/operation/mod.rs +++ b/src/operation/mod.rs @@ -866,6 +866,8 @@ impl Operation { let items = trash::os_limited::list() .map_err(|e| OperationError::from_err(e, &controller))?; let count = items.len(); + let mut errors: Vec = Vec::new(); + for (i, item) in items.into_iter().enumerate() { futures::executor::block_on(async { controller @@ -874,11 +876,31 @@ impl Operation { .map_err(|s| OperationError::from_state(s, &controller)) })?; - controller.set_progress(i as f32 / count as f32); + if let Err(e) = trash::os_limited::purge_all([item]) { + errors.push(e); + } - trash::os_limited::purge_all([item]) - .map_err(|e| OperationError::from_err(e, &controller))?; + controller.set_progress(i as f32 / count as f32); } + + // Report errors at the end + if !errors.is_empty() { + log::warn!("Failed to purge {} items:", errors.len()); + for e in &errors { + log::warn!(" - {e}"); + } + + // Return an error to signal partial failure + return Err(OperationError::from_err( + format!( + "Failed to delete {} of {} items. Check log for details.", + errors.len(), + count + ), + &controller, + )); + } + Ok(()) }) .await