* add ability to deep scan just a single tv show for Plex, Emby, and Jellyfin
Including "/api/libraries/{id:int}/scan-show" REST API endpoint to
trigger.
* restrict plex search results to the intended library
* restrict scanning to media server libraries that are marked to sync with etv
* fix previous commit
* also guard library scan api
* add scan buttons to show ui
* scan single plex show by id
* scan jellyfin and emby single shows by id
* update changelog
---------
Co-authored-by: Jeff Slutter <MrMustard@gmail.com>
Co-authored-by: Jason Dove <1695733+jasongdove@users.noreply.github.com>
41 lines
1.6 KiB
C#
41 lines
1.6 KiB
C#
using ErsatzTV.Application.Libraries;
|
|
using ErsatzTV.Core.Interfaces.Repositories;
|
|
using MediatR;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
|
|
namespace ErsatzTV.Controllers.Api;
|
|
|
|
[ApiController]
|
|
public class LibrariesController(ITelevisionRepository televisionRepository, IMediator mediator)
|
|
{
|
|
[HttpPost("/api/libraries/{id:int}/scan")]
|
|
public async Task<IActionResult> ResetPlayout(int id) =>
|
|
await mediator.Send(new QueueLibraryScanByLibraryId(id))
|
|
? new OkResult()
|
|
: new NotFoundResult();
|
|
|
|
[HttpPost("/api/libraries/{id:int}/scan-show")]
|
|
public async Task<IActionResult> ScanShow(int id, [FromBody] ScanShowRequest request)
|
|
{
|
|
if (string.IsNullOrWhiteSpace(request.ShowTitle))
|
|
{
|
|
return new BadRequestObjectResult(new { error = "ShowTitle is required" });
|
|
}
|
|
|
|
var trimmedTitle = request.ShowTitle.Trim();
|
|
var maybeShowId = await televisionRepository.GetShowIdByTitle(id, trimmedTitle);
|
|
foreach (var showId in maybeShowId)
|
|
{
|
|
bool result = await mediator.Send(new QueueShowScanByLibraryId(id, showId, trimmedTitle, request.DeepScan));
|
|
|
|
return result
|
|
? new OkResult()
|
|
: new BadRequestObjectResult(new { error = "Unable to queue show scan. Library may not exist, may not support single show scanning, or may already be scanning." });
|
|
}
|
|
|
|
return new BadRequestObjectResult(new { error = $"Unable to locate show with title {request.ShowTitle} in library {id}" });
|
|
}
|
|
}
|
|
|
|
public record ScanShowRequest(string ShowTitle, bool DeepScan = false);
|