public async Task<NuGetPackageViewResponse> ViewPackageInfo(string packageID, string source) { if (string.IsNullOrEmpty(packageID)) throw new ArgumentNullException("packageID"); if (string.IsNullOrEmpty(source)) throw new ArgumentNullException("source"); NuGetFactory factory = new NuGetFactory(source); var model = new NuGetPackageViewResponse(); model.Request.PackageID = packageID; model.Request.SourceUrl = factory.SourceUrl; model.Request.Source = source; var metaResource = await factory.GetUIMetadata(); var versions = (await CacheGetAllVersionsOfPackage(factory, packageID)).Reverse().Take(10); foreach (var version in versions) { var packageVersion = new NuGetPackageVersion(); #region Meta var versionIdentity = new PackageIdentity(packageID, version); packageVersion = await CacheGetVersionMeta(metaResource, versionIdentity, true); #endregion #region Version Specific packageVersion.IsReleaseVersion = !version.IsPrerelease; packageVersion.IsLegacy = version.IsLegacyVersion; packageVersion.IsPreRelease = version.IsPrerelease; packageVersion.Version = version.ToNormalizedString(); packageVersion.OrderKey = packageVersion.LastUpdatedDate.ToString("yyyyMMdd") + packageVersion.Version; packageVersion.LastUpdated = (packageVersion.LastUpdatedDate == DateTime.MinValue) ? string.Empty : packageVersion.LastUpdatedDate.ToString("MMM dd, yyyy"); #endregion model.Versions.Add(packageVersion); } model.Versions = model.Versions.OrderByDescending(x => x.OrderKey).ToList(); model.LatestVersion = model.Versions.FirstOrDefault(); return model; }
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; }