MoveCommand

This commit is contained in:
2023-07-04 22:07:11 +02:00
parent 718fd53026
commit 453834646b
17 changed files with 263 additions and 22 deletions

View File

@@ -0,0 +1,5 @@
using FileTime.Core.Models;
namespace FileTime.Core.Command.Move;
public record ItemToMove(FullName Source, FullName Target);

View File

@@ -10,4 +10,6 @@ public interface IContentAccessorFactory
IContentWriterFactory GetContentWriterFactory(IContentProvider provider);
IItemDeleter GetItemDeleter(IContentProvider provider);
IItemDeleter<TContentProvider> GetItemDeleter<TContentProvider>() where TContentProvider : IContentProvider;
IItemMover GetItemMover(IContentProvider provider);
IItemMover<TContentProvider> GetItemMover<TContentProvider>() where TContentProvider : IContentProvider;
}

View File

@@ -10,4 +10,17 @@ public interface IItemDeleter
public interface IItemDeleter<in TContentProvider> : IItemDeleter where TContentProvider : IContentProvider
{
Task DeleteAsync(TContentProvider contentProvider, FullName fullName);
async Task IItemDeleter.DeleteAsync(IContentProvider contentProvider, FullName fullName)
{
if (contentProvider is not TContentProvider provider)
{
throw new ArgumentException(
$"Content provider ({contentProvider.GetType()}) is not the required type ({typeof(TContentProvider)}) ",
nameof(contentProvider)
);
}
await DeleteAsync(provider, fullName);
}
}

View File

@@ -0,0 +1,24 @@
using FileTime.Core.Models;
namespace FileTime.Core.ContentAccess;
public interface IItemMover
{
Task RenameAsync(IContentProvider contentProvider, FullName fullName, FullName newPath);
}
public interface IItemMover<in TContentProvider> : IItemMover where TContentProvider : IContentProvider
{
Task RenameAsync(TContentProvider contentProvider, FullName fullName, FullName newPath);
async Task IItemMover.RenameAsync(IContentProvider contentProvider, FullName fullName, FullName newPath)
{
if(contentProvider is not TContentProvider provider)
throw new ArgumentException(
$"Content provider ({contentProvider.GetType()}) is not the required type ({typeof(TContentProvider)}) ",
nameof(contentProvider)
);
await RenameAsync(provider, fullName, newPath);
}
}