public PackageSearchMetadataV2Feed(V2FeedPackageInfo package, MetadataReferenceCache metadataCache) { Authors = metadataCache.GetString(string.Join(", ", package.Authors)); DependencySets = package.DependencySets; Description = package.Description; IconUrl = GetUriSafe(package.IconUrl); LicenseUrl = GetUriSafe(package.LicenseUrl); Owners = metadataCache.GetString(string.Join(", ", package.Owners)); PackageId = package.Id; ProjectUrl = GetUriSafe(package.ProjectUrl); Created = package.Created; LastEdited = package.LastEdited; Published = package.Published; ReportAbuseUrl = GetUriSafe(package.ReportAbuseUrl); RequireLicenseAcceptance = package.RequireLicenseAcceptance; Summary = package.Summary; Tags = package.Tags; Title = package.Title; Version = package.Version; IsListed = package.IsListed; long count; if (long.TryParse(package.DownloadCount, out count)) { DownloadCount = count; } }
/// <summary> /// Parse an entry into a V2FeedPackageInfo /// </summary> private V2FeedPackageInfo ParsePackage(string id, XElement element, MetadataReferenceCache metadataCache) { var properties = element.Element(_xnameProperties); var idElement = properties.Element(_xnameId); var titleElement = element.Element(_xnameTitle); // If 'Id' element exist, use its value as accurate package Id // Otherwise, use the value of 'title' if it exist // Use the given Id as final fallback if all elements above don't exist var identityId = metadataCache.GetString(idElement?.Value ?? titleElement?.Value ?? id); var versionString = properties.Element(_xnameVersion).Value; var version = metadataCache.GetVersion(metadataCache.GetString(versionString)); var downloadUrl = metadataCache.GetString(element.Element(_xnameContent).Attribute("src").Value); var title = metadataCache.GetString(titleElement?.Value); var summary = metadataCache.GetString(GetString(element, _xnameSummary)); var description = metadataCache.GetString(GetString(properties, _xnameDescription)); var iconUrl = metadataCache.GetString(GetString(properties, _xnameIconUrl)); var licenseUrl = metadataCache.GetString(GetString(properties, _xnameLicenseUrl)); var projectUrl = metadataCache.GetString(GetString(properties, _xnameProjectUrl)); var galleryDetailsUrl = metadataCache.GetString(GetString(properties, _xnameGalleryDetailsUrl)); var reportAbuseUrl = metadataCache.GetString(GetString(properties, _xnameReportAbuseUrl)); var tags = metadataCache.GetString(GetString(properties, _xnameTags)); var dependencies = metadataCache.GetString(GetString(properties, _xnameDependencies)); var downloadCount = metadataCache.GetString(GetString(properties, _xnameDownloadCount)); var requireLicenseAcceptance = StringComparer.OrdinalIgnoreCase.Equals(bool.TrueString, GetString(properties, _xnameRequireLicenseAcceptance)); var packageHash = metadataCache.GetString(GetString(properties, _xnamePackageHash)); var packageHashAlgorithm = metadataCache.GetString(GetString(properties, _xnamePackageHashAlgorithm)); NuGetVersion minClientVersion = null; var minClientVersionString = GetString(properties, _xnameMinClientVersion); if (!string.IsNullOrEmpty(minClientVersionString)) { if (NuGetVersion.TryParse(minClientVersionString, out minClientVersion)) { minClientVersion = metadataCache.GetVersion(minClientVersionString); } } var created = GetDate(properties, _xnameCreated); var lastEdited = GetDate(properties, _xnameLastEdited); var published = GetDate(properties, _xnamePublished); IEnumerable <string> owners = null; IEnumerable <string> authors = null; var authorNode = element.Element(_xnameAuthor); if (authorNode != null) { authors = authorNode.Elements(_xnameName).Select(e => metadataCache.GetString(e.Value)); } return(new V2FeedPackageInfo(new PackageIdentity(identityId, version), title, summary, description, authors, owners, iconUrl, licenseUrl, projectUrl, reportAbuseUrl, galleryDetailsUrl, tags, created, lastEdited, published, dependencies, requireLicenseAcceptance, downloadUrl, downloadCount, packageHash, packageHashAlgorithm, minClientVersion)); }