Example #1
0
        public async Task <IDataTransferCollection <Item> > GetItemsByIds(IReadOnlyCollection <int> itemIds)
        {
            if (itemIds == null)
            {
                throw new ArgumentNullException(nameof(itemIds));
            }

            if (itemIds.Count == 0)
            {
                throw new ArgumentException("Item IDs cannot be an empty collection.", nameof(itemIds));
            }

            var request = new ItemsByIdsRequest(itemIds);

            using var response = await _http.SendAsync(request).ConfigureAwait(false);

            response.EnsureSuccessStatusCode();
            var json = await response.Content.ReadAsStringAsync().ConfigureAwait(false);

            var context = response.Headers.GetCollectionContext();
            var list    = new List <Item>(context.ResultCount);

            JsonConvert.PopulateObject(json, list, Json.DefaultJsonSerializerSettings);
            return(new DataTransferCollection <Item>(list, context));
        }
Example #2
0
        private async Task <List <string> > GetJsonItemsByIds(IReadOnlyCollection <int> itemIds, bool indented)
        {
            var request = new ItemsByIdsRequest(itemIds);

            using var response = await _http.SendAsync(request);

            using var responseReader = new StreamReader(await response.Content.ReadAsStreamAsync());
            using var jsonReader     = new JsonTextReader(responseReader);
            response.EnsureSuccessStatusCode();

            // API returns a JSON array but we want a List of JSON objects instead
            var array = await JToken.ReadFromAsync(jsonReader);

            return(array.Children <JObject>().Select(item => item.ToString(indented ? Formatting.Indented : Formatting.None)).ToList());
        }
Example #3
0
    public IAsyncEnumerable <Item> GetItemsByIds(
        IReadOnlyCollection <int> itemIds,
        Language?language = default,
        MissingMemberBehavior missingMemberBehavior = default,
        IProgress <ICollectionContext>?progress     = default,
        CancellationToken cancellationToken         = default
        )
    {
        var producer = SplitQuery.Create <int, Item>(
            async(range, ct) =>
        {
            var request = new ItemsByIdsRequest(range)
            {
                Language = language,
                MissingMemberBehavior = missingMemberBehavior
            };
            var response = await request.SendAsync(http, ct).ConfigureAwait(false);
            return(response.Values);
        },
            progress
            );

        return(producer.QueryAsync(itemIds, cancellationToken: cancellationToken));
    }