Exemplo n.º 1
0
        private async Task <UISearchMetadata> GetSearchResult(JObject jObject, bool includePrerelease, CancellationToken token)
        {
            var id      = jObject.GetString(Properties.PackageId);
            var version = NuGetVersion.Parse(jObject.GetString(Properties.Version));

            var topPackage = new PackageIdentity(id, version);
            var iconUrl    = jObject.GetUri(Properties.IconUrl);
            var summary    = jObject.GetString(Properties.Summary);

            if (string.IsNullOrWhiteSpace(summary))
            {
                // summary is empty. Use its description instead.
                summary = jObject.GetString(Properties.Description);
            }

            var title = jObject.GetString(Properties.Title);

            if (string.IsNullOrEmpty(title))
            {
                // Use the id instead of the title when no title exists.
                title = id;
            }

            // get other versions
            var versionList = GetLazyVersionList(jObject, includePrerelease, version);

            // retrieve metadata for the top package
            UIPackageMetadata metadata = null;

            var v3MetadataResult = _metadataResource as UIMetadataResourceV3;

            // for v3 just parse the data from the search results
            if (v3MetadataResult != null)
            {
                metadata = v3MetadataResult.ParseMetadata(jObject);
            }

            // if we do not have a v3 metadata resource, request it using whatever is available
            if (metadata == null)
            {
                metadata = await _metadataResource.GetMetadata(topPackage, token);
            }

            var searchResult = new UISearchMetadata(topPackage, title, summary, iconUrl, versionList, metadata);

            return(searchResult);
        }
 private async Task<NuGetPackageVersion> CacheGetVersionMeta(UIMetadataResource metaResource, PackageIdentity versionIdentity, bool showDependencies)
 {
     string key = String.Format(@"{0}-{1}", versionIdentity.ToString(), showDependencies);
     if (base.IsInCache<NuGetPackageVersion>("GetVersionMeta", key))
     {
         return Get<NuGetPackageVersion>("GetVersionMeta", key);
     }
     else
     {
         var meta = await metaResource.GetMetadata(versionIdentity, CancellationToken.None);
         var output = await GetVersionMeta(versionIdentity, metaResource, showDependencies);
         return Get<NuGetPackageVersion>("GetVersionMeta", key, () => { return output; });
     }
 }
        private static async Task<NuGetPackageVersion> GetVersionMeta(PackageIdentity versionIdentity,
          UIMetadataResource metaResource, bool getDependencies)
        {
            var packageVersion = new NuGetPackageVersion();
            var meta = await metaResource.GetMetadata(versionIdentity, CancellationToken.None);
            packageVersion.PackageID = meta.Identity.Id;
            packageVersion.Description = meta.Description;

            //Uri
            packageVersion.IconUri = meta.IconUrl;
            packageVersion.ProjectUri = meta.ProjectUrl == null ? "#" : meta.ProjectUrl.AbsoluteUri;
            packageVersion.LicenseUri = meta.LicenseUrl == null ? "#" : meta.LicenseUrl.AbsoluteUri;
            packageVersion.ReportAbuseUri = meta.ReportAbuseUrl.AbsoluteUri;

            //TODO:Currently NuGet API return blank
            packageVersion.Authors = String.Join(",", meta.Authors);
            packageVersion.Owners = String.Join(",", meta.Owners);

            //Supported Frameworks
            packageVersion.SupportedFrameworks = new List<NuGetFrameworkInfo>();
            if (getDependencies)
            {
                foreach (var item in meta.DependencySets)
                {
                    if (item.TargetFramework.IsUnsupported)
                        continue;

                    NuGetFrameworkInfo fxInfo = NuGetFrameworkInfo.CreateFrom(item.TargetFramework);
                    var dependentOn = item.Packages.Count();
                    if (dependentOn > 0)
                        fxInfo.DependencyCount = dependentOn;
                    packageVersion.SupportedFrameworks.Add(fxInfo);
                }
                if (!packageVersion.SupportedFrameworks.Any())
                {
                    packageVersion.SupportedFrameworks.Add(NuGetFrameworkInfo.Any());
                }
            }
            return packageVersion;
        }
        public async Task LoadPackageMetadaAsync(UIMetadataResource metadataResource, CancellationToken token)
        {
            var downloadCountDict = _searchResultPackage.Versions.ToDictionary(
                v => v.Version,
                v => v.DownloadCount);                

            var dict = new Dictionary<NuGetVersion, DetailedPackageMetadata>();
            if (metadataResource != null)
            {
                // load up the full details for each version
                try
                {
                    var metadata = await metadataResource.GetMetadata(Id, true, false, token);
                    foreach (var item in metadata)
                    {
                        if (!dict.ContainsKey(item.Identity.Version))
                        {
                            int downloadCount;
                            if (!downloadCountDict.TryGetValue(item.Identity.Version, out downloadCount))
                            {
                                downloadCount = 0;
                            }
                            dict.Add(item.Identity.Version, new DetailedPackageMetadata(item, downloadCount));
                        }
                    }
                }
                catch (InvalidOperationException)
                {
                    // Ignore failures.
                }
            }

            _metadataDict = dict;

            DetailedPackageMetadata p;
            if (SelectedVersion != null &&
                _metadataDict.TryGetValue(SelectedVersion.Version, out p))
            {
                PackageMetadata = p;
            }
        }
Exemplo n.º 5
0
        private async Task <UISearchMetadata> GetVisualStudioUISearchResult(JObject package, bool includePrerelease, CancellationToken token)
        {
            string          id         = package.Value <string>(Properties.PackageId);
            NuGetVersion    version    = NuGetVersion.Parse(package.Value <string>(Properties.Version));
            PackageIdentity topPackage = new PackageIdentity(id, version);
            Uri             iconUrl    = GetUri(package, Properties.IconUrl);
            string          summary    = package.Value <string>(Properties.Summary);

            if (string.IsNullOrWhiteSpace(summary))
            {
                // summary is empty. Use its description instead.
                summary = package.Value <string>(Properties.Description);
            }

            string title = package.Value <string>(Properties.Title);

            if (String.IsNullOrEmpty(title))
            {
                // Use the id instead of the title when no title exists.
                title = id;
            }

            // get other versions
            var versionList = new List <VersionInfo>();
            var versions    = package.Value <JArray>(Properties.Versions);

            if (versions != null)
            {
                foreach (var v in versions)
                {
                    var nugetVersion = NuGetVersion.Parse(v.Value <string>("version"));
                    var count        = v.Value <int>("downloads");
                    versionList.Add(new VersionInfo(nugetVersion, count));
                }
            }

            // TODO: in v2, we only have download count for all versions, not per version.
            // To be consistent, in v3, we also use total download count for now.
            int?totalDownloadCount = versionList.Select(v => v.DownloadCount).Sum();

            versionList = versionList.Select(v => new VersionInfo(v.Version, totalDownloadCount))
                          .ToList();

            if (!includePrerelease)
            {
                // remove prerelease version if includePrelease is false
                versionList.RemoveAll(v => v.Version.IsPrerelease);
            }

            if (!versionList.Select(v => v.Version).Contains(version))
            {
                versionList.Add(new VersionInfo(version, 0));
            }

            // retrieve metadata for the top package
            UIPackageMetadata    metadata      = null;
            UIMetadataResourceV3 v3metadataRes = _metadataResource as UIMetadataResourceV3;

            // for v3 just parse the data from the search results
            if (v3metadataRes != null)
            {
                metadata = v3metadataRes.ParseMetadata(package);
            }

            // if we do not have a v3 metadata resource, request it using whatever is available
            if (metadata == null)
            {
                metadata = await _metadataResource.GetMetadata(topPackage, token);
            }

            UISearchMetadata searchResult = new UISearchMetadata(topPackage, title, summary, iconUrl, versionList, metadata);

            return(searchResult);
        }