Beispiel #1
0
        private UISearchMetadata CreatePackageSearchResult(IPackage package,
                                                           SearchFilter filters,
                                                           CancellationToken cancellationToken)
        {
            var id      = package.Id;
            var version = V2Utilities.SafeToNuGetVer(package.Version);
            var title   = package.Title;
            var summary = package.Summary;

            if (string.IsNullOrWhiteSpace(summary))
            {
                summary = package.Description;
            }

            if (string.IsNullOrEmpty(title))
            {
                title = id;
            }

            var iconUrl  = package.IconUrl;
            var identity = new PackageIdentity(id, version);

            var versions = new Lazy <Task <IEnumerable <VersionInfo> > >(() =>
                                                                         GetVersionInfoAsync(package, filters, cancellationToken));

            var searchMetaData = new UISearchMetadata(identity,
                                                      title,
                                                      summary,
                                                      iconUrl,
                                                      versions,
                                                      UIMetadataResourceV2.GetVisualStudioUIPackageMetadata(package));

            return(searchMetaData);
        }
Beispiel #2
0
        private async Task <IEnumerable <UISearchMetadata> > GetSearchResultsForVisualStudioUI(string searchTerm, SearchFilter filters, int skip, int take, CancellationToken cancellationToken)
        {
            return(await Task.Run(async() =>
            {
                var query = V2Client.Search(
                    searchTerm,
                    filters.SupportedFrameworks,
                    filters.IncludePrerelease);

                // V2 sometimes requires that we also use an OData filter for
                // latest /latest prerelease version
                if (filters.IncludePrerelease)
                {
                    query = query.Where(p => p.IsAbsoluteLatestVersion);
                }
                else
                {
                    query = query.Where(p => p.IsLatestVersion);
                }
                query = query.OrderByDescending(p => p.DownloadCount)
                        .ThenBy(p => p.Id);

                // Some V2 sources, e.g. NuGet.Server, local repository, the result contains all
                // versions of each package. So we need to group the result by Id.
                var collapsedQuery = query.AsEnumerable().AsCollapsed();

                // execute the query
                var allPackages = collapsedQuery
                                  .Skip(skip)
                                  .Take(take)
                                  .ToList();

                // fetch version info in parallel
                Queue <Task <UISearchMetadata> > tasks = new Queue <Task <UISearchMetadata> >();
                foreach (var p in allPackages)
                {
                    tasks.Enqueue(CreatePackageSearchResult(p, filters, cancellationToken));
                }

                List <UISearchMetadata> results = new List <UISearchMetadata>();
                while (tasks.Count > 0)
                {
                    UISearchMetadata metadata = await tasks.Dequeue();
                    results.Add(metadata);
                }

                return results;
            }));
        }
Beispiel #3
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);
        }
Beispiel #4
0
        private async Task <UISearchMetadata> CreatePackageSearchResult(IPackage package, SearchFilter filters, CancellationToken cancellationToken)
        {
            return(await Task.Run(() =>
            {
                cancellationToken.ThrowIfCancellationRequested();

                // apply the filters to the version list returned
                var versions = V2Client.FindPackagesById(package.Id)
                               .Where(p => filters.IncludeDelisted || !p.Published.HasValue || p.Published.Value.Year > 1901)
                               .Where(v => filters.IncludePrerelease || String.IsNullOrEmpty(v.Version.SpecialVersion)).ToArray();

                if (!versions.Any())
                {
                    versions = new[] { package };
                }

                string id = package.Id;
                NuGetVersion version = V2Utilities.SafeToNuGetVer(package.Version);
                string title = package.Title;
                string summary = package.Summary;

                var nuGetVersions = versions.Select(p =>
                                                    new VersionInfo(V2Utilities.SafeToNuGetVer(p.Version), p.DownloadCount));

                if (String.IsNullOrWhiteSpace(summary))
                {
                    summary = package.Description;
                }

                if (String.IsNullOrEmpty(title))
                {
                    title = id;
                }

                Uri iconUrl = package.IconUrl;
                PackageIdentity identity = new PackageIdentity(id, version);
                UISearchMetadata searchMetaData = new UISearchMetadata(identity, title, summary, iconUrl, nuGetVersions, UIMetadataResourceV2.GetVisualStudioUIPackageMetadata(package));
                return searchMetaData;
            }));
        }
        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;
        }
Beispiel #6
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<UISearchMetadata> CreatePackageSearchResult(IPackage package, SearchFilter filters, CancellationToken cancellationToken)
        {
            return await Task.Run(() =>
            {
                cancellationToken.ThrowIfCancellationRequested();

                // apply the filters to the version list returned
                var versions = V2Client.FindPackagesById(package.Id)
                    .Where(p => filters.IncludeDelisted || !p.Published.HasValue || p.Published.Value.Year > 1901)
                    .Where(v => filters.IncludePrerelease || String.IsNullOrEmpty(v.Version.SpecialVersion)).ToArray();

                if (!versions.Any())
                {
                    versions = new[] { package };
                }

                string id = package.Id;
                NuGetVersion version = V2Utilities.SafeToNuGetVer(package.Version);
                string title = package.Title;
                string summary = package.Summary;

                var nuGetVersions = versions.Select(p =>
                    new VersionInfo(V2Utilities.SafeToNuGetVer(p.Version), p.DownloadCount));

                if (String.IsNullOrWhiteSpace(summary))
                {
                    summary = package.Description;
                }

                if (String.IsNullOrEmpty(title))
                {
                    title = id;
                }

                Uri iconUrl = package.IconUrl;
                PackageIdentity identity = new PackageIdentity(id, version);
                UISearchMetadata searchMetaData = new UISearchMetadata(identity, title, summary, iconUrl, nuGetVersions, UIMetadataResourceV2.GetVisualStudioUIPackageMetadata(package));
                return searchMetaData;
            });
        }
Beispiel #8
0
 private PSSearchMetadata GetPSSearch(UISearchMetadata item)
 {
     return(new PSSearchMetadata(item.Identity, item.Versions.Select(v => v.Version), item.Summary));
 }
Beispiel #9
0
        private UISearchMetadata CreatePackageSearchResult(IPackage package,
            SearchFilter filters,
            CancellationToken cancellationToken)
        {
            var id = package.Id;
            var version = V2Utilities.SafeToNuGetVer(package.Version);
            var title = package.Title;
            var summary = package.Summary;

            if (string.IsNullOrWhiteSpace(summary))
            {
                summary = package.Description;
            }

            if (string.IsNullOrEmpty(title))
            {
                title = id;
            }

            var iconUrl = package.IconUrl;
            var identity = new PackageIdentity(id, version);

            var versions = new Lazy<Task<IEnumerable<VersionInfo>>>(() =>
                GetVersionInfoAsync(package, filters, cancellationToken));

            var searchMetaData = new UISearchMetadata(identity,
                                                      title,
                                                      summary,
                                                      iconUrl,
                                                      versions,
                                                      UIMetadataResourceV2.GetVisualStudioUIPackageMetadata(package));

            return searchMetaData;
        }
Beispiel #10
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);
        }
 private PSSearchMetadata GetPSSearch(UISearchMetadata item)
 {
     return new PSSearchMetadata(item.Identity, item.Versions.Select(v => v.Version), item.Summary);
 }