diff --git a/Moonlight/Shared/Views/Admin/Servers/Images/Index.razor b/Moonlight/Shared/Views/Admin/Servers/Images/Index.razor index e59b353f..99f3c081 100644 --- a/Moonlight/Shared/Views/Admin/Servers/Images/Index.razor +++ b/Moonlight/Shared/Views/Admin/Servers/Images/Index.razor @@ -1,16 +1,21 @@ @page "/admin/servers/images" @using BlazorTable +@using Logging.Net @using Microsoft.EntityFrameworkCore @using Moonlight.App.Database.Entities @using Moonlight.App.Repositories -@using Moonlight.App.Repositories.Servers @using Moonlight.App.Services +@using Moonlight.App.Services.Interop +@using System.Text +@using Newtonsoft.Json @inject Repository ImageRepository @inject Repository ImageVariableRepository @inject Repository ServerRepository @inject SmartTranslateService SmartTranslateService +@inject ToastService ToastService +@inject NavigationManager NavigationManager
@@ -23,10 +28,28 @@
- + New image +
@@ -86,6 +109,9 @@ private LazyLoader LazyLoader; private Dictionary ServersCount = new(); + + private bool Uploading = false; + private int Percent = 0; private async Task Load(LazyLoader lazyLoader) { @@ -127,4 +153,66 @@ ImageRepository.Delete(image); await LazyLoader.Reload(); } + + private async Task OnFileChanged(InputFileChangeEventArgs arg) + { + await ToastService.CreateProcessToast("upload", SmartTranslateService.Translate("Uploading files")); + + Uploading = true; + await InvokeAsync(StateHasChanged); + + int i = 1; + foreach (var browserFile in arg.GetMultipleFiles()) + { + if (browserFile.Size < 1024 * 1024 * 100) + { + Percent = 0; + + try + { + var stream = browserFile.OpenReadStream(1024 * 1024 * 100); + var data = new byte[browserFile.Size]; + await stream.ReadAsync(data, 0, data.Length); + Percent = 50; + + var text = Encoding.UTF8.GetString(data); + + var image = JsonConvert.DeserializeObject(text); + foreach (var imageDockerImage in image.DockerImages) + { + imageDockerImage.Id = 0; + } + foreach (var imageVariable in image.Variables) + { + imageVariable.Id = 0; + } + image.Id = 0; + + image = ImageRepository.Add(image); + + NavigationManager.NavigateTo("/admin/servers/images/edit/" + image.Id); + } + catch (Exception e) + { + await ToastService.Error(SmartTranslateService.Translate("An unknown error occured while uploading and importing the image")); + Logger.Error("Error uploading file"); + Logger.Error(e); + } + + await ToastService.UpdateProcessToast("upload", $"{i}/{arg.GetMultipleFiles().Count} {SmartTranslateService.Translate("complete")}"); + } + else + { + await ToastService.Error(SmartTranslateService.Translate("The uploaded file should not be bigger than 100MB")); + } + + i++; + } + + Uploading = false; + await InvokeAsync(StateHasChanged); + + await ToastService.UpdateProcessToast("upload", SmartTranslateService.Translate("Upload complete")); + await ToastService.RemoveProcessToast("upload"); + } } \ No newline at end of file