Merge pull request #99 from Moonlight-Panel/FixImageImportExport
Fixed import and export
This commit is contained in:
@@ -1,7 +1,10 @@
|
|||||||
namespace Moonlight.App.Database.Entities;
|
using Newtonsoft.Json;
|
||||||
|
|
||||||
|
namespace Moonlight.App.Database.Entities;
|
||||||
|
|
||||||
public class DockerImage
|
public class DockerImage
|
||||||
{
|
{
|
||||||
|
[JsonIgnore]
|
||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
public bool Default { get; set; } = false;
|
public bool Default { get; set; } = false;
|
||||||
public string Name { get; set; } = "";
|
public string Name { get; set; } = "";
|
||||||
|
|||||||
@@ -1,7 +1,10 @@
|
|||||||
namespace Moonlight.App.Database.Entities;
|
using Newtonsoft.Json;
|
||||||
|
|
||||||
|
namespace Moonlight.App.Database.Entities;
|
||||||
|
|
||||||
public class Image
|
public class Image
|
||||||
{
|
{
|
||||||
|
[JsonIgnore]
|
||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
public Guid Uuid { get; set; }
|
public Guid Uuid { get; set; }
|
||||||
public string Name { get; set; } = "";
|
public string Name { get; set; } = "";
|
||||||
|
|||||||
@@ -1,7 +1,10 @@
|
|||||||
namespace Moonlight.App.Database.Entities;
|
using Newtonsoft.Json;
|
||||||
|
|
||||||
|
namespace Moonlight.App.Database.Entities;
|
||||||
|
|
||||||
public class ImageVariable
|
public class ImageVariable
|
||||||
{
|
{
|
||||||
|
[JsonIgnore]
|
||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
public string Key { get; set; } = "";
|
public string Key { get; set; } = "";
|
||||||
public string DefaultValue { get; set; } = "";
|
public string DefaultValue { get; set; } = "";
|
||||||
|
|||||||
@@ -14,8 +14,7 @@
|
|||||||
@inject Repository<ImageVariable> ImageVariableRepository
|
@inject Repository<ImageVariable> ImageVariableRepository
|
||||||
@inject Repository<Server> ServerRepository
|
@inject Repository<Server> ServerRepository
|
||||||
@inject SmartTranslateService SmartTranslateService
|
@inject SmartTranslateService SmartTranslateService
|
||||||
@inject ToastService ToastService
|
@inject AlertService AlertService
|
||||||
@inject NavigationManager NavigationManager
|
|
||||||
|
|
||||||
<OnlyAdmin>
|
<OnlyAdmin>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
@@ -33,13 +32,7 @@
|
|||||||
<TL>New image</TL>
|
<TL>New image</TL>
|
||||||
</a>
|
</a>
|
||||||
<InputFile OnChange="OnFileChanged" type="file" id="fileUpload" hidden="" multiple=""/>
|
<InputFile OnChange="OnFileChanged" type="file" id="fileUpload" hidden="" multiple=""/>
|
||||||
<label for="fileUpload" class="btn btn-sm btn-light-primary @(Uploading ? "disabled" : "")">
|
<label for="fileUpload" class="btn btn-sm btn-light-primary">
|
||||||
@if (Uploading)
|
|
||||||
{
|
|
||||||
<span>@(Percent)%</span>
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
<span class="svg-icon svg-icon-2">
|
<span class="svg-icon svg-icon-2">
|
||||||
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
<path opacity="0.3" d="M10 4H21C21.6 4 22 4.4 22 5V7H10V4Z" fill="currentColor"></path>
|
<path opacity="0.3" d="M10 4H21C21.6 4 22 4.4 22 5V7H10V4Z" fill="currentColor"></path>
|
||||||
@@ -48,7 +41,6 @@
|
|||||||
</svg>
|
</svg>
|
||||||
</span>
|
</span>
|
||||||
<TL>Import</TL>
|
<TL>Import</TL>
|
||||||
}
|
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -108,10 +100,7 @@
|
|||||||
private Image[] Images;
|
private Image[] Images;
|
||||||
private LazyLoader LazyLoader;
|
private LazyLoader LazyLoader;
|
||||||
|
|
||||||
private Dictionary<Image, int> ServersCount = new();
|
private readonly Dictionary<Image, int> ServersCount = new();
|
||||||
|
|
||||||
private bool Uploading = false;
|
|
||||||
private int Percent = 0;
|
|
||||||
|
|
||||||
private async Task Load(LazyLoader lazyLoader)
|
private async Task Load(LazyLoader lazyLoader)
|
||||||
{
|
{
|
||||||
@@ -156,63 +145,32 @@
|
|||||||
|
|
||||||
private async Task OnFileChanged(InputFileChangeEventArgs arg)
|
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())
|
foreach (var browserFile in arg.GetMultipleFiles())
|
||||||
{
|
{
|
||||||
if (browserFile.Size < 1024 * 1024 * 100)
|
|
||||||
{
|
|
||||||
Percent = 0;
|
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var stream = browserFile.OpenReadStream(1024 * 1024 * 100);
|
var stream = browserFile.OpenReadStream(1024 * 1024 * 100);
|
||||||
var data = new byte[browserFile.Size];
|
var data = new byte[browserFile.Size];
|
||||||
await stream.ReadAsync(data, 0, data.Length);
|
_ = await stream.ReadAsync(data, 0, data.Length);
|
||||||
Percent = 50;
|
|
||||||
|
|
||||||
var text = Encoding.UTF8.GetString(data);
|
var text = Encoding.UTF8.GetString(data);
|
||||||
|
var image = JsonConvert.DeserializeObject<Image>(text)!;
|
||||||
|
|
||||||
var image = JsonConvert.DeserializeObject<Image>(text);
|
image.Uuid = Guid.NewGuid();
|
||||||
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);
|
ImageRepository.Add(image);
|
||||||
|
|
||||||
NavigationManager.NavigateTo("/admin/servers/images/edit/" + image.Id);
|
await AlertService.Success(SmartTranslateService.Translate("Successfully imported image"));
|
||||||
|
await LazyLoader.Reload();
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
await ToastService.Error(SmartTranslateService.Translate("An unknown error occured while uploading and importing the image"));
|
await AlertService.Error(SmartTranslateService.Translate("An unknown error occured while uploading and importing the image"));
|
||||||
Logger.Error("Error uploading file");
|
Logger.Error("Error importing image");
|
||||||
Logger.Error(e);
|
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 InvokeAsync(StateHasChanged);
|
||||||
|
|
||||||
await ToastService.UpdateProcessToast("upload", SmartTranslateService.Translate("Upload complete"));
|
|
||||||
await ToastService.RemoveProcessToast("upload");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user