diff --git a/Commands/DeleteAllCommand.cs b/Commands/DeleteAllCommand.cs index e69de29..a531664 100644 --- a/Commands/DeleteAllCommand.cs +++ b/Commands/DeleteAllCommand.cs @@ -0,0 +1,55 @@ +using TBDel.Services; + +namespace TBDel.Commands; + +public class DeleteCommand +{ + public static async Task DeleteAll() + { + var dbService = new DbService(); + var allFiles = await dbService.GetFileEntriesAsync(); + var allFolders = await dbService.GetFolderEntriesAsync(); + + if (allFiles.Count == 0 && allFolders.Count == 0) + { + Console.WriteLine("No files or folders found."); + return; + } + + Console.ForegroundColor = ConsoleColor.Yellow; + Console.WriteLine($"Are you sure you want to permanently delete {allFiles.Count} file(s) and {allFolders.Count} folder(s)? (y/N)"); + Console.ResetColor(); + var input = Console.ReadLine(); + if (input != "y") + { + Console.ForegroundColor = ConsoleColor.Red; + Console.WriteLine("Operation cancelled."); + Console.ResetColor(); + return; + } + + var toBeDeletedFiles = new List(); + var toBeDeletedFolders = new List(); + foreach (var file in allFiles) + { + toBeDeletedFiles.Add(file.Path); + } + foreach (var folder in allFolders) + { + toBeDeletedFolders.Add(folder.Path); + } + + foreach (var file in toBeDeletedFiles) + { + Console.WriteLine($"Deleting file: {file}"); + File.Delete(file); + await dbService.RemoveFileEntryAsync(file); + } + foreach (var folder in toBeDeletedFolders) + { + Console.WriteLine($"Deleting directory: {folder}"); + Directory.Delete(folder, true); + await dbService.RemoveFolderEntryAsync(folder); + } + } +} \ No newline at end of file diff --git a/Commands/ListCommand.cs b/Commands/ListCommand.cs index e69de29..26182b9 100644 --- a/Commands/ListCommand.cs +++ b/Commands/ListCommand.cs @@ -0,0 +1,77 @@ +using TBDel.Models; +using TBDel.Services; + +namespace TBDel.Commands; + +public class ListCommand +{ + public static async Task List(string[] args) + { + if (args.Length > 2) + { + Console.WriteLine("Too many arguments."); + return; + } + if (args.Length == 1) + { + Console.WriteLine("Listing both files and folders."); + await ListFiles(); + for (int i = 0; i < 110; i++) + { + Console.Write("-"); + } + Console.Write("\n"); + await ListFolders(); + } + else if (args[1] == "files") + { + await ListFiles(); + } + else if (args[1] == "folders") + { + await ListFolders(); + } + + } + + private static async Task ListFiles() + { + var dbService = new DbService(); + var filesList = await dbService.GetFileEntriesAsync(); + + if (filesList.Count == 0) + { + Console.WriteLine("No files found."); + return; + } + + Console.ForegroundColor = ConsoleColor.Green; + Console.WriteLine("Found {0} file(s):\n", filesList.Count); + Console.WriteLine("{0,-100} {1,10}\n", "Path", "Date added"); + Console.ResetColor(); + foreach (var file in filesList) + { + Console.WriteLine("{0,-100} {1,10}", file.Path, file.DateAdded); + } + } + private static async Task ListFolders() + { + var dbService = new DbService(); + var foldersList = await dbService.GetFolderEntriesAsync(); + + if (foldersList.Count == 0) + { + Console.WriteLine("No folders found."); + return; + } + + Console.ForegroundColor = ConsoleColor.Green; + Console.WriteLine("Found {0} folder(s):\n", foldersList.Count); + Console.WriteLine("{0,-100} {1,10}\n", "Path", "Date added"); + Console.ResetColor(); + foreach (var folder in foldersList) + { + Console.WriteLine("{0,-100} {1,10}", folder.Path, folder.DateAdded); + } + } +} \ No newline at end of file diff --git a/Program.cs b/Program.cs index 008abb9..6220d9d 100644 --- a/Program.cs +++ b/Program.cs @@ -5,6 +5,7 @@ namespace TBDel internal class Program { // TODO: Add a command to show the Db path + // TODO: Add a command to remove a file or folder only from the list static async Task Main(string[] args) { // Show the help message if no arguments are provided @@ -25,10 +26,10 @@ namespace TBDel break; case "deleteall": - + await DeleteCommand.DeleteAll(); break; case "list": - + await ListCommand.List(args); break; case "help": HelpCommand.Show(); diff --git a/TUIHelper/Header.cs b/TUIHelper/Header.cs new file mode 100644 index 0000000..3c45698 --- /dev/null +++ b/TUIHelper/Header.cs @@ -0,0 +1,61 @@ +namespace TBDel.TUIHelper; + +public class Header +{ + public static void Show(String _headerText) + { + // Get third of the terminal width + int viewWidth = Console.WindowWidth/3; + + // Show the header seperator + Console.Write("#"); + for (int i = 0; i <= viewWidth-2; i++) + { + Console.Write("="); + } + + // Move to the next line + Console.WriteLine("#"); + + Console.Write("#"); + + for (int i = 0; i <= viewWidth - 2;i++) + { + Console.Write(" "); + } + + Console.Write("#"); + Console.Write("\n#"); + + int textReletiveStartPosition = ((viewWidth - 2)- _headerText.Length)/2; + + for (int i = 0; i < textReletiveStartPosition; i++) + { + Console.Write(" "); + } + + Console.Write(_headerText); + + for (int i = 0; i <= textReletiveStartPosition; i++) + { + Console.Write(" "); + } + Console.WriteLine("#"); + Console.Write("#"); + + + for (int i = 0; i <= viewWidth - 2;i++) + { + Console.Write(" "); + } + + Console.Write("#"); + Console.Write("\n#"); + + for (int i = 0; i <= viewWidth-2; i++) + { + Console.Write("="); + } + Console.WriteLine("#"); + } +} \ No newline at end of file