Exemple #1
0
        private void UpdateStarsView(GitResponseMultiPage multiPageResponse)
        {
            var byForks = ((JArray)multiPageResponse.JsonResult).Children().ToList().OrderByDescending(x => Convert.ToInt32(x["stargazers_count"].ToString()))
                          .Select(x => GetTokenValue(x["name"].ToString(), x["stargazers_count"].ToString())).ToArray();

            this.resourceCache.AddOrUpdate("stars", byForks, (key, oldvalue) => byForks);
        }
Exemple #2
0
        private void UpdateUpdatedTimeView(GitResponseMultiPage multiPageResponse)
        {
            var byForks = ((JArray)multiPageResponse.JsonResult).Children().ToList().OrderByDescending(x => DateTime.Parse(x["updated_at"].ToString()))
                          .Select(x => GetTokenValue(x["name"].ToString(), x["updated_at"].ToString())).ToArray();

            this.resourceCache.AddOrUpdate("last_updated", byForks, (key, oldvalue) => byForks);
        }
        /// <summary>
        /// Forwards a GET request to the underlying endpoint at the relative URI location.
        /// Retry and Pagination are taken care of by the handler implementation
        /// </summary>
        /// <param name="resourceUri">The resource URI relative to the Base URI</param>
        public async Task <GitResponse> Get(string resourcePath)
        {
            var client = GetHttpClient();

            GitResponse   gitResponse        = null;
            JToken        mergedJsonResult   = null;
            JToken        currentParseResult = null;
            List <string> etags     = new List <string>();
            var           isPaged   = false;
            var           pageIndex = 1;

            do
            {
                var nextPageResourcePath = this.GetPagedResourcePath(resourcePath, pageIndex);
                var response             = await this.SendRequest(this.throttledTill, client, nextPageResourcePath);

                response.EnsureSuccessStatusCode();

                var responseStream = await response.Content.ReadAsStreamAsync();

                string json = new StreamReader(responseStream).ReadToEnd();
                currentParseResult = JToken.Parse(json);

                if (response.Headers.TryGetValues("ETag", out IEnumerable <string> etag) &&
                    etag != null && etag.Any())
                {
                    etags.Add(etag.ElementAt(0));
                }

                if (mergedJsonResult == null)
                {
                    mergedJsonResult = currentParseResult;

                    if (currentParseResult.GetType() == typeof(JArray))
                    {
                        // This api could potentially return paginated results
                        isPaged = true;
                    }
                }
                else
                {
                    ((JArray)mergedJsonResult).Merge((JArray)currentParseResult);
                }

                pageIndex++;
            }while (this.HasNext(currentParseResult));

            if (isPaged)
            {
                gitResponse = new GitResponseMultiPage
                {
                    JsonResult = mergedJsonResult,
                    PageETags  = etags
                };
            }
            else
            {
                gitResponse = new GitResponseSinglePage
                {
                    JsonResult = mergedJsonResult,
                    ETag       = etags[0]
                };
            }

            return(gitResponse);
        }