Implemented "Add" command and finished Db stuff.

This commit is contained in:
2025-01-31 21:42:43 +03:30
parent 07feac2f65
commit f0339e5c0e
8 changed files with 161 additions and 48 deletions

View File

@@ -0,0 +1,63 @@
using Microsoft.Extensions.Logging;
using TBDel.Models;
using TBDel.Services;
namespace TBDel.Commands;
public class AddCommand
{
public static async Task<Boolean> AddEntry(string[] args)
{
// TODO: Add unique Id support
// TODO: Add duplicate path check
// TODO: Add support for multiple paths
if (args.Length > 1)
{
string workingDirectory = Directory.GetCurrentDirectory();
string absolutePath = Path.Combine(workingDirectory, args[1]);
if (File.Exists(absolutePath))
{
Console.WriteLine($"Adding: {absolutePath}");
var entry = new FileEntry { Path = absolutePath, DateAdded = DateTime.Now };
var dbService = new DbService();
if (await dbService.AddFileEntryAsync(entry))
{
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine("File added successfully.");
Console.ResetColor();
return true;
}
else
{
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;
}
}
}
return false;
}
}

28
Commands/HelpCommand.cs Normal file
View File

@@ -0,0 +1,28 @@
namespace TBDel.Commands;
public static class HelpCommand
{
// Show the help message
/// <summary>
/// Shows the help message.
/// </summary>
/// <param name="showOnWrongCommand">If true, displays an error message indicating that an invalid command was entered.</param>
public static void Show(
Boolean showOnWrongCommand = false)
{
if (showOnWrongCommand)
{
Console.ForegroundColor = ConsoleColor.Red;
Console.Error.WriteLine("Invalid command. Use 'tbdel help' for help.");
Console.ResetColor();
}
Console.WriteLine("Usage: tbdel <command> [arguments]");
Console.WriteLine("Available commands:");
Console.WriteLine(" add <path to file or folder> Add a file or folder to the list");
Console.WriteLine(" delete <path to file or folder OR file ID> Deletes a file or folder from the list");
Console.WriteLine(" deleteall Deletes all items in the list");
Console.WriteLine(" list Lists all items in the list");
Console.WriteLine(" help Shows this help message");
}
}

View File

@@ -1,13 +0,0 @@
using TBDel.Models;
namespace TBDel.Interface;
public interface IDbService
{
Task<Boolean> AddFileEntryAsync(FileEntry entry);
Task<Boolean> AddFolderEntryAsync(FolderEntry entry);
Task<List<FileEntry>> GetFileEntriesAsync();
Task<List<FolderEntry>> GetFolderEntriesAsync();
Task<Boolean> RemoveFileEntryAsync(string path);
Task<Boolean> RemoveFolderEntryAsync(string path);
}

View File

@@ -1,8 +0,0 @@
namespace TBDel.Models;
// The DB entry - A list of files and folders
public class DbEntry
{
public List<FileEntry> Files { get; set; } = new();
public List<FolderEntry> Folders { get; set; } = new();
}

View File

@@ -2,7 +2,9 @@ namespace TBDel.Models;
public class FileEntry
{
// File path
// Unique 5 digit number for each entry
uint Id { get; set; }
// Absolute path
public string Path { get; set; } = string.Empty;
// Date added
public DateTime DateAdded { get; set; }

View File

@@ -1,3 +1,43 @@
using TBDel.Interface;
using TBDel.Services;
using TBDel.Commands;
namespace TBDel
{
internal class Program
{
// TODO: Add a command to show the Db path
static async Task Main(string[] args)
{
// Show the help message if no arguments are provided
if (args.Length == 0)
{
HelpCommand.Show();
return;
}
string command = args[0].ToLower();
switch (command)
{
case "add":
await AddCommand.AddEntry(args);
break;
case "delete":
break;
case "deleteall":
break;
case "list":
break;
case "help":
HelpCommand.Show();
break;
default:
HelpCommand.Show(true);
break;
}
}
}
}

View File

@@ -1,64 +1,64 @@
using JsonFlatFileDataStore;
using TBDel.Interface;
using TBDel.Models;
namespace TBDel.Services;
public class DbService : IDbService
public class DbService
{
private readonly DataStore _store;
/*private readonly IDataCollection<FileEntry> _fileCollection;
private readonly IDataCollection<FolderEntry> _folderCollection;*/
private readonly IDocumentCollection<FileEntry> _fileCollection;
private readonly IDocumentCollection<FolderEntry> _folderCollection;
public DbService(string filePath) // Constructor takes the file path
public DbService()
{
/*_store = new DataStore(filePath);
string dbPath =
Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "TBDel_Db.json");
var _store = new DataStore(dbPath,minifyJson:true);
_fileCollection = _store.GetCollection<FileEntry>();
_folderCollection = _store.GetCollection<FolderEntry>();*/
_folderCollection = _store.GetCollection<FolderEntry>();
}
public async Task<Boolean> AddFileEntryAsync(FileEntry entry)
{
//await _fileCollection.InsertOneAsync(entry);
return false;
return await _fileCollection.InsertOneAsync(entry);
}
public async Task<Boolean> AddFolderEntryAsync(FolderEntry entry)
{
//await _folderCollection.InsertOneAsync(entry);
return false;
return await _folderCollection.InsertOneAsync(entry);
}
public async Task<List<FileEntry>> GetFileEntriesAsync()
{
//return _fileCollection.AsQueryable().ToList();
return new List<FileEntry>();
return _fileCollection.AsQueryable().ToList();
}
public async Task<List<FolderEntry>> GetFolderEntriesAsync()
{
//return _folderCollection.AsQueryable().ToList();
return new List<FolderEntry>();
return _folderCollection.AsQueryable().ToList();
}
public async Task<Boolean> RemoveFileEntryAsync(string path)
public async Task<Boolean> RemoveFileEntryAsync(string path)
{
//var entryToRemove = _fileCollection.AsQueryable().FirstOrDefault(e => e.Path == path);
/*if (entryToRemove != null)
var entryToRemove = _fileCollection.AsQueryable().FirstOrDefault(e => e.Path == path);
if (entryToRemove != null)
{
await _fileCollection.DeleteOneAsync(e => e.Path == path); // or entryToRemove.Path
}*/
return await _fileCollection.DeleteOneAsync(e => e.Path == path); // or entryToRemove.Path
}
return false;
}
public async Task<Boolean> RemoveFolderEntryAsync(string path)
{
//var entryToRemove = _folderCollection.AsQueryable().FirstOrDefault(e => e.Path == path);
/*if (entryToRemove != null)
var entryToRemove = _folderCollection.AsQueryable().FirstOrDefault(e => e.Path == path);
if (entryToRemove != null)
{
await _folderCollection.DeleteOneAsync(e => e.Path == path); // or entryToRemove.Path
}*/
return await _folderCollection.DeleteOneAsync(e => e.Path == path); // or entryToRemove.Path
}
return false;
}
}

View File

@@ -9,6 +9,7 @@
<ItemGroup>
<PackageReference Include="JsonFlatFileDataStore" Version="2.4.2" />
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="9.0.1" />
</ItemGroup>
</Project>