@page "/media/sources/emby/{Id:int}/paths" @using ErsatzTV.Application.MediaSources @using ErsatzTV.Application.Emby @implements IDisposable @inject NavigationManager _navigationManager @inject ILogger _logger @inject ISnackbar _snackbar @inject IMediator _mediator @code { private readonly CancellationTokenSource _cts = new(); [Parameter] public int Id { get; set; } public void Dispose() { _cts.Cancel(); _cts.Dispose(); } private Task> GetMediaSourceById(int id) => _mediator.Send(new GetEmbyMediaSourceById(Id), _cts.Token) .MapT(vm => new RemoteMediaSourceViewModel(vm.Id, vm.Name, vm.Address)); private Task> GetPathReplacementsBySourceId(int mediaSourceId) => _mediator.Send(new GetEmbyPathReplacementsBySourceId(Id), _cts.Token) .Map(list => list.Map(ProjectToEditViewModel).ToList()); private RemoteMediaSourcePathReplacementEditViewModel ProjectToEditViewModel(EmbyPathReplacementViewModel item) => new() { Id = item.Id, RemotePath = item.EmbyPath, LocalPath = item.LocalPath }; private IRequest> GetUpdatePathReplacementsRequest(List pathReplacements) { var items = pathReplacements .Map(item => new EmbyPathReplacementItem(item.Id, item.RemotePath, item.LocalPath)) .ToList(); return new UpdateEmbyPathReplacements(Id, items); } }