Пример #1
0
        /// <summary>
        /// Generator that allows lazy access to paginated resources.
        /// </summary>
        private static IEnumerable <List <TValue> > IteratePages <TValue>(SharpBucketV2 sharpBucketV2, string overrideUrl, int pageLen = DEFAULT_PAGE_LEN, IDictionary <string, object> requestParameters = null)
        {
            Debug.Assert(!string.IsNullOrEmpty(overrideUrl));
            Debug.Assert(!overrideUrl.Contains("?"));

            overrideUrl = overrideUrl.Replace(SharpBucketV2.BITBUCKET_URL, "");

            if (requestParameters == null)
            {
                requestParameters = new Dictionary <string, object>();
            }

            requestParameters["pagelen"] = pageLen;

            while (true)
            {
                var response = sharpBucketV2.Get <IteratorBasedPage <TValue> >(overrideUrl, requestParameters);
                if (response == null)
                {
                    break;
                }

                yield return(response.values);

                if (string.IsNullOrWhiteSpace(response.next))
                {
                    break;
                }

                var uri         = new Uri(response.next);
                var parsedQuery = HttpUtility.ParseQueryString(uri.Query);
                requestParameters = parsedQuery.AllKeys.ToDictionary <string, string, object>(key => key, parsedQuery.Get);
            }
        }