public async Task <IEnumerable <JObject> > GetPackageMetadataAsync() { // We need to use Task.Run() here. Otherwise it might lead to deadlock. // The reason is that NuGet.Data.Client uses a spin lock on the URI. // If there are multiple calls to the same URI, then one could be spin waiting // the lock, on the UI thread, while another is waiting to be scheduled back to // the UI thread after an sync call. Using Task.Run(), the tasks will be scheduled // on thread pool, so they won't block each other. var metadata = await Task.Run(() => _source.GetPackageMetadataById(Id)); return(metadata); }
private static async Task<JObject> CreatePackageSearchResult(SourceRepository source, IPackage package) { NuGetTraceSources.CoreInteropInstalledPackagesList.Verbose("loading_versions", "Loading versions for {0} from {1}", package.Id, source.Source.Url); var versions = new List<SemanticVersion>(); var packages = await source.GetPackageMetadataById(package.Id); foreach (var p in packages) { var v = SemanticVersion.Parse(p.Value<string>(Properties.Version)); versions.Add(v); } var result = PackageJsonLd.CreatePackageSearchResult(package, versions); return result; }
// BUGBUG: Beware! Do not start piling up on this class to add more extension like methods // This is temporary until we get a dedicated endpoint to get the latest version internal static async Task<JObject> GetLatestVersionMetadata(SourceRepository sourceRepository, string packageId, bool prerelease) { var packages = await sourceRepository.GetPackageMetadataById(packageId); JObject latestPackage = null; NuGetVersion latestPackageVersion = null; foreach(var package in packages) { var packageVersion = NuGetVersion.Parse(package["version"].ToString()); if (!prerelease && packageVersion.IsPrerelease) continue; if(latestPackageVersion == null || latestPackageVersion < packageVersion) { latestPackageVersion = packageVersion; latestPackage = package; } } return latestPackage; }
// BUGBUG: Beware! Do not start piling up on this class to add more extension like methods // This is temporary until we get a dedicated endpoint to get the latest version internal static async Task <JObject> GetLatestVersionMetadata(SourceRepository sourceRepository, string packageId, bool prerelease) { var packages = await sourceRepository.GetPackageMetadataById(packageId); JObject latestPackage = null; NuGetVersion latestPackageVersion = null; foreach (var package in packages) { var packageVersion = NuGetVersion.Parse(package["version"].ToString()); if (!prerelease && packageVersion.IsPrerelease) { continue; } if (latestPackageVersion == null || latestPackageVersion < packageVersion) { latestPackageVersion = packageVersion; latestPackage = package; } } return(latestPackage); }
public IEnumerable <IPackage> FindPackages(IEnumerable <string> packageIds) { return(packageIds.SelectMany(id => _source.GetPackageMetadataById(id).Result.Select(PackageJsonLd.PackageFromJson))); }
public IEnumerable <IPackage> FindPackagesById(string packageId) { return(_source.GetPackageMetadataById(packageId).Result.Select(PackageJsonLd.PackageFromJson)); }