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 SelectItemsViewModel(IEnumerable <IInstaller> installers, IEventAggregator eventAggregator, PendingRestartAndResume pendingRestartAndResume, ILifetimeScope lifetimeScope, IWindowManager windowManager, InstallActionValidator installActionValidator)
 {
     DisplayName                  = "Selected Items";
     this.installers              = installers.ToList();
     this.eventAggregator         = eventAggregator;
     this.PendingRestartAndResume = pendingRestartAndResume;
     this.windowManager           = windowManager;
     this.installActionValidator  = installActionValidator;
     this.lifetimeScope           = lifetimeScope;
 }
示例#3
0
 public Installer(IEnumerable <IInstaller> installers, IEventAggregator eventAggregator, PendingRestartAndResume pendingRestartAndResume)
 {
     this.installers              = installers.ToList();
     this.eventAggregator         = eventAggregator;
     this.pendingRestartAndResume = pendingRestartAndResume;
 }