void Init() { Parallel.ForEach(installers, installer => { try { installer.Init(); } catch (Exception ex) { eventAggregator.PublishOnUIThread(new FailureEvent { FailureDescription = $"Failed to get release information for {installer.Name}", FailureText = ex.Message }); } }); var i = 0; Items = installers .OrderBy(x => x.ImageName) .Select(x => new Item { Order = i++, Name = x.Name, ImageUrl = GetImage(x.ImageName), Description = x.Description, Status = x.Status, EventAggregator = eventAggregator, Selected = (x.InstallState != InstallState.Installed) && x.SelectedByDefault, CheckBoxVisible = x.InstallState != InstallState.Installed ? Visibility.Visible : Visibility.Collapsed, UninstallVisible = x.InstallState != InstallState.NotInstalled ? Visibility.Visible : Visibility.Hidden, UninstallText = $"Uninstall {x.Name}", Installer = x }).ToList(); IsInstallEnabled = Items.Any(pd => pd.Selected); Items.BindActionToPropChanged(() => { IsInstallEnabled = Items.Any(p => p.Selected); }, "Selected"); LoadingVisibility = Visibility.Collapsed; if (PendingRestartAndResume.ResumedFromRestart) { var pendingInstalls = PendingRestartAndResume.Installs(); if (pendingInstalls.Count > 0) { foreach (var item in Items) { if (pendingInstalls.Contains(item.Name) && item.CheckBoxVisible == Visibility.Visible) { item.Selected = true; } else { item.Selected = false; } } eventAggregator.PublishOnUIThread(new ResumeInstallCommand { Installs = pendingInstalls }); } PendingRestartAndResume.CleanupResume(); } }
public async Task Install(List <string> itemsToInstall) { errors.Clear(); eventAggregator.PublishOnUIThread(new InstallStartedEvent()); installProgress = 0; var installationDefinitions = installers .Where(p => itemsToInstall.Contains(p.Name)) .OrderBy(p => p.Name).ToList(); if (pendingRestartAndResume.ResumedFromRestart) { var checkpoint = pendingRestartAndResume.Checkpoint(); if (installationDefinitions.Any(p => p.Name.Equals(checkpoint))) { // Fast Forward to the step after the last successful step installationDefinitions = installationDefinitions .SkipWhile(p => !p.Name.Equals(checkpoint)) .Skip(1) .ToList(); } } pendingRestartAndResume.CleanupResume(); installCount = installationDefinitions .Select(p => p.NestedActionCount) .Sum(); foreach (var definition in installationDefinitions) { if (aborting) { break; } PublishProgressEvent(); await definition.Execute(AddOutput, AddError).ConfigureAwait(false); if (InstallFailed) { eventAggregator.PublishOnUIThread(new InstallFailedEvent { Reason = $"Failed to install: {definition.Name}", Failures = errors }); return; } if (definition.RebootRequired) { return; } eventAggregator.PublishOnUIThread(new CheckPointInstallEvent { Item = definition.Name }); } if (!InstallFailed) { eventAggregator.PublishOnUIThread(new InstallSucceededEvent { InstalledItems = itemsToInstall }); } }