/// <summary> /// Get everything setup to show the PDF document /// </summary> /// <param name="docSequence"></param> /// <param name="initialPage">The page that should be shown when we start up. Zero indexed</param> /// <param name="screen">The screen that hosts everything (routing!)</param> public FullTalkAsStripViewModel(IScreen screen, PDFFile file) { Debug.Assert(file != null); Debug.Assert(screen != null); HostScreen = screen; // We basically re-set each time a new file comes down from the top. Pages = new ReactiveList <PDFPageViewModel>(); var pageSizeChanged = file.WhenAny(x => x.NumberOfPages, x => x.Value) .DistinctUntilChanged() .ObserveOn(RxApp.MainThreadScheduler); var b = from newPageLength in pageSizeChanged let np = Pages.Count from allpages in CreateNPages(newPageLength - np, np, file) select new { numPages = newPageLength, freshPages = allpages }; b .ObserveOn(RxApp.MainThreadScheduler) .Subscribe(info => SetNPages(info.numPages, info.freshPages)); // Page navigation. Make sure things are clean and we don't over-burden the UI before // we pass the info back to the UI! _moveToPage = new ReplaySubject <int>(1); _loaded = new ReplaySubject <Unit>(1); MoveToPage = _moveToPage .CombineLatest(_loaded, (p, _) => p) .Select(scrubPageIndex) .DistinctUntilChanged(); PageForward = ReactiveCommand.Create(); PageForward .Cast <int>() .Select(pn => pn + 1) .Subscribe(_moveToPage); PageBack = ReactiveCommand.Create(); PageBack .Cast <int>() .Select(pn => pn - 1) .Subscribe(_moveToPage); PageMove = ReactiveCommand.Create(); PageMove .Cast <int>() .Subscribe(_moveToPage); }
public async Task <int> Handle(CreatePageForwardCommand request, CancellationToken cancellationToken) { var entity = new PageForward { Mask = request.Mask, ProjectId = request.ProjectId, SourceId = request.SourceId, Type = request.Type, DestinationUrl = request.DestinationUrl }; _context.PageForwards.Add(entity); await _context.SaveChangesAsync(cancellationToken); return(entity.Id); }