191 lines
7.0 KiB
Plaintext
191 lines
7.0 KiB
Plaintext
@using System.Text.RegularExpressions
|
|
@using LucideBlazor
|
|
@using Moonlight.Frontend.UI.Admin.Modals
|
|
@using Moonlight.Shared.Http.Responses.Admin
|
|
@using ShadcnBlazor.Cards
|
|
@using ShadcnBlazor.Emptys
|
|
@using ShadcnBlazor.Buttons
|
|
@using ShadcnBlazor.Extras.AlertDialogs
|
|
@using ShadcnBlazor.Extras.Common
|
|
@using ShadcnBlazor.Extras.Dialogs
|
|
@using ShadcnBlazor.Fields
|
|
@using ShadcnBlazor.Selects
|
|
|
|
@inject HttpClient HttpClient
|
|
@inject DialogService DialogService
|
|
@inject AlertDialogService AlertDialogService
|
|
|
|
<div class="mt-5">
|
|
<LazyLoader Load="LoadAsync">
|
|
@if (StatusDto.IsEnabled)
|
|
{
|
|
if (StatusDto.IsReachable)
|
|
{
|
|
<div class="grid grid-cols-1 lg:grid-cols-2 gap-5">
|
|
<Card ClassName="col-span-1">
|
|
<CardHeader>
|
|
<CardTitle>Version</CardTitle>
|
|
</CardHeader>
|
|
<CardContent>
|
|
<FieldGroup>
|
|
<FieldSet>
|
|
<Field>
|
|
<FieldLabel>
|
|
Version
|
|
</FieldLabel>
|
|
<FieldContent>
|
|
<Select DefaultValue="@SelectedVersion" @bind-Value="SelectedVersion">
|
|
<SelectTrigger ClassName="w-64">
|
|
<SelectValue/>
|
|
</SelectTrigger>
|
|
<SelectContent ClassName="w-64">
|
|
<SelectItem Value="v2.1">v2.1</SelectItem>
|
|
<SelectItem Value="feat/ContainerHelper">feat/ContainerHelper
|
|
</SelectItem>
|
|
</SelectContent>
|
|
</Select>
|
|
</FieldContent>
|
|
</Field>
|
|
</FieldSet>
|
|
<Field Orientation="FieldOrientation.Horizontal">
|
|
<Button @onclick="AskApplyAsync">Apply</Button>
|
|
</Field>
|
|
</FieldGroup>
|
|
</CardContent>
|
|
</Card>
|
|
<Card ClassName="col-span-1">
|
|
<CardHeader>
|
|
<CardTitle>Plugins</CardTitle>
|
|
</CardHeader>
|
|
<CardContent>
|
|
<Empty>
|
|
<EmptyHeader>
|
|
<EmptyMedia Variant="EmptyMediaVariant.Icon">
|
|
<SearchIcon/>
|
|
</EmptyMedia>
|
|
<EmptyTitle>No Plugins found</EmptyTitle>
|
|
<EmptyDescription>
|
|
No plugins found in instance configuration
|
|
</EmptyDescription>
|
|
</EmptyHeader>
|
|
</Empty>
|
|
</CardContent>
|
|
</Card>
|
|
</div>
|
|
}
|
|
else
|
|
{
|
|
<Empty>
|
|
<EmptyHeader>
|
|
<EmptyMedia Variant="EmptyMediaVariant.Icon">
|
|
<CircleAlertIcon ClassName="text-red-500"/>
|
|
</EmptyMedia>
|
|
<EmptyTitle>Container Helper unreachable</EmptyTitle>
|
|
<EmptyDescription>
|
|
The container helper is unreachable. No management actions are available
|
|
</EmptyDescription>
|
|
</EmptyHeader>
|
|
</Empty>
|
|
}
|
|
}
|
|
else
|
|
{
|
|
<Empty>
|
|
<EmptyHeader>
|
|
<EmptyMedia Variant="EmptyMediaVariant.Icon">
|
|
<ToggleLeftIcon/>
|
|
</EmptyMedia>
|
|
<EmptyTitle>Container Helper is disabled</EmptyTitle>
|
|
<EmptyDescription>
|
|
The container helper is disabled on this instance.
|
|
This might be due to running a multiple container moonlight setup
|
|
</EmptyDescription>
|
|
</EmptyHeader>
|
|
</Empty>
|
|
}
|
|
</LazyLoader>
|
|
</div>
|
|
|
|
@code
|
|
{
|
|
private ContainerHelperStatusDto StatusDto;
|
|
private string SelectedVersion = "v2.1";
|
|
|
|
private async Task LoadAsync(LazyLoader _)
|
|
{
|
|
StatusDto = (await HttpClient.GetFromJsonAsync<ContainerHelperStatusDto>("api/admin/ch/status"))!;
|
|
}
|
|
|
|
private async Task ApplyAsync()
|
|
{
|
|
await DialogService.LaunchAsync<UpdateInstanceModal>(
|
|
parameters => { parameters[nameof(UpdateInstanceModal.Version)] = SelectedVersion; },
|
|
onConfigure: model =>
|
|
{
|
|
model.ShowCloseButton = false;
|
|
model.ClassName = "sm:max-w-4xl!";
|
|
}
|
|
);
|
|
}
|
|
|
|
private async Task AskApplyAsync()
|
|
{
|
|
if(string.IsNullOrWhiteSpace(SelectedVersion))
|
|
return;
|
|
|
|
var shouldContinue = await ConfirmRiskyVersionAsync(
|
|
"Moonlight Rebuild",
|
|
"If you continue the moonlight instance will become unavailable during the rebuild process. This will impact users on this instance"
|
|
);
|
|
|
|
if(!shouldContinue)
|
|
return;
|
|
|
|
if (!Regex.IsMatch(SelectedVersion, @"^v\d+(\.\d+)*b?$"))
|
|
{
|
|
shouldContinue = await ConfirmRiskyVersionAsync(
|
|
"Development Version",
|
|
"You are about to install development a version. This can break your instance. Continue at your own risk"
|
|
);
|
|
}
|
|
else
|
|
{
|
|
if (SelectedVersion.EndsWith('b'))
|
|
{
|
|
shouldContinue = await ConfirmRiskyVersionAsync(
|
|
"Beta / Pre-Release Version",
|
|
"You are about to install a version marked as pre-release / beta. This can break your instance. Continue at your own risk"
|
|
);
|
|
}
|
|
else
|
|
shouldContinue = true;
|
|
}
|
|
|
|
if (!shouldContinue)
|
|
return;
|
|
|
|
await ApplyAsync();
|
|
}
|
|
|
|
private async Task<bool> ConfirmRiskyVersionAsync(string title, string message)
|
|
{
|
|
var tcs = new TaskCompletionSource();
|
|
var confirmed = false;
|
|
|
|
await AlertDialogService.ConfirmDangerAsync(
|
|
title,
|
|
message,
|
|
() =>
|
|
{
|
|
confirmed = true;
|
|
tcs.SetResult();
|
|
return Task.CompletedTask;
|
|
}
|
|
);
|
|
|
|
await tcs.Task;
|
|
|
|
return confirmed;
|
|
}
|
|
}
|