1
0
mirror of https://github.com/Artemis-RGB/Artemis synced 2025-12-13 05:48:35 +00:00
Artemis/src/Artemis.UI/Controllers/RemoteController.cs
2025-02-15 16:52:26 +01:00

58 lines
1.7 KiB
C#

using System;
using System.Collections.Generic;
using System.IO;
using Artemis.Core;
using Artemis.Core.Services;
using Artemis.UI.Shared.Routing;
using Artemis.UI.Shared.Services.MainWindow;
using Avalonia.Threading;
using GenHTTP.Api.Protocol;
using GenHTTP.Modules.Webservices;
namespace Artemis.UI.Controllers;
public class RemoteController
{
private readonly ICoreService _coreService;
private readonly IMainWindowService _mainWindowService;
private readonly IRouter _router;
public RemoteController(ICoreService coreService, IMainWindowService mainWindowService, IRouter router)
{
_coreService = coreService;
_mainWindowService = mainWindowService;
_router = router;
}
[ResourceMethod(RequestMethod.Post, "bring-to-foreground")]
public void BringToForeground(IRequest request)
{
// Get the route from the request content stream
// TODO: Use [FromBody] attribute instead once GenHTTP allows omitting null values
string? route = null;
if (request.Content != null)
{
using StreamReader reader = new(request.Content);
route = reader.ReadToEnd();
}
Dispatcher.UIThread.InvokeAsync(async () =>
{
if (!string.IsNullOrWhiteSpace(route))
await _router.Navigate(route);
_mainWindowService.OpenMainWindow();
});
}
[ResourceMethod(RequestMethod.Post, "restart")]
public void Restart(List<string> args)
{
Utilities.Restart(_coreService.IsElevated, TimeSpan.FromMilliseconds(500), args.ToArray());
}
[ResourceMethod(RequestMethod.Post, "shutdown")]
public void Shutdown()
{
Utilities.Shutdown();
}
}