diff --git a/Moonlight.Client/Implementations/SysFileSystemProvider.cs b/Moonlight.Client/Implementations/SysFileSystemProvider.cs index b4c98c9a..8a7c565a 100644 --- a/Moonlight.Client/Implementations/SysFileSystemProvider.cs +++ b/Moonlight.Client/Implementations/SysFileSystemProvider.cs @@ -1,5 +1,7 @@ -using MoonCore.Blazor.Tailwind.Fm; +using MoonCore.Blazor.Services; +using MoonCore.Blazor.Tailwind.Fm; using MoonCore.Blazor.Tailwind.Fm.Models; +using MoonCore.Blazor.Tailwind.Services; using MoonCore.Helpers; using Moonlight.Shared.Http.Requests.Admin.Sys.Files; using Moonlight.Shared.Http.Responses.Admin.Sys; @@ -8,7 +10,9 @@ namespace Moonlight.Client.Implementations; public class SysFileSystemProvider : IFileSystemProvider, ICompressFileSystemProvider { + private readonly DownloadService DownloadService; private readonly HttpApiClient HttpApiClient; + private readonly LocalStorageService LocalStorageService; private readonly string BaseApiUrl = "api/admin/system/files"; public CompressType[] CompressTypes { get; } = @@ -25,9 +29,11 @@ public class SysFileSystemProvider : IFileSystemProvider, ICompressFileSystemPro } ]; - public SysFileSystemProvider(HttpApiClient httpApiClient) + public SysFileSystemProvider(HttpApiClient httpApiClient, DownloadService downloadService, LocalStorageService localStorageService) { HttpApiClient = httpApiClient; + DownloadService = downloadService; + LocalStorageService = localStorageService; } public async Task List(string path) @@ -67,6 +73,29 @@ public class SysFileSystemProvider : IFileSystemProvider, ICompressFileSystemPro public async Task Read(string path) => await HttpApiClient.GetStream($"{BaseApiUrl}/read?path={path}"); + public async Task Download(Func updateProgress, string path, string fileName) + { + var accessToken = await LocalStorageService.GetString("AccessToken"); + + await DownloadService.DownloadUrl(fileName, $"{BaseApiUrl}/read?path={path}", async (bytes, _) => + { + await updateProgress.Invoke(bytes); + }, headers => + { + headers.Add("Authorization", $"Bearer {accessToken}"); + }); + } + + public async Task Upload(Func updateProgress, string path, Stream stream) + { + var progressStream = new ProgressStream(stream, onReadChanged: new Progress(async bytes => + { + await updateProgress.Invoke(bytes); + })); + + await Create(path, progressStream); + } + public async Task Compress(CompressType type, string path, string[] itemsToCompress) { await HttpApiClient.Post($"{BaseApiUrl}/compress", new CompressRequest() diff --git a/Moonlight.Client/Moonlight.Client.csproj b/Moonlight.Client/Moonlight.Client.csproj index b996de40..6fe4dea4 100644 --- a/Moonlight.Client/Moonlight.Client.csproj +++ b/Moonlight.Client/Moonlight.Client.csproj @@ -27,7 +27,7 @@ - +