示例#1
0
        /// <summary>
        /// Sets the package to be displayed in the detail control.
        /// </summary>
        /// <param name="searchResultPackage">The package to be displayed.</param>
        /// <param name="filter">The current filter. This will used to select the default action.</param>
        public async virtual Task SetCurrentPackage(
            PackageItemListViewModel searchResultPackage,
            ItemFilter filter)
        {
            _searchResultPackage = searchResultPackage;
            _filter = filter;
            OnPropertyChanged(nameof(Id));
            OnPropertyChanged(nameof(IconUrl));

            var versions = await searchResultPackage.GetVersionsAsync();

            _allPackageVersions = versions.Select(v => v.Version).ToList();

            _projectVersionRangeDict = new Dictionary <string, VersionRange>(StringComparer.OrdinalIgnoreCase);

            // filter project.json based projects since allowedVersion is only applicable to packages.config
            var packagesConfigProjects = _nugetProjects.Where(project => !(project is INuGetIntegratedProject));

            foreach (var project in packagesConfigProjects)
            {
                // cache allowed version range for each nuget project for current selected package
                var packageReference = (await project.GetInstalledPackagesAsync(CancellationToken.None))
                                       .FirstOrDefault(r => StringComparer.OrdinalIgnoreCase.Equals(r.PackageIdentity.Id, searchResultPackage.Id));

                _projectVersionRangeDict.Add(project.GetMetadata <string>(NuGetProjectMetadataKeys.Name), packageReference?.AllowedVersions);
            }

            // hook event handler for dependency behavior changed
            Options.SelectedChanged += DependencyBehavior_SelectedChanged;

            CreateVersions();
            OnCurrentPackageChanged();
        }
示例#2
0
        private async Task <IEnumerable <(VersionInfo versionInfo, PackageDeprecationMetadata deprecationMetadata)> > GetVersionsWithDeprecationMetadataAsync()
        {
            var versions = await _searchResultPackage.GetVersionsAsync();

            return(await Task.WhenAll(
                       versions.Select(async version =>
            {
                var deprecationMetadata = version != null && version.PackageSearchMetadata != null
                        ? await version.PackageSearchMetadata.GetDeprecationMetadataAsync()
                        : null;

                return (version, deprecationMetadata);
            })));
        }
        /// <summary>
        /// Returns the list of projects that are selected for the given action
        /// </summary>
        //public abstract IEnumerable<NuGetProject> GetSelectedProjects(UserAction action);

        /// <summary>
        /// Sets the package to be displayed in the detail control.
        /// </summary>
        /// <param name="searchResultPackage">The package to be displayed.</param>
        /// <param name="filter">The current filter. This will used to select the default action.</param>
        public async virtual Task SetCurrentPackage(
            PackageItemListViewModel searchResultPackage)            //,
        //	ItemFilter filter)
        {
            _searchResultPackage = searchResultPackage;
            //_filter = filter;
            //OnPropertyChanged(nameof(Id));
            //OnPropertyChanged(nameof(IconUrl));

            var versions = await searchResultPackage.GetVersionsAsync();

            _allPackageVersions = versions.Select(v => v.Version).ToList();

            //CreateVersions();
            //OnCurrentPackageChanged();
        }
		/// <summary>
		/// Returns the list of projects that are selected for the given action
		/// </summary>
		//public abstract IEnumerable<NuGetProject> GetSelectedProjects(UserAction action);

		/// <summary>
		/// Sets the package to be displayed in the detail control.
		/// </summary>
		/// <param name="searchResultPackage">The package to be displayed.</param>
		/// <param name="filter">The current filter. This will used to select the default action.</param>
		public async virtual Task SetCurrentPackage(
			PackageItemListViewModel searchResultPackage)//,
		//	ItemFilter filter)
		{
			_searchResultPackage = searchResultPackage;
			//_filter = filter;
			//OnPropertyChanged(nameof(Id));
			//OnPropertyChanged(nameof(IconUrl));

			var versions = await searchResultPackage.GetVersionsAsync();

			_allPackageVersions = versions.Select(v => v.Version).ToList();

			//CreateVersions();
			//OnCurrentPackageChanged();
		}
        internal async Task LoadPackageMetadaAsync(IPackageMetadataProvider metadataProvider, CancellationToken token)
        {
            var versions = await _searchResultPackage.GetVersionsAsync();

            var packages = Enumerable.Empty <IPackageSearchMetadata>();

            try
            {
                // load up the full details for each version
                if (metadataProvider != null)
                {
                    packages = await metadataProvider.GetPackageMetadataListAsync(Id, true, false, token);
                }
            }
            catch (InvalidOperationException)
            {
                // Ignore failures.
            }

            var uniquePackages = packages
                                 .GroupBy(m => m.Identity.Version, (v, ms) => ms.First());

            var s = uniquePackages
                    .GroupJoin(
                versions,
                m => m.Identity.Version,
                d => d.Version,
                (m, d) => new DetailedPackageMetadata(m, d.FirstOrDefault()?.DownloadCount));

            _metadataDict = s.ToDictionary(m => m.Version);

            DetailedPackageMetadata p;

            if (SelectedVersion != null &&
                _metadataDict.TryGetValue(SelectedVersion.Version, out p))
            {
                PackageMetadata = p;
            }
        }
示例#6
0
        /// <summary>
        /// Sets the package to be displayed in the detail control.
        /// </summary>
        /// <param name="searchResultPackage">The package to be displayed.</param>
        /// <param name="filter">The current filter. This will used to select the default action.</param>
        public async virtual Task SetCurrentPackage(
            PackageItemListViewModel searchResultPackage,
            ItemFilter filter,
            Func <PackageItemListViewModel> getPackageItemListViewModel)
        {
            _searchResultPackage = searchResultPackage;
            _filter = filter;
            OnPropertyChanged(nameof(Id));
            OnPropertyChanged(nameof(IconUrl));

            var getVersionsTask = searchResultPackage.GetVersionsAsync();

            var cacheContext = new DependencyGraphCacheContext();

            _projectVersionConstraints = new List <ProjectVersionConstraint>();

            // Filter out projects that are not managed by NuGet.
            var projects = _nugetProjects.Where(project => !(project is ProjectKNuGetProjectBase)).ToArray();

            foreach (var project in projects)
            {
                if (project is MSBuildNuGetProject)
                {
                    // cache allowed version range for each nuget project for current selected package
                    var packageReference = (await project.GetInstalledPackagesAsync(CancellationToken.None))
                                           .FirstOrDefault(r => StringComparer.OrdinalIgnoreCase.Equals(r.PackageIdentity.Id, searchResultPackage.Id));

                    var range = packageReference?.AllowedVersions;

                    if (range != null && !VersionRange.All.Equals(range))
                    {
                        var constraint = new ProjectVersionConstraint()
                        {
                            ProjectName      = project.GetMetadata <string>(NuGetProjectMetadataKeys.Name),
                            VersionRange     = range,
                            IsPackagesConfig = true,
                        };

                        _projectVersionConstraints.Add(constraint);
                    }
                }
                else if (project is BuildIntegratedNuGetProject)
                {
                    var packageReferences = await project.GetInstalledPackagesAsync(CancellationToken.None);

                    // First the lowest auto referenced version of this package.
                    var autoReferenced = packageReferences.Where(e => StringComparer.OrdinalIgnoreCase.Equals(searchResultPackage.Id, e.PackageIdentity.Id) &&
                                                                 e.PackageIdentity.Version != null)
                                         .Select(e => e as BuildIntegratedPackageReference)
                                         .Where(e => e?.Dependency?.AutoReferenced == true)
                                         .OrderBy(e => e.PackageIdentity.Version)
                                         .FirstOrDefault();

                    if (autoReferenced != null)
                    {
                        // Add constraint for auto referenced package.
                        var constraint = new ProjectVersionConstraint()
                        {
                            ProjectName  = project.GetMetadata <string>(NuGetProjectMetadataKeys.Name),
                            VersionRange = new VersionRange(
                                minVersion: autoReferenced.PackageIdentity.Version,
                                includeMinVersion: true,
                                maxVersion: autoReferenced.PackageIdentity.Version,
                                includeMaxVersion: true),

                            IsAutoReferenced = true,
                        };

                        _projectVersionConstraints.Add(constraint);
                    }
                }
            }

            // Add Current package version to package versions list.
            _allPackageVersions = new List <NuGetVersion>()
            {
                searchResultPackage.Version
            };
            CreateVersions();
            OnCurrentPackageChanged();

            var versions = await getVersionsTask;

            // GetVersionAsync can take long time to finish, user might changed selected package.
            // Check selected package.
            if (getPackageItemListViewModel() != searchResultPackage)
            {
                return;
            }

            _allPackageVersions = versions.Select(v => v.Version).ToList();

            // hook event handler for dependency behavior changed
            Options.SelectedChanged += DependencyBehavior_SelectedChanged;

            CreateVersions();
            OnCurrentPackageChanged();
        }
示例#7
0
        internal async Task LoadPackageMetadaAsync(IPackageMetadataProvider metadataProvider, CancellationToken token)
        {
            var versions = await _searchResultPackage.GetVersionsAsync();

            // First try to load the metadata from the version info. This will happen if we already fetched metadata
            // about each version at the same time as fetching the version list (that it, V2). This also acts as a
            // means to cache version metadata.
            _metadataDict = versions
                            .Where(v => v.PackageSearchMetadata != null)
                            .ToDictionary(
                v => v.Version,
                v => new DetailedPackageMetadata(v.PackageSearchMetadata, v.DownloadCount));

            // If we are missing any metadata, go to the metadata provider and fetch all of the data again.
            if (versions.Select(v => v.Version).Except(_metadataDict.Keys).Any())
            {
                try
                {
                    // Load up the full details for each version.
                    var packages = await metadataProvider?.GetPackageMetadataListAsync(
                        Id,
                        includePrerelease : true,
                        includeUnlisted : false,
                        cancellationToken : token);

                    var uniquePackages = packages
                                         .GroupBy(
                        m => m.Identity.Version,
                        (v, ms) => ms.First());

                    _metadataDict = uniquePackages
                                    .GroupJoin(
                        versions,
                        m => m.Identity.Version,
                        d => d.Version,
                        (m, d) =>
                    {
                        var versionInfo = d.OrderByDescending(v => v.DownloadCount).FirstOrDefault();
                        if (versionInfo != null)
                        {
                            // Save the metadata about this version to the VersionInfo instance.
                            versionInfo.PackageSearchMetadata = m;
                        }

                        return(new DetailedPackageMetadata(m, versionInfo?.DownloadCount));
                    })
                                    .ToDictionary(m => m.Version);
                }
                catch (InvalidOperationException)
                {
                    // Ignore failures.
                }
            }

            DetailedPackageMetadata p;

            if (SelectedVersion != null &&
                _metadataDict.TryGetValue(SelectedVersion.Version, out p))
            {
                PackageMetadata = p;
            }
        }