Example #1
0
        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);
        }
Example #5
0
 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));
 }