Inheritance: IThingData
示例#1
0
        public async Task <Listing> GetMoreOnListing(More more, string contentId, string subreddit, CancellationToken token, IProgress <float> progress)
        {
            var targetUri = _networkLayer.RedditBaseUrl + "/api/morechildren.json";

            if (more.Children.Count == 0)
            {
                return new Listing
                       {
                           Kind = "Listing",
                           Data = new ListingData()
                       }
            }
            ;

            var viableChildren = more.Children.Take(20);
            var leftovers      = more.Children.Skip(20);

            var arguments = new Dictionary <string, string>
            {
                { "children", string.Join(",", viableChildren) },
                { "link_id", contentId.Contains("_") ? contentId : "t3_" + contentId },
                { "pv_hex", "" },
                { "api_type", "json" }
            };

            if (subreddit != null)
            {
                arguments.Add("r", subreddit);
            }
            getMoreCount++;
            var resultString = await _networkLayer.Post(targetUri, token, arguments, progress);

            var newListing = new Listing
            {
                Kind = "Listing",
                Data = new ListingData {
                    Children = await Task.Run(() => JsonConvert.DeserializeObject <JsonThing>(resultString).Json.Data.Things)
                }
            };

            if (leftovers.Count() > 0)
            {
                newListing.Data.Children.Add(new Thing {
                    Kind = "more", Data = new More {
                        Children = new List <string>(leftovers), ParentId = more.ParentId, Count = (more.Count - viableChildren.Count())
                    }
                });
            }
            if (getMoreCount != 0)
            {
                return(newListing);
            }
            else
            {
                return(newListing);
            }
        }
示例#2
0
        public async Task <Listing> GetMoreOnListing(More more, string contentId, string subreddit)
        {
            var targetUri = "http://www.reddit.com/api/morechildren.json";

            if (more.Children.Count == 0)
            {
                return new Listing
                       {
                           Kind = "Listing",
                           Data = new ListingData()
                       }
            }
            ;

            var viableChildren = more.Children.Take(20);
            var leftovers      = more.Children.Skip(20);

            var arguments = new Dictionary <string, string>
            {
                { "children", string.Join(",", viableChildren) },
                { "link_id", contentId.Contains("_") ? contentId : "t3_" + contentId },
                { "pv_hex", "" },
                { "api_type", "json" }
            };

            if (subreddit != null)
            {
                arguments.Add("r", subreddit);
            }
            getMoreCount++;
            await ThrottleRequests();
            await EnsureRedditCookie();

            var result = await _httpClient.PostAsync(targetUri, new FormUrlEncodedContent(arguments));

            var resultString = await result.Content.ReadAsStringAsync();

            var newListing = new Listing
            {
                Kind = "Listing",
                Data = new ListingData {
                    Children = JsonConvert.DeserializeObject <JsonThing>(resultString).Json.Data.Things
                }
            };

            if (leftovers.Count() > 0)
            {
                newListing.Data.Children.Add(new Thing {
                    Kind = "more", Data = new More {
                        Children = new List <string>(leftovers), ParentId = more.ParentId, Count = (more.Count - viableChildren.Count())
                    }
                });
            }
            if (getMoreCount != 0)
            {
                return(newListing);
            }
            else
            {
                return(newListing);
            }
        }