Exemple #1
0
        private async IAsyncEnumerable <MagnetItem> SearchAsync(IMagnetService magnetService, string query, int page, [EnumeratorCancellation] CancellationToken cancellationToken = default)
        {
            MagnetSearchResult result;

            try
            {
                result = await magnetService.SearchAsync(query, page, cancellationToken);
            }
            catch (Exception ex)
            {
                if (!(ex is HttpRequestException))
                {
                    _logger.LogError(ex, ex.Message);
                }

                yield break;
            }

            if (result.Items != null)
            {
                foreach (var magnetItem in result.Items)
                {
                    yield return(magnetItem);
                }
            }
        }
Exemple #2
0
        private async IAsyncEnumerable <MagnetItem> SearchAsync(IMagnetService magnetService, string query, [EnumeratorCancellation] CancellationToken cancellationToken = default)
        {
            MagnetSearchResult firstPageResult;

            try
            {
                firstPageResult = await magnetService.SearchAsync(query, 1, cancellationToken);
            }
            catch (Exception ex)
            {
                if (!(ex is HttpRequestException))
                {
                    _logger.LogError(ex, ex.Message);
                }

                yield break;
            }

            if (firstPageResult.Items != null)
            {
                foreach (var magnetItem in firstPageResult.Items)
                {
                    yield return(magnetItem);
                }
            }

            if (firstPageResult.LastPage <= 1)
            {
                yield break;
            }

            var totalPage = firstPageResult.LastPage;

            totalPage = Math.Min(totalPage, 10);
            var list = new List <IAsyncEnumerable <MagnetItem> >();

            for (int i = 2; i <= totalPage; i++)
            {
                list.Add(SearchAsync(magnetService, query, i, cancellationToken));
            }

            await foreach (var magnetItem in list.Merge().WithCancellation(cancellationToken))
            {
                yield return(magnetItem);
            }
        }