using System.Threading.Channels; using ErsatzTV.Application.Libraries; using ErsatzTV.Core; using ErsatzTV.FFmpeg.Runtime; namespace ErsatzTV.Application.MediaSources; public class CallLocalLibraryScannerHandler : CallLibraryScannerHandler, IRequestHandler>, IRequestHandler> { public CallLocalLibraryScannerHandler( ChannelWriter channel, IMediator mediator, IRuntimeInfo runtimeInfo) : base(channel, mediator, runtimeInfo) { } Task> IRequestHandler>.Handle( ForceScanLocalLibrary request, CancellationToken cancellationToken) => Handle(request, cancellationToken); Task> IRequestHandler>.Handle( ScanLocalLibraryIfNeeded request, CancellationToken cancellationToken) => Handle(request, cancellationToken); private async Task> Handle(IScanLocalLibrary 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, IScanLocalLibrary request, CancellationToken cancellationToken) { var arguments = new List { "scan-local", request.LibraryId.ToString() }; if (request.ForceScan) { arguments.Add("--force"); } return await base.PerformScan(scanner, arguments, cancellationToken); } }