Added server kill confirmation prompt. Improved power action handling
This commit is contained in:
parent
c9fe469f5b
commit
da8b01bb98
3 changed files with 48 additions and 4 deletions
|
@ -1,6 +1,11 @@
|
||||||
|
using System.ComponentModel;
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
|
||||||
namespace Moonlight.Features.Servers.Configuration;
|
namespace Moonlight.Features.Servers.Configuration;
|
||||||
|
|
||||||
public class ServersConfiguration
|
public class ServersConfiguration
|
||||||
{
|
{
|
||||||
|
[JsonProperty("DisableServerKillWarning")]
|
||||||
|
[Description("With this option you can globally disable the confirmation popup shown when killing a server")]
|
||||||
|
public bool DisableServerKillWarning { get; set; } = false;
|
||||||
}
|
}
|
|
@ -5,6 +5,7 @@ using Moonlight.Core.Interfaces;
|
||||||
using Moonlight.Core.Models.Abstractions.Feature;
|
using Moonlight.Core.Models.Abstractions.Feature;
|
||||||
using Moonlight.Core.Services;
|
using Moonlight.Core.Services;
|
||||||
using Moonlight.Features.Servers.Actions;
|
using Moonlight.Features.Servers.Actions;
|
||||||
|
using Moonlight.Features.Servers.Configuration;
|
||||||
using Moonlight.Features.Servers.Http.Middleware;
|
using Moonlight.Features.Servers.Http.Middleware;
|
||||||
using Moonlight.Features.Servers.Implementations.Diagnose;
|
using Moonlight.Features.Servers.Implementations.Diagnose;
|
||||||
using Moonlight.Features.Servers.Models.Enums;
|
using Moonlight.Features.Servers.Models.Enums;
|
||||||
|
@ -29,6 +30,11 @@ public class ServersFeature : MoonlightFeature
|
||||||
var config = new ConfigService<CoreConfiguration>(PathBuilder.File("storage", "configs", "core.json"));
|
var config = new ConfigService<CoreConfiguration>(PathBuilder.File("storage", "configs", "core.json"));
|
||||||
context.Builder.Services.AddSingleton(new JwtService<ServersJwtType>(config.Get().Security.Token));
|
context.Builder.Services.AddSingleton(new JwtService<ServersJwtType>(config.Get().Security.Token));
|
||||||
|
|
||||||
|
//
|
||||||
|
var configService = new ConfigService<ServersConfiguration>(PathBuilder.File("storage", "configs", "servers.json"));
|
||||||
|
context.Builder.Services.AddSingleton(configService);
|
||||||
|
|
||||||
|
// Assets
|
||||||
context.AddAsset("Servers", "css/XtermBlazor.css");
|
context.AddAsset("Servers", "css/XtermBlazor.css");
|
||||||
|
|
||||||
context.AddAsset("Servers", "css/apexcharts.css");
|
context.AddAsset("Servers", "css/apexcharts.css");
|
||||||
|
|
|
@ -11,10 +11,15 @@
|
||||||
@using Moonlight.Features.Servers.UI.UserViews
|
@using Moonlight.Features.Servers.UI.UserViews
|
||||||
@using System.Net.Sockets
|
@using System.Net.Sockets
|
||||||
@using System.Net.WebSockets
|
@using System.Net.WebSockets
|
||||||
|
@using MoonCore.Exceptions
|
||||||
|
@using Moonlight.Features.Servers.Configuration
|
||||||
|
@using MoonCore.Services
|
||||||
|
|
||||||
@inject Repository<Server> ServerRepository
|
@inject Repository<Server> ServerRepository
|
||||||
@inject ServerService ServerService
|
@inject ServerService ServerService
|
||||||
@inject ToastService ToastService
|
@inject ToastService ToastService
|
||||||
|
@inject AlertService AlertService
|
||||||
|
@inject ConfigService<ServersConfiguration> ConfigService
|
||||||
|
|
||||||
@implements IDisposable
|
@implements IDisposable
|
||||||
|
|
||||||
|
@ -301,11 +306,39 @@
|
||||||
await InstallTerminal.WriteLine(message);
|
await InstallTerminal.WriteLine(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task Start() => await ServerService.Console.SendAction(Server, PowerAction.Start);
|
private async Task Start() => await SendSignalHandled(PowerAction.Start);
|
||||||
|
|
||||||
private async Task Stop() => await ServerService.Console.SendAction(Server, PowerAction.Stop);
|
private async Task Stop() => await SendSignalHandled(PowerAction.Stop);
|
||||||
|
|
||||||
private async Task Kill() => await ServerService.Console.SendAction(Server, PowerAction.Kill);
|
private async Task Kill()
|
||||||
|
{
|
||||||
|
if (!ConfigService.Get().DisableServerKillWarning)
|
||||||
|
{
|
||||||
|
if (!await AlertService.YesNo("Do you really want to kill the server? This can result in data loss or corrupted server files"))
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
await SendSignalHandled(PowerAction.Kill);
|
||||||
|
}
|
||||||
|
|
||||||
|
private async Task SendSignalHandled(PowerAction action)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
await ServerService.Console.SendAction(Server, action);
|
||||||
|
}
|
||||||
|
catch (DisplayException)
|
||||||
|
{
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Logger.Warn($"An error occured while sending power action {action} to server {Server.Id}:");
|
||||||
|
Logger.Warn(e);
|
||||||
|
|
||||||
|
await ToastService.Danger("An error occured while sending power action to server. Check the console for more information");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public async void Dispose()
|
public async void Dispose()
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue