public override void OnNavigatedTo(NavigationEventArgs e) { base.OnNavigatedTo(e); Disposables.Add(addJobsSubscrition = new SerialDisposable()); AddJobsCommand = CreateCommand(new ObservableCommand(CanAddJobs()), OnAddJobs); SelectAllJobsCommand = CreateCommand(new ObservableCommand(), OnSelectAllJobs); FilterJobsCommand = CreateCommand(new ObservableCommand(), OnFilterJobs); Disposables.Add(this.GetPropertyValues(x => x.FilterText) .Where(f => f != null && Jobs.Filter != f) .Sample(TimeSpan.FromMilliseconds(200), schedulerAccessor.UserInterface) .Select(filter => Observable.ToAsync(() => Jobs.Filter = filter, schedulerAccessor.Background)()) .Switch() .ObserveOn(schedulerAccessor.UserInterface) .Subscribe(_ => State = (Jobs.Count == 0) ? AddJobsViewState.NoResults : AddJobsViewState.Results)); SelectedJobs = new ObservableCollection<Job>(); var query = e.Uri.GetQueryValues(); if (!query.ContainsKey(BuildServerIdKey)) { navigationService.GoBack(); return; } IsSelectionEnabled = true; int buildServerId = Int32.Parse(query[BuildServerIdKey]); StartLoading(Strings.FindingJobsStatusMessage); BuildServer = jobRepository.GetBuildServer(buildServerId); this.State = AddJobsViewState.Loading; jobProviderFactory .Get(BuildServer.Provider) .GetJobsObservableAsync(BuildServer) .Select(jobs => RemoveExistingJobs(BuildServer, jobs)) .Select(jobs => jobs.Select(CreateAvailableJob) .OrderBy(j => j.Job.Name) .ToList() ) .ObserveOn(schedulerAccessor.UserInterface) .Finally(StopLoading) .Subscribe(loadedJobs => { existingJobCount = jobController.GetJobs().Count; allJobs = loadedJobs; Jobs = new FilteredObservableCollection<AvailableJob>(loadedJobs, FilterJob, schedulerAccessor.UserInterface); State = (Jobs.Count > 0) ? AddJobsViewState.Results : AddJobsViewState.NoResults; }, ex => { ErrorDescription = WebExceptionService.GetDisplayMessage(ex); State = AddJobsViewState.Error; }); }
public override void OnBackKeyPress(CancelEventArgs e) { base.OnBackKeyPress(e); if (ShowFilter) { Jobs.Filter = null; FilterText = null; ShowFilter = false; State = Jobs.Count == 0 ? AddJobsViewState.NoResults : AddJobsViewState.Results; e.Cancel = true; } else { navigationService.GoBackToAny(ViewUris.SelectBuildServer, ViewUris.ListJobs); } }