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