using System.Threading.Channels; using ErsatzTV.Application.Libraries; using ErsatzTV.Core; using ErsatzTV.FFmpeg.Runtime; namespace ErsatzTV.Application.Jellyfin; public class CallJellyfinLibraryScannerHandler : CallLibraryScannerHandler, IRequestHandler>, IRequestHandler> { public CallJellyfinLibraryScannerHandler( ChannelWriter channel, IMediator mediator, IRuntimeInfo runtimeInfo) : base(channel, mediator, runtimeInfo) { } Task> IRequestHandler>.Handle( ForceSynchronizeJellyfinLibraryById request, CancellationToken cancellationToken) => Handle(request, cancellationToken); Task> IRequestHandler>.Handle( SynchronizeJellyfinLibraryByIdIfNeeded request, CancellationToken cancellationToken) => Handle(request, cancellationToken); private async Task> Handle( ISynchronizeJellyfinLibraryById request, CancellationToken cancellationToken) { Validation validation = Validate(); return await validation.Match( scanner => PerformScan(scanner, request, cancellationToken), error => Task.FromResult>(error.Join())); } private async Task> PerformScan( string scanner, ISynchronizeJellyfinLibraryById request, CancellationToken cancellationToken) { var arguments = new List { "scan-jellyfin", request.JellyfinLibraryId.ToString() }; if (request.ForceScan) { arguments.Add("--force"); } return await base.PerformScan(scanner, arguments, cancellationToken); } }