|
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using NuGet.Packaging;
using NuGet.Packaging.Core;
using NuGet.Protocol.Core.Types;
using NuGet.Versioning;
namespace NuGet.Protocol
{
public class PackageSearchMetadataV2Feed : IPackageSearchMetadata
{
public PackageSearchMetadataV2Feed(V2FeedPackageInfo package)
{
Authors = string.Join(", ", package.Authors);
DependencySets = package.DependencySets;
Description = package.Description;
IconUrl = GetUriSafe(package.IconUrl);
LicenseUrl = GetUriSafe(package.LicenseUrl);
Owners = string.Join(", ", package.Owners);
PackageId = package.Id;
ProjectUrl = GetUriSafe(package.ProjectUrl);
Created = package.Created;
LastEdited = package.LastEdited;
Published = package.Published;
ReportAbuseUrl = GetUriSafe(package.ReportAbuseUrl);
PackageDetailsUrl = GetUriSafe(package.GalleryDetailsUrl);
RequireLicenseAcceptance = package.RequireLicenseAcceptance;
_summaryValue = package.Summary;
Tags = package.Tags;
_titleValue = package.Title;
Version = package.Version;
IsListed = package.IsListed;
long count;
if (long.TryParse(package.DownloadCount, out count))
{
DownloadCount = count;
}
}
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);
_ownersList = (IReadOnlyList<string>)package.Owners;
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);
PackageDetailsUrl = GetUriSafe(package.GalleryDetailsUrl);
RequireLicenseAcceptance = package.RequireLicenseAcceptance;
_summaryValue = package.Summary;
Tags = package.Tags;
_titleValue = package.Title;
Version = package.Version;
IsListed = package.IsListed;
long count;
if (long.TryParse(package.DownloadCount, out count))
{
DownloadCount = count;
}
}
public string Authors { get; private set; }
public IEnumerable<PackageDependencyGroup> DependencySets { get; private set; }
public string? Description { get; private set; }
public long? DownloadCount { get; private set; }
public Uri? IconUrl { get; private set; }
public PackageIdentity Identity => new PackageIdentity(PackageId, Version);
public Uri? LicenseUrl { get; private set; }
private IReadOnlyList<string>? _ownersList;
public IReadOnlyList<string>? OwnersList => _ownersList;
public string Owners { get; private set; }
public string PackageId { get; private set; }
public Uri? ProjectUrl { get; private set; }
// Prefix Reservation should never be shown on a V2 Feed
public bool PrefixReserved => false;
public DateTimeOffset? Created { get; private set; }
public DateTimeOffset? LastEdited { get; private set; }
public DateTimeOffset? Published { get; private set; }
public Uri? ReadmeUrl { get; } = null; // The ReadmeUrl has not been added to the V2 feed.
public string? ReadmeFileUrl { get; } = null; // The ReadmeFileUrl has not been added to the V2 feed.
public Uri? ReportAbuseUrl { get; private set; }
public Uri? PackageDetailsUrl { get; private set; }
public bool RequireLicenseAcceptance { get; private set; }
private string? _summaryValue;
public string? Summary
{
get { return !string.IsNullOrEmpty(_summaryValue) ? _summaryValue : Description; }
private set { _summaryValue = value; }
}
public string? Tags { get; private set; }
private string? _titleValue;
public string Title
{
get { return !string.IsNullOrEmpty(_titleValue) ? _titleValue! : PackageId; }
private set { _titleValue = value; }
}
public LicenseMetadata? LicenseMetadata { get; } = null; // The LicenseExpression is not added to the V2 feed.
public PackageDeprecationMetadata? DeprecationMetadata { get; } = null; // Deprecation metadata is not added to the v2 feed.
public NuGetVersion Version { get; private set; }
/// <inheritdoc cref="IPackageSearchMetadata.GetVersionsAsync" />
public Task<IEnumerable<VersionInfo>> GetVersionsAsync() => TaskResult.EmptyEnumerable<VersionInfo>();
private static Uri? GetUriSafe(string? url)
{
Uri.TryCreate(url, UriKind.Absolute, out Uri? uri);
return uri;
}
/// <inheritdoc cref="IPackageSearchMetadata.GetDeprecationMetadataAsync" />
public Task<PackageDeprecationMetadata?> GetDeprecationMetadataAsync() => TaskResult.Null<PackageDeprecationMetadata>();
/// <inheritdoc cref="IPackageSearchMetadata.Vulnerabilities" />
public IEnumerable<PackageVulnerabilityMetadata>? Vulnerabilities { get; } = null; // Vulnerability metadata is not added to nuget.org's v2 feed.
public bool IsListed { get; }
}
}
|