From b4251a0f1f93deb12cbb0764512d51f1e6d31858 Mon Sep 17 00:00:00 2001 From: Marcel Baumgartner Date: Sat, 4 May 2024 23:06:15 +0200 Subject: [PATCH] Started with adding modules for archiving for the file manager --- .../Implementations/ArchiveSelectionAction.cs | 38 +++++++++++++++++++ .../Abstractions/FileAccess/BaseFileAccess.cs | 4 +- .../FileAccess/IArchiveFileActions.cs | 6 +++ .../FileAccess/IFileCompressAccess.cs | 7 ---- .../FileAccess/IFileLaunchAccess.cs | 6 --- .../Servers/Helpers/ServerApiFileActions.cs | 7 +++- 6 files changed, 52 insertions(+), 16 deletions(-) create mode 100644 Moonlight/Features/FileManager/Implementations/ArchiveSelectionAction.cs create mode 100644 Moonlight/Features/FileManager/Models/Abstractions/FileAccess/IArchiveFileActions.cs delete mode 100644 Moonlight/Features/FileManager/Models/Abstractions/FileAccess/IFileCompressAccess.cs delete mode 100644 Moonlight/Features/FileManager/Models/Abstractions/FileAccess/IFileLaunchAccess.cs diff --git a/Moonlight/Features/FileManager/Implementations/ArchiveSelectionAction.cs b/Moonlight/Features/FileManager/Implementations/ArchiveSelectionAction.cs new file mode 100644 index 0000000..135823d --- /dev/null +++ b/Moonlight/Features/FileManager/Implementations/ArchiveSelectionAction.cs @@ -0,0 +1,38 @@ +using MoonCore.Exceptions; +using MoonCore.Helpers; +using MoonCoreUI.Services; +using Moonlight.Features.FileManager.Interfaces; +using Moonlight.Features.FileManager.Models.Abstractions.FileAccess; + +namespace Moonlight.Features.FileManager.Implementations; + +public class ArchiveSelectionAction : IFileManagerSelectionAction +{ + public string Name => "Archive"; + public string Color => "primary"; + + public async Task Execute(BaseFileAccess access, UI.Components.FileManager fileManager, FileEntry[] entries, + IServiceProvider provider) + { + if (!access.Actions.GetType().IsAssignableFrom(typeof(IArchiveFileActions))) + throw new DisplayException("This file access does not support archiving"); + + var archiveAccess = access as IArchiveFileActions; + + if (archiveAccess == null) + throw new DisplayException("This file access does not support archiving"); + + var alertService = provider.GetRequiredService(); + + var fileName = await alertService.Text("Enter the archive file name", "", + Formatter.FormatDate(DateTime.UtcNow) + ".tar.gz"); + + if (string.IsNullOrEmpty(fileName) || fileName.Contains("..")) // => canceled + return; + + await archiveAccess.Archive( + access.CurrentDirectory + fileName, + entries.Select(x => access.CurrentDirectory + x.Name).ToArray() + ); + } +} \ No newline at end of file diff --git a/Moonlight/Features/FileManager/Models/Abstractions/FileAccess/BaseFileAccess.cs b/Moonlight/Features/FileManager/Models/Abstractions/FileAccess/BaseFileAccess.cs index 0eac0d0..9698fa1 100644 --- a/Moonlight/Features/FileManager/Models/Abstractions/FileAccess/BaseFileAccess.cs +++ b/Moonlight/Features/FileManager/Models/Abstractions/FileAccess/BaseFileAccess.cs @@ -4,9 +4,9 @@ namespace Moonlight.Features.FileManager.Models.Abstractions.FileAccess; public class BaseFileAccess : IDisposable { - private readonly IFileActions Actions; + public readonly IFileActions Actions; - private string CurrentDirectory = "/"; + public string CurrentDirectory { get; private set; } = "/"; public BaseFileAccess(IFileActions actions) { diff --git a/Moonlight/Features/FileManager/Models/Abstractions/FileAccess/IArchiveFileActions.cs b/Moonlight/Features/FileManager/Models/Abstractions/FileAccess/IArchiveFileActions.cs new file mode 100644 index 0000000..988bd16 --- /dev/null +++ b/Moonlight/Features/FileManager/Models/Abstractions/FileAccess/IArchiveFileActions.cs @@ -0,0 +1,6 @@ +namespace Moonlight.Features.FileManager.Models.Abstractions.FileAccess; + +public interface IArchiveFileActions +{ + public Task Archive(string path, string[] files); +} \ No newline at end of file diff --git a/Moonlight/Features/FileManager/Models/Abstractions/FileAccess/IFileCompressAccess.cs b/Moonlight/Features/FileManager/Models/Abstractions/FileAccess/IFileCompressAccess.cs deleted file mode 100644 index 9b652bf..0000000 --- a/Moonlight/Features/FileManager/Models/Abstractions/FileAccess/IFileCompressAccess.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace Moonlight.Features.FileManager.Models.Abstractions.FileAccess; - -public interface IFileCompressAccess -{ - public Task Compress(string[] names); - public Task Decompress(string name); -} \ No newline at end of file diff --git a/Moonlight/Features/FileManager/Models/Abstractions/FileAccess/IFileLaunchAccess.cs b/Moonlight/Features/FileManager/Models/Abstractions/FileAccess/IFileLaunchAccess.cs deleted file mode 100644 index 3d8b93c..0000000 --- a/Moonlight/Features/FileManager/Models/Abstractions/FileAccess/IFileLaunchAccess.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace Moonlight.Features.FileManager.Models.Abstractions.FileAccess; - -public interface IFileLaunchAccess -{ - public Task GetLaunchUrl(); -} \ No newline at end of file diff --git a/Moonlight/Features/Servers/Helpers/ServerApiFileActions.cs b/Moonlight/Features/Servers/Helpers/ServerApiFileActions.cs index 631216c..21e4692 100644 --- a/Moonlight/Features/Servers/Helpers/ServerApiFileActions.cs +++ b/Moonlight/Features/Servers/Helpers/ServerApiFileActions.cs @@ -4,7 +4,7 @@ using Moonlight.Features.Servers.Exceptions; namespace Moonlight.Features.Servers.Helpers; -public class ServerApiFileActions : IFileActions +public class ServerApiFileActions : IFileActions, IArchiveFileActions { private readonly string Endpoint; private readonly string Token; @@ -43,6 +43,11 @@ public class ServerApiFileActions : IFileActions public async Task WriteFileStream(string path, Stream dataStream) => await ApiClient.PostFile($"writeFileStream?path={path}", dataStream, "upload"); + public async Task Archive(string path, string[] files) + { + await ApiClient.Post($"archive?path={path}&provider=tar.gz", files); + } + public IFileActions Clone() => new ServerApiFileActions(Endpoint, Token, ServerId); public void Dispose() => ApiClient.Dispose();