@page "/media/sources/plex/{Id:int}/libraries" @using ErsatzTV.Application.MediaSources @using ErsatzTV.Application.Plex @inject IMediator Mediator @inject ChannelWriter ScannerWorkerChannel @code { [Parameter] public int Id { get; set; } private IRequest> GetUpdateLibraryRequest(List libraries) => new UpdatePlexLibraryPreferences( libraries.Map(l => new PlexLibraryPreference(l.Id, l.ShouldSyncItems)).ToList()); private async Task> GetLibrariesBySourceId(int mediaSourceId, CancellationToken cancellationToken) => await Mediator.Send(new GetPlexLibrariesBySourceId(Id), cancellationToken) .Map(list => list.Map(ProjectToEditViewModel).OrderBy(x => x.MediaKind).ThenBy(x => x.Name).ToList()); private async Task> GetMediaSourceById(int mediaSourceId, CancellationToken cancellationToken) => await Mediator.Send(new GetPlexMediaSourceById(Id), cancellationToken) .MapT(vm => new RemoteMediaSourceViewModel(vm.Id, vm.Name, vm.Address)); private RemoteMediaSourceLibraryEditViewModel ProjectToEditViewModel(PlexLibraryViewModel library) => new() { Id = library.Id, Name = library.Name, MediaKind = library.MediaKind, ShouldSyncItems = library.ShouldSyncItems }; private async Task SynchronizeLibraryByIdIfNeeded(RemoteMediaSourceLibrariesEditor.SynchronizeParameters parameters, CancellationToken cancellationToken) { await ScannerWorkerChannel.WriteAsync(new SynchronizePlexLibraryByIdIfNeeded(parameters.LibraryId), cancellationToken); await ScannerWorkerChannel.WriteAsync(new SynchronizePlexNetworks(parameters.LibraryId, false), cancellationToken); return Unit.Default; } }