private static IVsSetupPackageInfo[] GetPackages(IVsSetupCompositionService setupService) { if (setupService != null) { // Get the count setupService.GetSetupPackagesInfo(0, null, out uint count); // Get the data var buffer = new IVsSetupPackageInfo[count]; setupService.GetSetupPackagesInfo(count, buffer, out uint actual); // Extra safety in case count changed between the 2 calls return(buffer.Take((int)Math.Min(actual, count)).ToArray()); } else { return(new IVsSetupPackageInfo[0]); } }
public AddInstalledEnvironmentView( IServiceProvider serviceProvider, ProjectView[] projects, ProjectView selectedProject ) : base(serviceProvider, projects, selectedProject) { _logger = Site.GetService(typeof(IPythonToolsLogger)) as IPythonToolsLogger; PageName = Strings.AddInstalledEnvironmentTabHeader; AcceptCaption = Strings.AddInstalledEnvironmentInstallButton; AcceptAutomationName = Strings.AddInstalledEnvironmentInstallButtonAutomationName; IsAcceptShieldVisible = true; _setupService = Site.GetService(typeof(SVsSetupCompositionService)) as IVsSetupCompositionService; _retargeting = Site.GetService(typeof(SVsTrackProjectRetargeting)) as IVsTrackProjectRetargeting2; var packages = GetPackages(_setupService) .Where(p => p.PackageId.StartsWithOrdinal("Component.CPython")) .Select(p => new SetupPackageView( p.PackageId, p.Title, p.CurrentState == (uint)__VsSetupPackageState.INSTALL_PACKAGE_PRESENT, RefreshAcceptButton )); AvailablePackages = new ObservableCollection <object>(packages.Where(p => !p.Installed)); if (!AvailablePackages.Any()) { AvailablePackages.Add(new SetupPackageNoneView(Strings.AddInstalledEnvironmentNoneAvailable)); } InstalledPackages = new ObservableCollection <object>(packages.Where(p => p.Installed)); if (!InstalledPackages.Any()) { InstalledPackages.Add(new SetupPackageNoneView(Strings.AddInstalledEnvironmentNone)); } RefreshAcceptButton(); }