using System.Threading.Channels; using ErsatzTV.Application.Libraries; using ErsatzTV.Core; using ErsatzTV.FFmpeg.Runtime; namespace ErsatzTV.Application.Plex; public class CallPlexLibraryScannerHandler : CallLibraryScannerHandler, IRequestHandler>, IRequestHandler> { public CallPlexLibraryScannerHandler( ChannelWriter channel, IMediator mediator, IRuntimeInfo runtimeInfo) : base(channel, mediator, runtimeInfo) { } Task> IRequestHandler>.Handle( ForceSynchronizePlexLibraryById request, CancellationToken cancellationToken) => Handle(request, cancellationToken); Task> IRequestHandler>.Handle( SynchronizePlexLibraryByIdIfNeeded request, CancellationToken cancellationToken) => Handle(request, cancellationToken); private async Task> Handle( ISynchronizePlexLibraryById 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, ISynchronizePlexLibraryById request, CancellationToken cancellationToken) { var arguments = new List { "scan-plex", request.PlexLibraryId.ToString() }; if (request.ForceScan) { arguments.Add("--force"); } if (request.DeepScan) { arguments.Add("--deep"); } return await base.PerformScan(scanner, arguments, cancellationToken); } }