diff --git a/Moonlight/Core/Helpers/HostFileActions.cs b/Moonlight/Core/Helpers/HostFileActions.cs index 13e411bf..860340d3 100644 --- a/Moonlight/Core/Helpers/HostFileActions.cs +++ b/Moonlight/Core/Helpers/HostFileActions.cs @@ -40,18 +40,26 @@ public class HostFileActions : IFileActions return Task.FromResult(entries.ToArray()); } - public Task Delete(string path) + public Task DeleteFile(string path) { var fullPath = GetFullPath(path); if (File.Exists(fullPath)) File.Delete(fullPath); - else if (Directory.Exists(fullPath)) - Directory.Delete(fullPath, true); return Task.CompletedTask; } + public Task DeleteDirectory(string path) + { + var fullPath = GetFullPath(path); + + if (Directory.Exists(fullPath)) + Directory.Delete(fullPath, true); + + return Task.CompletedTask; + } + public Task Move(string from, string to) { var source = GetFullPath(from); @@ -65,29 +73,29 @@ public class HostFileActions : IFileActions return Task.CompletedTask; } - public Task CreateDirectory(string name) + public Task CreateDirectory(string path) { - var fullPath = GetFullPath(name); + var fullPath = GetFullPath(path); Directory.CreateDirectory(fullPath); return Task.CompletedTask; } - public Task CreateFile(string name) + public Task CreateFile(string path) { - var fullPath = GetFullPath(name); + var fullPath = GetFullPath(path); File.Create(fullPath).Close(); return Task.CompletedTask; } - public Task ReadFile(string name) + public Task ReadFile(string path) { - var fullPath = GetFullPath(name); + var fullPath = GetFullPath(path); return File.ReadAllTextAsync(fullPath); } - public Task WriteFile(string name, string content) + public Task WriteFile(string path, string content) { - var fullPath = GetFullPath(name); + var fullPath = GetFullPath(path); EnsureDir(fullPath); @@ -95,15 +103,15 @@ public class HostFileActions : IFileActions return Task.CompletedTask; } - public Task ReadFileStream(string name) + public Task ReadFileStream(string path) { - var fullPath = GetFullPath(name); + var fullPath = GetFullPath(path); return Task.FromResult(File.OpenRead(fullPath)); } - public Task WriteFileStream(string name, Stream dataStream) + public Task WriteFileStream(string path, Stream dataStream) { - var fullPath = GetFullPath(name); + var fullPath = GetFullPath(path); EnsureDir(fullPath); diff --git a/Moonlight/Features/FileManager/Implementations/CreateFileAction.cs b/Moonlight/Features/FileManager/Implementations/CreateFileAction.cs index 2d447644..68589af9 100644 --- a/Moonlight/Features/FileManager/Implementations/CreateFileAction.cs +++ b/Moonlight/Features/FileManager/Implementations/CreateFileAction.cs @@ -1,7 +1,6 @@ using MoonCoreUI.Services; using Moonlight.Features.FileManager.Interfaces; using Moonlight.Features.FileManager.Models.Abstractions.FileAccess; -using Moonlight.Features.FileManager.UI.NewFileManager; namespace Moonlight.Features.FileManager.Implementations; @@ -11,7 +10,7 @@ public class CreateFileAction : IFileManagerCreateAction public string Icon => "bx-file"; public string Color => "primary"; - public async Task Execute(BaseFileAccess access, UI.NewFileManager.FileManager fileManager, IServiceProvider provider) + public async Task Execute(BaseFileAccess access, UI.Components.FileManager fileManager, IServiceProvider provider) { var alertService = provider.GetRequiredService(); diff --git a/Moonlight/Features/FileManager/Implementations/CreateFolderAction.cs b/Moonlight/Features/FileManager/Implementations/CreateFolderAction.cs index b62289d1..1b8fb36d 100644 --- a/Moonlight/Features/FileManager/Implementations/CreateFolderAction.cs +++ b/Moonlight/Features/FileManager/Implementations/CreateFolderAction.cs @@ -1,7 +1,7 @@ using MoonCoreUI.Services; using Moonlight.Features.FileManager.Interfaces; using Moonlight.Features.FileManager.Models.Abstractions.FileAccess; -using Moonlight.Features.FileManager.UI.NewFileManager; +using Moonlight.Features.FileManager.UI.Components; namespace Moonlight.Features.FileManager.Implementations; @@ -11,7 +11,7 @@ public class CreateFolderAction : IFileManagerCreateAction public string Icon => "bx-folder"; public string Color => "primary"; - public async Task Execute(BaseFileAccess access, UI.NewFileManager.FileManager fileManager, IServiceProvider provider) + public async Task Execute(BaseFileAccess access, UI.Components.FileManager fileManager, IServiceProvider provider) { var alertService = provider.GetRequiredService(); var toastService = provider.GetRequiredService(); diff --git a/Moonlight/Features/FileManager/Implementations/DeleteContextAction.cs b/Moonlight/Features/FileManager/Implementations/DeleteContextAction.cs index 11ec8dad..223509c6 100644 --- a/Moonlight/Features/FileManager/Implementations/DeleteContextAction.cs +++ b/Moonlight/Features/FileManager/Implementations/DeleteContextAction.cs @@ -1,7 +1,7 @@ using MoonCoreUI.Services; using Moonlight.Features.FileManager.Interfaces; using Moonlight.Features.FileManager.Models.Abstractions.FileAccess; -using Moonlight.Features.FileManager.UI.NewFileManager; +using Moonlight.Features.FileManager.UI.Components; namespace Moonlight.Features.FileManager.Implementations; @@ -12,7 +12,7 @@ public class DeleteContextAction : IFileManagerContextAction public string Color => "danger"; public Func Filter => _ => true; - public async Task Execute(BaseFileAccess access, UI.NewFileManager.FileManager fileManager, FileEntry entry, IServiceProvider serviceProvider) + public async Task Execute(BaseFileAccess access, UI.Components.FileManager fileManager, FileEntry entry, IServiceProvider serviceProvider) { await access.Delete(entry); diff --git a/Moonlight/Features/FileManager/Implementations/DeleteSelectionAction.cs b/Moonlight/Features/FileManager/Implementations/DeleteSelectionAction.cs index d4574aec..fbc0142f 100644 --- a/Moonlight/Features/FileManager/Implementations/DeleteSelectionAction.cs +++ b/Moonlight/Features/FileManager/Implementations/DeleteSelectionAction.cs @@ -1,7 +1,7 @@ using MoonCoreUI.Services; using Moonlight.Features.FileManager.Interfaces; using Moonlight.Features.FileManager.Models.Abstractions.FileAccess; -using Moonlight.Features.FileManager.UI.NewFileManager; +using Moonlight.Features.FileManager.UI.Components; namespace Moonlight.Features.FileManager.Implementations; @@ -10,7 +10,7 @@ public class DeleteSelectionAction : IFileManagerSelectionAction public string Name => "Delete"; public string Color => "danger"; - public async Task Execute(BaseFileAccess access, UI.NewFileManager.FileManager fileManager, FileEntry[] entries, IServiceProvider provider) + public async Task Execute(BaseFileAccess access, UI.Components.FileManager fileManager, FileEntry[] entries, IServiceProvider provider) { var alertService = provider.GetRequiredService(); var toastService = provider.GetRequiredService(); diff --git a/Moonlight/Features/FileManager/Implementations/DownloadContextAction.cs b/Moonlight/Features/FileManager/Implementations/DownloadContextAction.cs index 48aa3210..6a56beec 100644 --- a/Moonlight/Features/FileManager/Implementations/DownloadContextAction.cs +++ b/Moonlight/Features/FileManager/Implementations/DownloadContextAction.cs @@ -4,7 +4,7 @@ using MoonCoreUI.Services; using Moonlight.Features.FileManager.Interfaces; using Moonlight.Features.FileManager.Models.Abstractions.FileAccess; using Moonlight.Features.FileManager.Services; -using Moonlight.Features.FileManager.UI.NewFileManager; +using Moonlight.Features.FileManager.UI.Components; namespace Moonlight.Features.FileManager.Implementations; @@ -15,7 +15,7 @@ public class DownloadContextAction : IFileManagerContextAction public string Color => "primary"; public Func Filter => entry => entry.IsFile; - public async Task Execute(BaseFileAccess access, UI.NewFileManager.FileManager fileManager, FileEntry entry, IServiceProvider serviceProvider) + public async Task Execute(BaseFileAccess access, UI.Components.FileManager fileManager, FileEntry entry, IServiceProvider serviceProvider) { var fileAccessService = serviceProvider.GetRequiredService(); var navigation = serviceProvider.GetRequiredService(); diff --git a/Moonlight/Features/FileManager/Implementations/MoveContextAction.cs b/Moonlight/Features/FileManager/Implementations/MoveContextAction.cs index bd19bce8..b5f3a7ce 100644 --- a/Moonlight/Features/FileManager/Implementations/MoveContextAction.cs +++ b/Moonlight/Features/FileManager/Implementations/MoveContextAction.cs @@ -11,7 +11,7 @@ public class MoveContextAction : IFileManagerContextAction public string Color => "info"; public Func Filter => _ => true; - public async Task Execute(BaseFileAccess access, UI.NewFileManager.FileManager fileManager, FileEntry entry, IServiceProvider provider) + public async Task Execute(BaseFileAccess access, UI.Components.FileManager fileManager, FileEntry entry, IServiceProvider provider) { await fileManager.OpenFolderSelect("Select the location to move the item to", async path => { diff --git a/Moonlight/Features/FileManager/Implementations/MoveSelectionAction.cs b/Moonlight/Features/FileManager/Implementations/MoveSelectionAction.cs index e78fa918..981d9835 100644 --- a/Moonlight/Features/FileManager/Implementations/MoveSelectionAction.cs +++ b/Moonlight/Features/FileManager/Implementations/MoveSelectionAction.cs @@ -9,7 +9,7 @@ public class MoveSelectionAction : IFileManagerSelectionAction public string Name => "Move"; public string Color => "primary"; - public async Task Execute(BaseFileAccess access, UI.NewFileManager.FileManager fileManager, FileEntry[] entries, IServiceProvider provider) + public async Task Execute(BaseFileAccess access, UI.Components.FileManager fileManager, FileEntry[] entries, IServiceProvider provider) { await fileManager.OpenFolderSelect("Select the location to move the items to", async path => { diff --git a/Moonlight/Features/FileManager/Implementations/RenameContextAction.cs b/Moonlight/Features/FileManager/Implementations/RenameContextAction.cs index b405c188..996dffd3 100644 --- a/Moonlight/Features/FileManager/Implementations/RenameContextAction.cs +++ b/Moonlight/Features/FileManager/Implementations/RenameContextAction.cs @@ -1,7 +1,7 @@ using MoonCoreUI.Services; using Moonlight.Features.FileManager.Interfaces; using Moonlight.Features.FileManager.Models.Abstractions.FileAccess; -using Moonlight.Features.FileManager.UI.NewFileManager; +using Moonlight.Features.FileManager.UI.Components; namespace Moonlight.Features.FileManager.Implementations; @@ -12,7 +12,7 @@ public class RenameContextAction : IFileManagerContextAction public string Color => "info"; public Func Filter => _ => true; - public async Task Execute(BaseFileAccess access, UI.NewFileManager.FileManager fileManager, FileEntry entry, IServiceProvider provider) + public async Task Execute(BaseFileAccess access, UI.Components.FileManager fileManager, FileEntry entry, IServiceProvider provider) { var alertService = provider.GetRequiredService(); var toastService = provider.GetRequiredService(); diff --git a/Moonlight/Features/FileManager/Interfaces/IFileManagerContextAction.cs b/Moonlight/Features/FileManager/Interfaces/IFileManagerContextAction.cs index e1e8ba11..a12109c4 100644 --- a/Moonlight/Features/FileManager/Interfaces/IFileManagerContextAction.cs +++ b/Moonlight/Features/FileManager/Interfaces/IFileManagerContextAction.cs @@ -1,5 +1,5 @@ using Moonlight.Features.FileManager.Models.Abstractions.FileAccess; -using Moonlight.Features.FileManager.UI.NewFileManager; +using Moonlight.Features.FileManager.UI.Components; namespace Moonlight.Features.FileManager.Interfaces; @@ -10,5 +10,5 @@ public interface IFileManagerContextAction public string Color { get; } public Func Filter { get; } - public Task Execute(BaseFileAccess access, UI.NewFileManager.FileManager fileManager, FileEntry entry, IServiceProvider provider); + public Task Execute(BaseFileAccess access, UI.Components.FileManager fileManager, FileEntry entry, IServiceProvider provider); } \ No newline at end of file diff --git a/Moonlight/Features/FileManager/Interfaces/IFileManagerCreateAction.cs b/Moonlight/Features/FileManager/Interfaces/IFileManagerCreateAction.cs index d856cb10..87c04781 100644 --- a/Moonlight/Features/FileManager/Interfaces/IFileManagerCreateAction.cs +++ b/Moonlight/Features/FileManager/Interfaces/IFileManagerCreateAction.cs @@ -1,5 +1,5 @@ using Moonlight.Features.FileManager.Models.Abstractions.FileAccess; -using Moonlight.Features.FileManager.UI.NewFileManager; +using Moonlight.Features.FileManager.UI.Components; namespace Moonlight.Features.FileManager.Interfaces; @@ -9,5 +9,5 @@ public interface IFileManagerCreateAction public string Icon { get; } public string Color { get; } - public Task Execute(BaseFileAccess access, UI.NewFileManager.FileManager fileManager, IServiceProvider provider); + public Task Execute(BaseFileAccess access, UI.Components.FileManager fileManager, IServiceProvider provider); } \ No newline at end of file diff --git a/Moonlight/Features/FileManager/Interfaces/IFileManagerSelectionAction.cs b/Moonlight/Features/FileManager/Interfaces/IFileManagerSelectionAction.cs index 12c04aa7..9dea9391 100644 --- a/Moonlight/Features/FileManager/Interfaces/IFileManagerSelectionAction.cs +++ b/Moonlight/Features/FileManager/Interfaces/IFileManagerSelectionAction.cs @@ -1,5 +1,5 @@ using Moonlight.Features.FileManager.Models.Abstractions.FileAccess; -using Moonlight.Features.FileManager.UI.NewFileManager; +using Moonlight.Features.FileManager.UI.Components; namespace Moonlight.Features.FileManager.Interfaces; @@ -8,5 +8,5 @@ public interface IFileManagerSelectionAction public string Name { get; } public string Color { get; } - public Task Execute(BaseFileAccess access, UI.NewFileManager.FileManager fileManager, FileEntry[] entries, IServiceProvider provider); + public Task Execute(BaseFileAccess access, UI.Components.FileManager fileManager, FileEntry[] entries, IServiceProvider provider); } \ 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 9d2e02e7..0eac0d0f 100644 --- a/Moonlight/Features/FileManager/Models/Abstractions/FileAccess/BaseFileAccess.cs +++ b/Moonlight/Features/FileManager/Models/Abstractions/FileAccess/BaseFileAccess.cs @@ -50,7 +50,10 @@ public class BaseFileAccess : IDisposable { var finalPath = CurrentDirectory + entry.Name; - await Actions.Delete(finalPath); + if(entry.IsFile) + await Actions.DeleteFile(finalPath); + else + await Actions.DeleteDirectory(finalPath); } public async Task Move(FileEntry entry, string to) diff --git a/Moonlight/Features/FileManager/Models/Abstractions/FileAccess/IFileActions.cs b/Moonlight/Features/FileManager/Models/Abstractions/FileAccess/IFileActions.cs index abb431f8..5fba42bc 100644 --- a/Moonlight/Features/FileManager/Models/Abstractions/FileAccess/IFileActions.cs +++ b/Moonlight/Features/FileManager/Models/Abstractions/FileAccess/IFileActions.cs @@ -3,13 +3,14 @@ public interface IFileActions : IDisposable { public Task List(string path); - public Task Delete(string path); + public Task DeleteFile(string path); + public Task DeleteDirectory(string path); public Task Move(string from, string to); - public Task CreateDirectory(string name); - public Task CreateFile(string name); - public Task ReadFile(string name); - public Task WriteFile(string name, string content); - public Task ReadFileStream(string name); - public Task WriteFileStream(string name, Stream dataStream); + public Task CreateDirectory(string path); + public Task CreateFile(string path); + public Task ReadFile(string path); + public Task WriteFile(string path, string content); + public Task ReadFileStream(string path); + public Task WriteFileStream(string path, Stream dataStream); public IFileActions Clone(); } \ No newline at end of file diff --git a/Moonlight/Features/FileManager/UI/Components/FileManager.razor b/Moonlight/Features/FileManager/UI/Components/FileManager.razor index 2edf6e86..16e37019 100644 --- a/Moonlight/Features/FileManager/UI/Components/FileManager.razor +++ b/Moonlight/Features/FileManager/UI/Components/FileManager.razor @@ -1,282 +1,363 @@ -@using Moonlight.Core.Configuration @using MoonCore.Helpers @using MoonCore.Services @using MoonCoreUI.Services +@using Moonlight.Core.Configuration +@using Moonlight.Core.Services +@using Moonlight.Features.FileManager.Interfaces @using Moonlight.Features.FileManager.Models.Abstractions.FileAccess +@using Moonlight.Features.FileManager.Services @inject AlertService AlertService -@inject ConfigService ConfigService @inject ToastService ToastService +@inject FileManagerInteropService FileManagerInteropService +@inject SharedFileAccessService FileAccessService +@inject ConfigService ConfigService +@inject PluginService PluginService +@inject IServiceProvider ServiceProvider -
-
-
-
+@implements IDisposable + +
+
+
+
@{ - var elements = Path + var parts = Path .Split("/") .Where(x => !string.IsNullOrEmpty(x)) - .ToList(); + .ToArray(); - int i = 1; - var root = "/"; + var i = 1; } - / - @foreach (var element in elements) - { - var pathToCd = "/" + string.Join('/', elements.Take(i)); + / - @(element) + @foreach (var part in parts) + { + var x = i + 0; + + @(part)
/
i++; }
-
- @if (ShowFileUploader) +
+ @if (View != null && View.Selection.Any()) { - + foreach (var action in SelectionActions) + { + var cssClass = $"btn btn-{action.Color} mx-2"; + + + } } else { - - - Launch - - + + + + + }
-
- @if (ShowFileUploader) - { - - } - else if (ShowFileEditor) - { - - } - else - { - - } -
- -