public async Task<PackageEnumeratorResult> GetPageAsync(PackageEnumeratorContinuationToken continuationToken, CancellationToken token)
        {
            var result = await _packageSearchResource.SearchAsync(
                continuationToken.SearchTerm,
                continuationToken.SearchFilters,
                continuationToken.Skip,
                continuationToken.Take,
                _logger,
                token);

            var allMetadata = result.ToList();
            var allVersions = allMetadata
                .Select(x => new { x.Identity, AllVersionsTask = x.GetVersionsAsync() })
                .ToList();

            await Task.WhenAll(allVersions.Select(x => x.AllVersionsTask));

            var packageIdentities = allVersions
                .Select(x => new { Id = x.Identity.Id, Versions = x.AllVersionsTask.Result })
                .SelectMany(x => x.Versions.Select(v => new PackageIdentity(x.Id, v.Version)))
                .ToList();

            var hasMoreResults = allMetadata.Count >= continuationToken.Take;
            var nextSkip = continuationToken.Skip + continuationToken.Take;
            var nextContinuationToken = new PackageEnumeratorContinuationToken
            {
                SearchTerm = continuationToken.SearchTerm,
                SearchFilters = continuationToken.SearchFilters,
                Skip = nextSkip,
                Take = continuationToken.Take
            };

            return new PackageEnumeratorResult
            {
                HasMoreResults = hasMoreResults,
                PackageIdentities = packageIdentities,
                ContinuationToken = nextContinuationToken
            };
        }
Exemple #2
0
        public async Task <PackageEnumeratorResult> GetPageAsync(PackageEnumeratorContinuationToken continuationToken, CancellationToken token)
        {
            var result = await _packageSearchResource.SearchAsync(
                continuationToken.SearchTerm,
                continuationToken.SearchFilters,
                continuationToken.Skip,
                continuationToken.Take,
                _logger,
                token);

            var allMetadata = result.ToList();
            var allVersions = allMetadata
                              .Select(x => new { x.Identity, AllVersionsTask = x.GetVersionsAsync() })
                              .ToList();

            await Task.WhenAll(allVersions.Select(x => x.AllVersionsTask));

            var packageIdentities = allVersions
                                    .Select(x => new { Id = x.Identity.Id, Versions = x.AllVersionsTask.Result })
                                    .SelectMany(x => x.Versions.Select(v => new PackageIdentity(x.Id, v.Version)))
                                    .ToList();

            var hasMoreResults        = allMetadata.Count >= continuationToken.Take;
            var nextSkip              = continuationToken.Skip + continuationToken.Take;
            var nextContinuationToken = new PackageEnumeratorContinuationToken
            {
                SearchTerm    = continuationToken.SearchTerm,
                SearchFilters = continuationToken.SearchFilters,
                Skip          = nextSkip,
                Take          = continuationToken.Take
            };

            return(new PackageEnumeratorResult
            {
                HasMoreResults = hasMoreResults,
                PackageIdentities = packageIdentities,
                ContinuationToken = nextContinuationToken
            });
        }