From d6480c8e0e66702695f72d85df444ba441b9bf2b Mon Sep 17 00:00:00 2001 From: nihil Date: Sun, 11 May 2025 01:01:09 +0200 Subject: [PATCH] implemented sanitize command --- RedundancyFinderCLI/Program.cs | 1 + .../Properties/launchSettings.json | 4 ++ RedundancyFinderCLI/SanitizeCommand.cs | 70 +++++++++++++++++++ 3 files changed, 75 insertions(+) create mode 100644 RedundancyFinderCLI/SanitizeCommand.cs diff --git a/RedundancyFinderCLI/Program.cs b/RedundancyFinderCLI/Program.cs index 2eec723..2383e87 100644 --- a/RedundancyFinderCLI/Program.cs +++ b/RedundancyFinderCLI/Program.cs @@ -16,6 +16,7 @@ internal class Program { config.AddCommand("analyze"); config.AddCommand("delete"); + config.AddCommand("sanitize"); #if DEBUG config.PropagateExceptions(); diff --git a/RedundancyFinderCLI/Properties/launchSettings.json b/RedundancyFinderCLI/Properties/launchSettings.json index c206fc7..dbe6ffb 100644 --- a/RedundancyFinderCLI/Properties/launchSettings.json +++ b/RedundancyFinderCLI/Properties/launchSettings.json @@ -11,6 +11,10 @@ "Delete": { "commandName": "Project", "commandLineArgs": "delete redundancies.json C:\\Users\\daskn\\Pictures\\B\\ -v" + }, + "Sanitize": { + "commandName": "Project", + "commandLineArgs": "sanitize C:\\Users\\daskn\\Pictures\\ -v" } } } \ No newline at end of file diff --git a/RedundancyFinderCLI/SanitizeCommand.cs b/RedundancyFinderCLI/SanitizeCommand.cs new file mode 100644 index 0000000..069fc7f --- /dev/null +++ b/RedundancyFinderCLI/SanitizeCommand.cs @@ -0,0 +1,70 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Diagnostics.CodeAnalysis; +using System.Linq; +using System.Text; +using System.Text.Json; +using System.Text.Json.Serialization; +using System.Threading.Tasks; +using Newtonsoft.Json; +using RedundancyFinder; +using Spectre.Console; +using Spectre.Console.Cli; +namespace RedundancyFinderCLI +{ + internal sealed class SanitizeCommand : Command + { + public sealed class Settings : CommandSettings + { + [Description("Path to sanitize.")] + [CommandArgument(0, "[path]")] + public string? Path { get; init; } + + [Description("Show all information.")] + [CommandOption("-v|--verbose")] + [DefaultValue(false)] + public bool Verbose { get; init; } + + } + public override int Execute([NotNull] CommandContext context, [NotNull] Settings settings) + { + Global.WriteLine($"[white]Sanitizing {settings.Path}[/]"); + Global.WriteLine($"[yellow]Deleting empty folders[/]"); + int count = DeleteEmptyFolders(settings.Path); + + Global.WriteLine($"[green]Deleted [/]{count}[green] empty folders[/]"); + + return 0; + } + + public static int DeleteEmptyFolders(string directoryPath, int count = 0) + { + try + { + // Get all subdirectories + foreach (var subDirectory in Directory.GetDirectories(directoryPath)) + { + // Recursively delete empty folders in subdirectories + count = DeleteEmptyFolders(subDirectory, count); + } + + // Check if the current directory is empty + if (Directory.GetFiles(directoryPath).Length == 0 && Directory.GetDirectories(directoryPath).Length == 0) + { + Directory.Delete(directoryPath); + count++; + Global.WriteLine($"Deleted empty folder: {directoryPath}"); + } + } + catch (Exception ex) + { + Global.WriteLine($"[red]Error deleting folder [/]'{directoryPath}':\n [red]{ex.Message}[/]"); + } + + return count; + } + + + } +}