Implemented unique Id for each entry - Implemented delete single entry command
This commit is contained in:
		@@ -1,14 +1,12 @@
 | 
				
			|||||||
using TBDel.Models;
 | 
					using TBDel.Models;
 | 
				
			||||||
using TBDel.Services;
 | 
					using TBDel.Services;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace TBDel.Commands;
 | 
					namespace TBDel.Commands
 | 
				
			||||||
 | 
					 | 
				
			||||||
public class AddCommand
 | 
					 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					    public class AddCommand
 | 
				
			||||||
    public static async Task<Boolean> AddEntry(string[] args)
 | 
					    {
 | 
				
			||||||
 | 
					        public static async Task AddEntry(string[] args)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
        // TODO: Add unique Id support
 | 
					 | 
				
			||||||
            // TODO: Add duplicate path check
 | 
					            // TODO: Add duplicate path check
 | 
				
			||||||
            // TODO: Add support for multiple paths
 | 
					            // TODO: Add support for multiple paths
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -16,47 +14,68 @@ public class AddCommand
 | 
				
			|||||||
            {
 | 
					            {
 | 
				
			||||||
                string workingDirectory = Directory.GetCurrentDirectory();
 | 
					                string workingDirectory = Directory.GetCurrentDirectory();
 | 
				
			||||||
                string absolutePath = Path.Combine(workingDirectory, args[1]);
 | 
					                string absolutePath = Path.Combine(workingDirectory, args[1]);
 | 
				
			||||||
 | 
					                var dbService = new DbService();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                if (File.Exists(absolutePath))
 | 
					                if (File.Exists(absolutePath))
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    Console.WriteLine($"Adding: {absolutePath}");
 | 
					                    Console.WriteLine($"Adding: {absolutePath}");
 | 
				
			||||||
                var entry = new FileEntry { Path = absolutePath, DateAdded = DateTime.Now };
 | 
					                    var entry = new FileEntry { Id = GenerateUniqueId(dbService), Path = absolutePath, DateAdded = DateTime.Now };
 | 
				
			||||||
                var dbService = new DbService();
 | 
					 | 
				
			||||||
                    if (await dbService.AddFileEntryAsync(entry))
 | 
					                    if (await dbService.AddFileEntryAsync(entry))
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
                        Console.ForegroundColor = ConsoleColor.Green;
 | 
					                        Console.ForegroundColor = ConsoleColor.Green;
 | 
				
			||||||
                        Console.WriteLine("File added successfully.");
 | 
					                        Console.WriteLine("File added successfully.");
 | 
				
			||||||
                        Console.ResetColor();
 | 
					                        Console.ResetColor();
 | 
				
			||||||
                    return true;
 | 
					                        return;
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    else
 | 
					                    else
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
                        Console.ForegroundColor = ConsoleColor.Red;
 | 
					                        Console.ForegroundColor = ConsoleColor.Red;
 | 
				
			||||||
                        Console.WriteLine("Failed to add file.");
 | 
					                        Console.WriteLine("Failed to add file.");
 | 
				
			||||||
                        Console.ResetColor();
 | 
					                        Console.ResetColor();
 | 
				
			||||||
                    return false;
 | 
					                        return;
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                else if (Directory.Exists(absolutePath))
 | 
					                else if (Directory.Exists(absolutePath))
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    Console.WriteLine($"Adding: {absolutePath}");
 | 
					                    Console.WriteLine($"Adding: {absolutePath}");
 | 
				
			||||||
                var entry = new FolderEntry() { Path = absolutePath, DateAdded = DateTime.Now };
 | 
					                    var entry = new FolderEntry() { Id = GenerateUniqueId(dbService), Path = absolutePath, DateAdded = DateTime.Now };
 | 
				
			||||||
                var dbService = new DbService();
 | 
					 | 
				
			||||||
                    if (await dbService.AddFolderEntryAsync(entry))
 | 
					                    if (await dbService.AddFolderEntryAsync(entry))
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
                        Console.ForegroundColor = ConsoleColor.Green;
 | 
					                        Console.ForegroundColor = ConsoleColor.Green;
 | 
				
			||||||
                        Console.WriteLine("Directory added successfully.");
 | 
					                        Console.WriteLine("Directory added successfully.");
 | 
				
			||||||
                        Console.ResetColor();
 | 
					                        Console.ResetColor();
 | 
				
			||||||
                    return true;
 | 
					                        return;
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    else
 | 
					                    else
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
                        Console.ForegroundColor = ConsoleColor.Red;
 | 
					                        Console.ForegroundColor = ConsoleColor.Red;
 | 
				
			||||||
                        Console.WriteLine("Failed to add directory.");
 | 
					                        Console.WriteLine("Failed to add directory.");
 | 
				
			||||||
                        Console.ResetColor();
 | 
					                        Console.ResetColor();
 | 
				
			||||||
                    return false;
 | 
					                        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);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -1,9 +1,9 @@
 | 
				
			|||||||
using TBDel.Services;
 | 
					using TBDel.Services;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace TBDel.Commands;
 | 
					namespace TBDel.Commands
 | 
				
			||||||
 | 
					 | 
				
			||||||
public class DeleteCAllCommand
 | 
					 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					    public class DeleteAllCommand
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
        public static async Task DeleteAll()
 | 
					        public static async Task DeleteAll()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            var dbService = new DbService();
 | 
					            var dbService = new DbService();
 | 
				
			||||||
@@ -17,7 +17,7 @@ public class DeleteCAllCommand
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            Console.ForegroundColor = ConsoleColor.Yellow;
 | 
					            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.Write($"Are you sure you want to permanently delete {allFiles.Count} file(s) and {allFolders.Count} folder(s)? (y/N)");
 | 
				
			||||||
            Console.ResetColor();
 | 
					            Console.ResetColor();
 | 
				
			||||||
            var input = Console.ReadLine();
 | 
					            var input = Console.ReadLine();
 | 
				
			||||||
            if (input != "y")
 | 
					            if (input != "y")
 | 
				
			||||||
@@ -28,28 +28,22 @@ public class DeleteCAllCommand
 | 
				
			|||||||
                return;
 | 
					                return;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        var toBeDeletedFiles = new List<string>();
 | 
					 | 
				
			||||||
        var toBeDeletedFolders = new List<string>();
 | 
					 | 
				
			||||||
            foreach (var file in allFiles)
 | 
					            foreach (var file in allFiles)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
            toBeDeletedFiles.Add(file.Path);
 | 
					                Console.WriteLine($"Deleting file: {file.Path}");
 | 
				
			||||||
 | 
					                File.Delete(file.Path);
 | 
				
			||||||
 | 
					                await dbService.RemoveFileEntryAsync(file.Id);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            foreach (var folder in allFolders)
 | 
					            foreach (var folder in allFolders)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
            toBeDeletedFolders.Add(folder.Path);
 | 
					                Console.WriteLine($"Deleting directory: {folder.Path}");
 | 
				
			||||||
 | 
					                Directory.Delete(folder.Path, true);
 | 
				
			||||||
 | 
					                await dbService.RemoveFolderEntryAsync(folder.Id);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        foreach (var file in toBeDeletedFiles)
 | 
					            Console.ForegroundColor = ConsoleColor.Green;
 | 
				
			||||||
        {
 | 
					            Console.WriteLine("All files and folders deleted successfully.");
 | 
				
			||||||
            Console.WriteLine($"Deleting file: {file}");
 | 
					            Console.ResetColor();
 | 
				
			||||||
            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);
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -1,35 +1,38 @@
 | 
				
			|||||||
using TBDel.Models;
 | 
					using TBDel.Models;
 | 
				
			||||||
using TBDel.Services;
 | 
					using TBDel.Services;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace TBDel.Commands;
 | 
					namespace TBDel.Commands
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
public class DeleteCommand
 | 
					 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    // Will be done by unique file Id
 | 
					    public class DeleteCommand
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
        public static async Task DeleteEntry(string[] args)
 | 
					        public static async Task DeleteEntry(string[] args)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            var dbService = new DbService();
 | 
					            var dbService = new DbService();
 | 
				
			||||||
        if (args.Length > 1)
 | 
					            if (args.Length > 1 && uint.TryParse(args[1], out uint id))
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
            if (File.Exists(args[1]))
 | 
					                Console.WriteLine($"Deleting entry with ID: {id}");
 | 
				
			||||||
            {
 | 
					                bool fileDeleted = await dbService.RemoveFileEntryAsync(id);
 | 
				
			||||||
                Console.WriteLine($"Deleteing file: {args[1]}");
 | 
					                bool folderDeleted = await dbService.RemoveFolderEntryAsync(id);
 | 
				
			||||||
                if (await dbService.RemoveFileEntryAsync(args[1]))
 | 
					
 | 
				
			||||||
 | 
					                if (fileDeleted || folderDeleted)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    Console.ForegroundColor = ConsoleColor.Green;
 | 
					                    Console.ForegroundColor = ConsoleColor.Green;
 | 
				
			||||||
                    Console.WriteLine("File deleted successfully");
 | 
					                    Console.WriteLine("Entry deleted successfully.");
 | 
				
			||||||
                    Console.ResetColor();
 | 
					                    Console.ResetColor();
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                else
 | 
					                else
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    Console.ForegroundColor = ConsoleColor.Red;
 | 
					                    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();
 | 
					                Console.ResetColor();
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -1,10 +1,10 @@
 | 
				
			|||||||
using TBDel.Models;
 | 
					using TBDel.Models;
 | 
				
			||||||
using TBDel.Services;
 | 
					using TBDel.Services;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace TBDel.Commands;
 | 
					namespace TBDel.Commands
 | 
				
			||||||
 | 
					 | 
				
			||||||
public class ListCommand
 | 
					 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					    public class ListCommand
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
        public static async Task List(string[] args)
 | 
					        public static async Task List(string[] args)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            if (args.Length > 2)
 | 
					            if (args.Length > 2)
 | 
				
			||||||
@@ -31,7 +31,6 @@ public class ListCommand
 | 
				
			|||||||
            {
 | 
					            {
 | 
				
			||||||
                await ListFolders();
 | 
					                await ListFolders();
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        private static async Task ListFiles()
 | 
					        private static async Task ListFiles()
 | 
				
			||||||
@@ -47,13 +46,14 @@ public class ListCommand
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            Console.ForegroundColor = ConsoleColor.Green;
 | 
					            Console.ForegroundColor = ConsoleColor.Green;
 | 
				
			||||||
            Console.WriteLine("Found {0} file(s):\n", filesList.Count);
 | 
					            Console.WriteLine("Found {0} file(s):\n", filesList.Count);
 | 
				
			||||||
        Console.WriteLine("{0,-100} {1,10}\n", "Path", "Date added");
 | 
					            Console.WriteLine("{0,-10} {1,-90} {2,10}\n", "ID", "Path", "Date added");
 | 
				
			||||||
            Console.ResetColor();
 | 
					            Console.ResetColor();
 | 
				
			||||||
            foreach (var file in filesList)
 | 
					            foreach (var file in filesList)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
            Console.WriteLine("{0,-100} {1,10}", file.Path, file.DateAdded);
 | 
					                Console.WriteLine("{0,-10} {1,-90} {2,10}", file.Id, file.Path, file.DateAdded);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        private static async Task ListFolders()
 | 
					        private static async Task ListFolders()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            var dbService = new DbService();
 | 
					            var dbService = new DbService();
 | 
				
			||||||
@@ -67,11 +67,12 @@ public class ListCommand
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            Console.ForegroundColor = ConsoleColor.Green;
 | 
					            Console.ForegroundColor = ConsoleColor.Green;
 | 
				
			||||||
            Console.WriteLine("Found {0} folder(s):\n", foldersList.Count);
 | 
					            Console.WriteLine("Found {0} folder(s):\n", foldersList.Count);
 | 
				
			||||||
        Console.WriteLine("{0,-100} {1,10}\n", "Path", "Date added");
 | 
					            Console.WriteLine("{0,-10} {1,-90} {2,10}\n", "ID", "Path", "Date added");
 | 
				
			||||||
            Console.ResetColor();
 | 
					            Console.ResetColor();
 | 
				
			||||||
            foreach (var folder in foldersList)
 | 
					            foreach (var folder in foldersList)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
            Console.WriteLine("{0,-100} {1,10}", folder.Path, folder.DateAdded);
 | 
					                Console.WriteLine("{0,-10} {1,-90} {2,10}", folder.Id, folder.Path, folder.DateAdded);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -26,7 +26,7 @@ namespace TBDel
 | 
				
			|||||||
                    await DeleteCommand.DeleteEntry(args);
 | 
					                    await DeleteCommand.DeleteEntry(args);
 | 
				
			||||||
                    break;
 | 
					                    break;
 | 
				
			||||||
                case "deleteall":
 | 
					                case "deleteall":
 | 
				
			||||||
                    await DeleteCAllCommand.DeleteAll();
 | 
					                    await DeleteAllCommand.DeleteAll();
 | 
				
			||||||
                    break;
 | 
					                    break;
 | 
				
			||||||
                case "list":
 | 
					                case "list":
 | 
				
			||||||
                    await ListCommand.List(args);
 | 
					                    await ListCommand.List(args);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -66,9 +66,9 @@ namespace TBDel.Services
 | 
				
			|||||||
            return await Task.FromResult(_folderCollection.ToList());
 | 
					            return await Task.FromResult(_folderCollection.ToList());
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public async Task<bool> RemoveFileEntryAsync(string path)
 | 
					        public async Task<bool> RemoveFileEntryAsync(uint id)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            var entryToRemove = _fileCollection.FirstOrDefault(e => e.Path == path);
 | 
					            var entryToRemove = _fileCollection.FirstOrDefault(e => e.Id == id);
 | 
				
			||||||
            if (entryToRemove != null)
 | 
					            if (entryToRemove != null)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                _fileCollection.Remove(entryToRemove);
 | 
					                _fileCollection.Remove(entryToRemove);
 | 
				
			||||||
@@ -78,9 +78,9 @@ namespace TBDel.Services
 | 
				
			|||||||
            return await Task.FromResult(false);
 | 
					            return await Task.FromResult(false);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public async Task<bool> RemoveFolderEntryAsync(string path)
 | 
					        public async Task<bool> RemoveFolderEntryAsync(uint id)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            var entryToRemove = _folderCollection.FirstOrDefault(e => e.Path == path);
 | 
					            var entryToRemove = _folderCollection.FirstOrDefault(e => e.Id == id);
 | 
				
			||||||
            if (entryToRemove != null)
 | 
					            if (entryToRemove != null)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                _folderCollection.Remove(entryToRemove);
 | 
					                _folderCollection.Remove(entryToRemove);
 | 
				
			||||||
@@ -89,6 +89,8 @@ namespace TBDel.Services
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
            return await Task.FromResult(false);
 | 
					            return await Task.FromResult(false);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public class DatabaseContent
 | 
					    public class DatabaseContent
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user