diff --git a/Commands/AddCommand.cs b/Commands/AddCommand.cs index 38b501c..68978ed 100644 --- a/Commands/AddCommand.cs +++ b/Commands/AddCommand.cs @@ -1,62 +1,81 @@ using TBDel.Models; using TBDel.Services; -namespace TBDel.Commands; - -public class AddCommand +namespace TBDel.Commands { - - public static async Task AddEntry(string[] args) + public class AddCommand { - // TODO: Add unique Id support - // TODO: Add duplicate path check - // TODO: Add support for multiple paths - - if (args.Length > 1) + public static async Task AddEntry(string[] args) { - string workingDirectory = Directory.GetCurrentDirectory(); - string absolutePath = Path.Combine(workingDirectory, args[1]); - if (File.Exists(absolutePath)) + // TODO: Add duplicate path check + // TODO: Add support for multiple paths + + if (args.Length > 1) { - Console.WriteLine($"Adding: {absolutePath}"); - var entry = new FileEntry { Path = absolutePath, DateAdded = DateTime.Now }; + string workingDirectory = Directory.GetCurrentDirectory(); + string absolutePath = Path.Combine(workingDirectory, args[1]); var dbService = new DbService(); - if (await dbService.AddFileEntryAsync(entry)) + + if (File.Exists(absolutePath)) { - Console.ForegroundColor = ConsoleColor.Green; - Console.WriteLine("File added successfully."); - Console.ResetColor(); - return true; + Console.WriteLine($"Adding: {absolutePath}"); + var entry = new FileEntry { Id = GenerateUniqueId(dbService), Path = absolutePath, DateAdded = DateTime.Now }; + if (await dbService.AddFileEntryAsync(entry)) + { + Console.ForegroundColor = ConsoleColor.Green; + Console.WriteLine("File added successfully."); + Console.ResetColor(); + return; + } + else + { + Console.ForegroundColor = ConsoleColor.Red; + Console.WriteLine("Failed to add file."); + Console.ResetColor(); + return; + } } - else + else if (Directory.Exists(absolutePath)) { - Console.ForegroundColor = ConsoleColor.Red; - Console.WriteLine("Failed to add file."); - Console.ResetColor(); - return false; - } - } - else if (Directory.Exists(absolutePath)) - { - Console.WriteLine($"Adding: {absolutePath}"); - var entry = new FolderEntry() { Path = absolutePath, DateAdded = DateTime.Now }; - var dbService = new DbService(); - if (await dbService.AddFolderEntryAsync(entry)) - { - Console.ForegroundColor = ConsoleColor.Green; - Console.WriteLine("Directory added successfully."); - Console.ResetColor(); - return true; - } - else - { - Console.ForegroundColor = ConsoleColor.Red; - Console.WriteLine("Failed to add directory."); - Console.ResetColor(); - return false; + Console.WriteLine($"Adding: {absolutePath}"); + var entry = new FolderEntry() { Id = GenerateUniqueId(dbService), Path = absolutePath, DateAdded = DateTime.Now }; + if (await dbService.AddFolderEntryAsync(entry)) + { + Console.ForegroundColor = ConsoleColor.Green; + Console.WriteLine("Directory added successfully."); + Console.ResetColor(); + return; + } + else + { + Console.ForegroundColor = ConsoleColor.Red; + Console.WriteLine("Failed to add directory."); + Console.ResetColor(); + return; + } } } } - return false; + + private static uint GenerateUniqueId(DbService dbService) + { + // Hopefully not running away from me one day + Random random = new Random(); + uint newId; + do + { + newId = (uint)random.Next(10000, 99999); + } while (IdExists(newId, dbService)); + return newId; + } + + private static bool IdExists(uint id, DbService dbService) + { + // Not async? Not a problem (yet(?)) + var fileEntries = dbService.GetFileEntriesAsync().Result; + var folderEntries = dbService.GetFolderEntriesAsync().Result; + + return fileEntries.Any(e => e.Id == id) || folderEntries.Any(e => e.Id == id); + } } -} \ No newline at end of file +} diff --git a/Commands/DeleteAllCommand.cs b/Commands/DeleteAllCommand.cs index f2a863a..923149d 100644 --- a/Commands/DeleteAllCommand.cs +++ b/Commands/DeleteAllCommand.cs @@ -1,55 +1,49 @@ using TBDel.Services; -namespace TBDel.Commands; - -public class DeleteCAllCommand +namespace TBDel.Commands { - public static async Task DeleteAll() + public class DeleteAllCommand { - var dbService = new DbService(); - var allFiles = await dbService.GetFileEntriesAsync(); - var allFolders = await dbService.GetFolderEntriesAsync(); - - if (allFiles.Count == 0 && allFolders.Count == 0) + public static async Task DeleteAll() { - 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."); + 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.Write($"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; + } + + foreach (var file in allFiles) + { + Console.WriteLine($"Deleting file: {file.Path}"); + File.Delete(file.Path); + await dbService.RemoveFileEntryAsync(file.Id); + } + foreach (var folder in allFolders) + { + Console.WriteLine($"Deleting directory: {folder.Path}"); + Directory.Delete(folder.Path, true); + await dbService.RemoveFolderEntryAsync(folder.Id); + } + + Console.ForegroundColor = ConsoleColor.Green; + Console.WriteLine("All files and folders deleted successfully."); 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/DeleteCommand.cs b/Commands/DeleteCommand.cs index b8d000b..b6c0b27 100644 --- a/Commands/DeleteCommand.cs +++ b/Commands/DeleteCommand.cs @@ -1,35 +1,38 @@ using TBDel.Models; using TBDel.Services; -namespace TBDel.Commands; - - -public class DeleteCommand +namespace TBDel.Commands { - // Will be done by unique file Id - public static async Task DeleteEntry(string[] args) + public class DeleteCommand { - var dbService = new DbService(); - if (args.Length > 1) + public static async Task DeleteEntry(string[] args) { - if (File.Exists(args[1])) + var dbService = new DbService(); + if (args.Length > 1 && uint.TryParse(args[1], out uint id)) { - Console.WriteLine($"Deleteing file: {args[1]}"); - if (await dbService.RemoveFileEntryAsync(args[1])) + Console.WriteLine($"Deleting entry with ID: {id}"); + bool fileDeleted = await dbService.RemoveFileEntryAsync(id); + bool folderDeleted = await dbService.RemoveFolderEntryAsync(id); + + if (fileDeleted || folderDeleted) { Console.ForegroundColor = ConsoleColor.Green; - Console.WriteLine("File deleted successfully"); + Console.WriteLine("Entry deleted successfully."); Console.ResetColor(); } else { Console.ForegroundColor = ConsoleColor.Red; - Console.WriteLine("something went wrong"); + Console.WriteLine("Something went wrong. Entry not found."); Console.ResetColor(); } } + else + { + Console.ForegroundColor = ConsoleColor.Red; + Console.WriteLine("Invalid or missing ID argument."); + Console.ResetColor(); + } } - - } } \ No newline at end of file diff --git a/Commands/ListCommand.cs b/Commands/ListCommand.cs index 26182b9..b5da4c4 100644 --- a/Commands/ListCommand.cs +++ b/Commands/ListCommand.cs @@ -1,77 +1,78 @@ using TBDel.Models; using TBDel.Services; -namespace TBDel.Commands; - -public class ListCommand +namespace TBDel.Commands { - public static async Task List(string[] args) + public class ListCommand { - if (args.Length > 2) + public static async Task List(string[] args) { - 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++) + if (args.Length > 2) { - Console.Write("-"); + 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(); } - 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(); + private static async Task ListFiles() + { + var dbService = new DbService(); + var filesList = await dbService.GetFileEntriesAsync(); - if (filesList.Count == 0) - { - Console.WriteLine("No files found."); - return; + 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,-10} {1,-90} {2,10}\n", "ID", "Path", "Date added"); + Console.ResetColor(); + foreach (var file in filesList) + { + Console.WriteLine("{0,-10} {1,-90} {2,10}", file.Id, file.Path, file.DateAdded); + } } - - 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) + + private static async Task ListFolders() { - Console.WriteLine("{0,-100} {1,10}", file.Path, file.DateAdded); + 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,-10} {1,-90} {2,10}\n", "ID", "Path", "Date added"); + Console.ResetColor(); + foreach (var folder in foldersList) + { + Console.WriteLine("{0,-10} {1,-90} {2,10}", folder.Id, folder.Path, folder.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 2e43513..f53f3fc 100644 --- a/Program.cs +++ b/Program.cs @@ -26,7 +26,7 @@ namespace TBDel await DeleteCommand.DeleteEntry(args); break; case "deleteall": - await DeleteCAllCommand.DeleteAll(); + await DeleteAllCommand.DeleteAll(); break; case "list": await ListCommand.List(args); diff --git a/Services/DbService.cs b/Services/DbService.cs index b91dba9..926711f 100644 --- a/Services/DbService.cs +++ b/Services/DbService.cs @@ -66,9 +66,9 @@ namespace TBDel.Services return await Task.FromResult(_folderCollection.ToList()); } - public async Task RemoveFileEntryAsync(string path) + public async Task RemoveFileEntryAsync(uint id) { - var entryToRemove = _fileCollection.FirstOrDefault(e => e.Path == path); + var entryToRemove = _fileCollection.FirstOrDefault(e => e.Id == id); if (entryToRemove != null) { _fileCollection.Remove(entryToRemove); @@ -78,9 +78,9 @@ namespace TBDel.Services return await Task.FromResult(false); } - public async Task RemoveFolderEntryAsync(string path) + public async Task RemoveFolderEntryAsync(uint id) { - var entryToRemove = _folderCollection.FirstOrDefault(e => e.Path == path); + var entryToRemove = _folderCollection.FirstOrDefault(e => e.Id == id); if (entryToRemove != null) { _folderCollection.Remove(entryToRemove); @@ -89,6 +89,8 @@ namespace TBDel.Services } return await Task.FromResult(false); } + + } public class DatabaseContent