Merge pull request #114 from Moonlight-Panel/DotnetRuntimeSettings

dotnet runtime settings
This commit is contained in:
Daniel Balk 2023-05-05 17:47:02 +02:00 committed by GitHub
commit 2de73f948f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 191 additions and 0 deletions

View file

@ -38,6 +38,17 @@ public static class ParseHelper
return res; return res;
} }
public static string ToDotnetVersionName(string raw)
{
var dockerImageTag = raw.Split(":").Last();
var name = dockerImageTag.Replace("_", ".")
.Replace("dotnetcore", ".NET Core ")
.Replace("dotnet", ".NET ");
return name;
}
public static string GetHighestVersion(string[] versions) public static string GetHighestVersion(string[] versions)
{ {
// Initialize the highest version to the first version in the array // Initialize the highest version to the first version in the array

View file

@ -58,12 +58,18 @@
if(Tags.Contains("javaversion")) if(Tags.Contains("javaversion"))
Settings.Add("Java version", typeof(JavaRuntimeVersionSetting)); Settings.Add("Java version", typeof(JavaRuntimeVersionSetting));
if(Tags.Contains("dotnetversion"))
Settings.Add("Dotnet version", typeof(DotnetVersionSetting));
if(Tags.Contains("pythonfile")) if(Tags.Contains("pythonfile"))
Settings.Add("Python file", typeof(PythonFileSetting)); Settings.Add("Python file", typeof(PythonFileSetting));
if(Tags.Contains("javafile")) if(Tags.Contains("javafile"))
Settings.Add("Jar file", typeof(JavaFileSetting)); Settings.Add("Jar file", typeof(JavaFileSetting));
if(Tags.Contains("dotnetfile"))
Settings.Add("Dll file", typeof(DotnetFileSetting));
Settings.Add("Rename", typeof(ServerRenameSetting)); Settings.Add("Rename", typeof(ServerRenameSetting));
Settings.Add("Reset", typeof(ServerResetSetting)); Settings.Add("Reset", typeof(ServerResetSetting));

View file

@ -0,0 +1,85 @@
@using Task = System.Threading.Tasks.Task
@using Moonlight.App.Repositories.Servers
@using Moonlight.Shared.Components.FileManagerPartials
@using Moonlight.App.Database.Entities
@using Moonlight.App.Helpers
@using Moonlight.App.Helpers.Files
@using Moonlight.App.Services
@inject ServerRepository ServerRepository
@inject ServerService ServerService
@inject SmartTranslateService SmartTranslateService
<div class="col">
<div class="card card-body p-0">
<LazyLoader @ref="LazyLoader" Load="Load">
<label class="me-2 form-label">
<TL>Dll file</TL>
</label>
<table class="w-100">
<tr>
<td class="w-100">
<input type="text" class="form-control disabled" disabled="" value="@(PathAndFile)"/>
</td>
<td>
<button @onclick="Show" class="btn btn-primary ms-2"><TL>Change</TL></button>
</td>
</tr>
</table>
</LazyLoader>
</div>
</div>
<FileSelectModal @ref="FileSelectModal"
Access="Access"
Filter="@(x => !x.IsFile || x.Name.EndsWith(".dll"))"
Title="@(SmartTranslateService.Translate("Select dll to execute on start"))"
OnlyFolder="false"
OnCancel="() => { return Task.CompletedTask; }"
OnSubmit="OnSubmit">
</FileSelectModal>
@code
{
[CascadingParameter]
public Server CurrentServer { get; set; }
private string PathAndFile;
private FileAccess Access;
private FileSelectModal FileSelectModal;
private LazyLoader LazyLoader;
protected override async Task OnInitializedAsync()
{
Access = await ServerService.CreateFileAccess(CurrentServer, null!);
}
private async Task Load(LazyLoader lazyLoader)
{
var v = CurrentServer.Variables.FirstOrDefault(x => x.Key == "MAIN_DLL");
PathAndFile = v != null ? v.Value : "";
await InvokeAsync(StateHasChanged);
}
private async Task Show()
{
await FileSelectModal.Show();
}
private async Task OnSubmit(string path)
{
var v = CurrentServer.Variables.FirstOrDefault(x => x.Key == "MAIN_DLL");
if (v != null)
{
v.Value = path.TrimStart("/"[0]);
ServerRepository.Update(CurrentServer);
}
await LazyLoader.Reload();
}
}

View file

@ -0,0 +1,89 @@
@using Moonlight.App.Services
@using Moonlight.App.Helpers
@using Moonlight.App.Repositories
@using Moonlight.App.Repositories.Servers
@using Microsoft.EntityFrameworkCore
@using Moonlight.App.Database.Entities
@inject ServerRepository ServerRepository
@inject ImageRepository ImageRepository
@inject SmartTranslateService TranslationService
<div class="col">
<div class="card card-body p-0">
<LazyLoader @ref="LazyLoader" Load="Load">
<label class="mb-2 form-label"><TL>Dotnet version</TL></label>
<table class="w-100">
<tr>
<td class="w-100">
<select @bind="ImageIndex" class="form-select">
@foreach (var image in DockerImages)
{
if (image.Id == SelectedImage.Id)
{
<option value="@(image.Id)" selected="selected">
@(ParseHelper.ToDotnetVersionName(image.Name))
</option>
}
else
{
<option value="@(image.Id)">
@(ParseHelper.ToDotnetVersionName(image.Name))
</option>
}
}
</select>
</td>
<td>
<WButton
OnClick="Save"
Text="@(TranslationService.Translate("Change"))"
WorkingText="@(TranslationService.Translate("Changing"))"
CssClasses="btn-primary ms-2">
</WButton>
</td>
</tr>
</table>
</LazyLoader>
</div>
</div>
@code
{
[CascadingParameter]
public Server CurrentServer { get; set; }
private LazyLoader LazyLoader;
private List<DockerImage> DockerImages;
private DockerImage SelectedImage;
private int ImageIndex
{
get => SelectedImage.Id;
set { SelectedImage = DockerImages.First(x => x.Id == value); }
}
private Task Load(LazyLoader lazyLoader)
{
var image = ImageRepository
.Get()
.Include(x => x.DockerImages)
.First(x => x.Id == CurrentServer.Image.Id);
DockerImages = image.DockerImages;
SelectedImage = DockerImages[CurrentServer.DockerImageIndex];
return Task.CompletedTask;
}
private async Task Save()
{
CurrentServer.DockerImageIndex = DockerImages.IndexOf(SelectedImage);
ServerRepository.Update(CurrentServer);
await LazyLoader.Reload();
}
}