69 lines
2.8 KiB
C#
69 lines
2.8 KiB
C#
/* This software is licensed by the MIT License, see LICENSE file */
|
|
/* Copyright © 2024-2025 Gregory Lirent */
|
|
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using WebmrAPI.Models;
|
|
using WebmrAPI.Services;
|
|
|
|
namespace WebmrAPI.Controllers
|
|
{
|
|
[ApiController]
|
|
[Route("api/v1/[controller]")]
|
|
[System.Runtime.Versioning.SupportedOSPlatform("windows")]
|
|
public class WindowsController : ControllerBase
|
|
{
|
|
private readonly ProcessMonitor _monitor;
|
|
private readonly ILogger<ProcessController> _logger;
|
|
|
|
public WindowsController(ProcessMonitor monitor, ILogger<ProcessController> logger)
|
|
{
|
|
_monitor = monitor;
|
|
_logger = logger;
|
|
}
|
|
|
|
[HttpGet]
|
|
[ProducesResponseType(StatusCodes.Status200OK, Type = typeof(IEnumerable<WindowInfo>))]
|
|
[ProducesResponseType(StatusCodes.Status400BadRequest)]
|
|
[ProducesResponseType(StatusCodes.Status500InternalServerError)]
|
|
public IActionResult GetWindows(
|
|
[FromQuery] bool pretty = false,
|
|
[FromQuery] string sortBy = "",
|
|
[FromQuery] bool desc = false,
|
|
[FromQuery] int limit = 0,
|
|
[FromQuery] int offset = 0,
|
|
[FromQuery] string search = ""
|
|
)
|
|
{
|
|
try
|
|
{
|
|
var data = _monitor.GetBufferedWindows();
|
|
|
|
if (data != null && !String.IsNullOrEmpty(search))
|
|
{
|
|
data = data.Where(p => p.Title != null && p.Title.ToLowerInvariant().Contains(search.ToLowerInvariant()));
|
|
}
|
|
|
|
if (data != null && !String.IsNullOrEmpty(sortBy))
|
|
{
|
|
sortBy = sortBy.ToLowerInvariant();
|
|
switch (sortBy)
|
|
{
|
|
case "pid": data = ProcessController.Sort(data, p => p.PID, desc); break;
|
|
case "title": data = ProcessController.Sort(data, p => p.Title, desc); break;
|
|
case "threadid": data = ProcessController.Sort(data, p => p.ThreadId, desc); break;
|
|
case "id": data = ProcessController.Sort(data, p => p.Id, desc); break;
|
|
default: return StatusCode(StatusCodes.Status400BadRequest, $"Unexpected search filter {sortBy}.");
|
|
}
|
|
}
|
|
|
|
return Content(ProcessController.GetFormattedJson(ProcessController.Paginate(data, limit, offset), pretty), "application/json");
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
_logger.LogError(ex, "An error occurred when getting the list of windows");
|
|
return StatusCode(StatusCodes.Status500InternalServerError, "An internal server error occurred when receiving windows.");
|
|
}
|
|
}
|
|
}
|
|
}
|