From 6b018d6d063aebc6c1e2d4000c4a43cfc8fb5fd5 Mon Sep 17 00:00:00 2001 From: forkless Date: Sun, 31 May 2026 23:45:10 +0200 Subject: [PATCH] Require actual .ini files in backup before allowing delete --- src/main.rs | 10 +++++++++- src/ops.rs | 24 ++++++++++++++++++------ 2 files changed, 27 insertions(+), 7 deletions(-) diff --git a/src/main.rs b/src/main.rs index e9c57bf..00062e0 100644 --- a/src/main.rs +++ b/src/main.rs @@ -867,7 +867,15 @@ fn ini_delete_action( let has_backup = backup_root.exists() && std::fs::read_dir(backup_root) .map(|entries| entries.flatten().any(|e| { - e.file_name().to_string_lossy().starts_with("ini_backup_") + let file_name = e.file_name(); + let name = file_name.to_string_lossy(); + name.starts_with("ini_backup_") + && e.path().is_dir() + && std::fs::read_dir(e.path()).map_or(false, |mut d| { + d.any(|f| f.ok().map_or(false, |f| { + f.file_name().to_string_lossy().ends_with(".ini") + })) + }) })) .unwrap_or(false); diff --git a/src/ops.rs b/src/ops.rs index 5f0ca11..6401fa9 100644 --- a/src/ops.rs +++ b/src/ops.rs @@ -232,9 +232,15 @@ pub fn delete_ini_files(config_path: &Path, backup_root: &Path) -> Result && fs::read_dir(backup_root) .map(|entries| { entries.flatten().any(|e| { - e.file_name() - .to_string_lossy() - .starts_with("ini_backup_") + let file_name = e.file_name(); + let name = file_name.to_string_lossy(); + name.starts_with("ini_backup_") + && e.path().is_dir() + && std::fs::read_dir(e.path()).map_or(false, |mut d| { + d.any(|f| f.ok().map_or(false, |f| { + f.file_name().to_string_lossy().ends_with(".ini") + })) + }) }) }) .unwrap_or(false); @@ -416,9 +422,15 @@ pub fn folder_stats( && fs::read_dir(backup_root) .map(|entries| { entries.flatten().any(|e| { - e.file_name() - .to_string_lossy() - .starts_with("ini_backup_") + let file_name = e.file_name(); + let name = file_name.to_string_lossy(); + name.starts_with("ini_backup_") + && e.path().is_dir() + && std::fs::read_dir(e.path()).map_or(false, |mut d| { + d.any(|f| f.ok().map_or(false, |f| { + f.file_name().to_string_lossy().ends_with(".ini") + })) + }) }) }) .unwrap_or(false);