예제 #1
0
        private RestRequest CreateRequest(string resourceUrl, RestComplexRequest request)
        {
            var restRequest = new RestRequest(resourceUrl, request.Method);

            if (request.UrlSegments != null)
            {
                foreach (var element in request.UrlSegments)
                {
                    restRequest.AddUrlSegment(element.Key, element.Value);
                }
            }
            if (request.Parameters != null)
            {
                foreach (var element in request.Parameters)
                {
                    restRequest.AddParameter(element.Key, element.Value);
                }
            }
            if (request.ExtraHeaders != null)
            {
                foreach (var element in request.ExtraHeaders)
                {
                    restRequest.AddHeader(element.Key, element.Value);
                }
            }

            if (request.GetType() == typeof(RestComplexDataRequest))
            {
                var dataRequest = (request as RestComplexDataRequest);
                if (dataRequest != null)
                {
                    if (dataRequest.ContentType != null)
                    {
                        if (dataRequest.ContentType == RestDataContentType.Json)
                        {
                            restRequest.RequestFormat  = DataFormat.Json;
                            restRequest.JsonSerializer = new JsonCustomSerializer();
                            restRequest.AddBody(dataRequest.Content);
                        }
                        else if (dataRequest.ContentType == RestDataContentType.Xml)
                        {
                            restRequest.RequestFormat = DataFormat.Xml;
                            restRequest.AddBody(dataRequest.Content);
                        }
                        else if (dataRequest.ContentType == RestDataContentType.UrlEncode)
                        {
                            var content = (dataRequest.Content as Dictionary <string, string>);
                            restRequest.RequestFormat = DataFormat.Json;
                            foreach (var element in content)
                            {
                                restRequest.AddParameter(element.Key, element.Value, ParameterType.GetOrPost);
                            }
                            restRequest.AddBody(dataRequest.Content);
                        }
                    }
                }
            }
            return(restRequest);
        }
예제 #2
0
        protected Task <T> MakeAsyncRequest <T>(string resourceUrl, RestComplexRequest request)
        {
            var taskCompletionSource = new TaskCompletionSource <T>();
            var restRequest          = CreateRequest(resourceUrl, request);

            MakeRequestCallAsync(taskCompletionSource, restRequest);
            return(taskCompletionSource.Task);
        }
예제 #3
0
        public Task <string> DeleteAsync(string owner, string reposlug)
        {
            var segments = CreateDefaultSegmentsDictionary(owner, reposlug);
            var request  = new RestComplexRequest(Method.DELETE, segments, null, null);
            var task     = MakeAsyncRequest <string>(DEFAULT_SPECIFIC_REPOSITORY_RESOURCE, request);

            return(task);
        }
예제 #4
0
        public Task <PaginatedResponse <Repository> > GetAllPublicAsync(PaginatedRequest paginatedRequest)
        {
            var parameters  = CreateDefaultPaginationParameters(paginatedRequest);
            var restRequest = new RestComplexRequest(Method.GET, null, parameters);
            var task        = MakeAsyncRequest <PaginatedResponse <Repository> >(string.Empty, restRequest);

            return(task);
        }
예제 #5
0
        public Task <PaginatedResponse <BranchRestriction> > GetAllAsync(string owner, string reposlug, PaginatedRequest request)
        {
            var segments    = CreateDefaultSegmentsDictionary(owner, reposlug);
            var parameters  = CreateDefaultPaginationParameters(request);
            var restRequest = new RestComplexRequest(Method.GET, segments, parameters, null);
            var task        = MakeAsyncRequest <PaginatedResponse <BranchRestriction> >(BRANCH_RESTRICTIONS_RESOURCE, restRequest);

            return(task);
        }
        public Task <PullRequest> GetAsync(string owner, string reposlug, long id)
        {
            var segments = CreateDefaultSegmentsDictionary(owner, reposlug);

            segments.Add(PULL_REQUEST_ID_SEGMENT, id.ToString());
            var request = new RestComplexRequest(Method.GET, segments, null, null);
            var task    = MakeAsyncRequest <PullRequest>(SPECIFIED_PULL_REQUEST_RESOURCE, request);

            return(task);
        }
예제 #7
0
        public Task <PaginatedResponse <Repository> > GetForksAsync(string owner, string reposlug,
                                                                    PaginatedRequest paginatedRequest)
        {
            var segments    = CreateDefaultSegmentsDictionary(owner, reposlug);
            var parameters  = CreateDefaultPaginationParameters(paginatedRequest);
            var restRequest = new RestComplexRequest(Method.GET, segments, parameters);
            var task        = MakeAsyncRequest <PaginatedResponse <Repository> >(FORKS_REPOSITORY_RESOURCE, restRequest);

            return(task);
        }
예제 #8
0
        public Task <ApprovalStatus> ApproveAsync(string owner, string repoSlug, string revision)
        {
            var segments = CreateDefaultSegmentsDictionary(owner, repoSlug);

            segments.Add(REVISION_SEGMENT, revision);
            var restRequest = new RestComplexRequest(Method.POST, segments, null, null);
            var task        = MakeAsyncRequest <ApprovalStatus>(APPROVE_COMMENT_RESOURCE, restRequest);

            return(task);
        }
예제 #9
0
        public Task <Commit> GetAsync(string owner, string repoSlug, string revision)
        {
            var segments = CreateDefaultSegmentsDictionary(owner, repoSlug);

            segments.Add(REVISION_SEGMENT, revision);
            var restRequest = new RestComplexRequest(Method.GET, segments, null, null);
            var task        = MakeAsyncRequest <Commit>(SPECIFIED_COMMIT_RESOURCE, restRequest);

            return(task);
        }
예제 #10
0
        public Task <string> DeleteAsync(string owner, string reposlug, string id)
        {
            var segments = CreateDefaultSegmentsDictionary(owner, reposlug);

            segments.Add(ID_SEGMENT, id);
            var restRequest = new RestComplexRequest(Method.DELETE, segments, null, null);
            var task        = MakeAsyncRequest <string>(SPECIFIED_RESTRICTION_RESOURCE, restRequest);

            return(task);
        }
        public Task <string> GetPatchAsync(string owner, string reposlug, string spec)
        {
            var segments = CreateDefaultSegmentsDictionary(owner, reposlug);

            segments.Add(SPEC_SEGMENT, spec);
            var restRequest = new RestComplexRequest(Method.GET, segments, null, null);
            var task        = MakeAsyncRequest <string>(PATCH_RESOURCE, restRequest);

            return(task);
        }
        public Task <PaginatedResponse <Activity> > GetAllActivityAsync(string owner, string reposlug,
                                                                        PaginatedRequest paginatedRequest)
        {
            var segments   = CreateDefaultSegmentsDictionary(owner, reposlug);
            var parameters = CreateDefaultPaginationParameters(paginatedRequest);
            var request    = new RestComplexRequest(Method.GET, segments, parameters);
            var task       = MakeAsyncRequest <PaginatedResponse <Activity> >(ACTIVITY_PULL_REQUEST_RESOURCE, request);

            return(task);
        }
예제 #13
0
        public Task <PaginatedResponse <Repository> > GetRepositoriesAsync(string teamName, PaginatedRequest request)
        {
            var segments = new Dictionary <string, string>()
            {
                { TEAM_NAME_SEGMENT, teamName }
            };
            var restRequest = new RestComplexRequest(Method.GET, segments, null);
            var task        = MakeAsyncRequest <PaginatedResponse <Repository> >(TEAM_REPOSITORIES_RESOURCE, restRequest);

            return(task);
        }
예제 #14
0
        public Task <PaginatedResponse <User> > GetFollowingAsync(string teamName, PaginatedRequest request)
        {
            var segments = new Dictionary <string, string>()
            {
                { TEAM_NAME_SEGMENT, teamName }
            };
            var restRequest = new RestComplexRequest(Method.GET, segments, null);
            var task        = MakeAsyncRequest <PaginatedResponse <User> >(TEAM_FOLLOWING_RESOURCE, restRequest);

            return(task);
        }
예제 #15
0
        public Task <Team> GetProfileAsync(string teamName)
        {
            var segments = new Dictionary <string, string>()
            {
                { TEAM_NAME_SEGMENT, teamName }
            };;
            var request = new RestComplexRequest(Method.GET, segments, null);
            var task    = MakeAsyncRequest <Team>(TEAM_NAME_RESOURCE, request);

            return(task);
        }
예제 #16
0
        public Task <Team> GetProfileAsync(string user)
        {
            var segments = new Dictionary <string, string>()
            {
                { USERNAME_SEGMENT, user }
            };
            var restRequest = new RestComplexRequest(Method.GET, segments, null);
            var task        = MakeAsyncRequest <Team>(USER_RESOURCE, restRequest);

            return(task);
        }
예제 #17
0
        protected Task <T> MakeAsyncRequest <T>(string resourceUrl, RestComplexRequest request, Dictionary <string, string> files)
        {
            var taskCompletionSource = new TaskCompletionSource <T>();
            var restRequest          = CreateRequest(resourceUrl, request);

            foreach (var element in files)
            {
                restRequest.AddFile(element.Key, element.Value);
            }
            MakeRequestCallAsync(taskCompletionSource, restRequest);
            return(taskCompletionSource.Task);
        }
        public Task <PaginatedResponse <Comment> > GetCommentsAsync(string owner, string reposlug, long pullRequestId,
                                                                    PaginatedRequest paginatedRequest)
        {
            var segments = CreateDefaultSegmentsDictionary(owner, reposlug);

            segments.Add(PULL_REQUEST_ID_SEGMENT, pullRequestId.ToString());
            var parameters = CreateDefaultPaginationParameters(paginatedRequest);
            var request    = new RestComplexRequest(Method.GET, segments, parameters);
            var task       = MakeAsyncRequest <PaginatedResponse <Comment> >(COMMENTS_PULL_REQUEST_RESOURCE, request);

            return(task);
        }
예제 #19
0
        public Task <PaginatedResponse <Repository> > GetAllAsync(string owner, PaginatedRequest paginatedRequest)
        {
            var segments = new Dictionary <string, string>()
            {
                { OWNER_SEGMENT, owner }
            };
            var parameters  = CreateDefaultPaginationParameters(paginatedRequest);
            var restRequest = new RestComplexRequest(Method.GET, segments, parameters);
            var task        = MakeAsyncRequest <PaginatedResponse <Repository> >(DEFAULT_OWNER_RESOURCE, restRequest);

            return(task);
        }
예제 #20
0
        public Task <PaginatedResponse <Comment> > GetCommentsAsync(string owner, string repoSlug, string revision,
                                                                    PaginatedRequest paginatedRequest)
        {
            var segments = CreateDefaultSegmentsDictionary(owner, repoSlug);

            segments.Add(REVISION_SEGMENT, revision);
            var parameters  = CreateDefaultPaginationParameters(paginatedRequest);
            var restRequest = new RestComplexRequest(Method.GET, segments, parameters, null);
            var task        = MakeAsyncRequest <PaginatedResponse <Comment> >(SPECIFIED_COMMIT_COMMENTS_RESOURCE, restRequest);

            return(task);
        }
예제 #21
0
        public Task <PaginatedResponse <User> > GetFollowingAsync(string user, PaginatedRequest request)
        {
            var segments = new Dictionary <string, string>()
            {
                { USERNAME_SEGMENT, user }
            };
            var parameters  = CreateDefaultPaginationParameters(request);
            var restRequest = new RestComplexRequest(Method.GET, segments, parameters);
            var task        = MakeAsyncRequest <PaginatedResponse <User> >(FOLLOWING_RESOURCE, restRequest);

            return(task);
        }
        public Task <PullRequest> DeclineAsync(string owner, string reposlug, long pullRequestId, string message = "")
        {
            var segments = CreateDefaultSegmentsDictionary(owner, reposlug);

            segments.Add(PULL_REQUEST_ID_SEGMENT, pullRequestId.ToString());
            var parameters = new Dictionary <string, string>();

            parameters.Add(MESSAGE_PARAMETER, message);
            var request = new RestComplexRequest(Method.POST, segments, parameters, null);
            var task    = MakeAsyncRequest <PullRequest>(DECLINE_PULL_REQUEST_RESOURCE, request);

            return(task);
        }
        public Task <PaginatedResponse <PullRequest> > GetAllAsync(string owner, string reposlug,
                                                                   IEnumerable <PullRequestState> statesValues,
                                                                   PaginatedRequest paginatedRequest)
        {
            var segments   = CreateDefaultSegmentsDictionary(owner, reposlug);
            var parameters = CreateDefaultPaginationParameters(paginatedRequest);
            var states     = new MultiValueRequestParameter <PullRequestState>("state", statesValues);

            parameters.Add(states.Name, states.ParameterValue);
            var request = new RestComplexRequest(Method.GET, segments, parameters);
            var task    = MakeAsyncRequest <PaginatedResponse <PullRequest> >(DEFAULT_PULL_REQUEST_RESOURCE, request);

            return(task);
        }
        public Task <PullRequest> AcceptAsync(string owner, string reposlug, long pullRequestId,
                                              string message = "", bool closeSourceBranch = false)
        {
            var segments = CreateDefaultSegmentsDictionary(owner, reposlug);

            segments.Add(PULL_REQUEST_ID_SEGMENT, pullRequestId.ToString());
            var parameters = new Dictionary <string, string>();

            parameters.Add(MESSAGE_PARAMETER, message);
            parameters.Add(CLOSE_SOURCE_BRANCH_PARAMETER, closeSourceBranch.ToString());
            var request = new RestComplexRequest(Method.POST, segments, parameters, null);
            var task    = MakeAsyncRequest <PullRequest>(MERGE_PULL_REQUEST_RESOURCE, request);

            return(task);
        }
        public Task <string> GetDiffAsync(string owner, string reposlug, long id, long numberOfContextLines = 3L)
        {
            var segments = CreateDefaultSegmentsDictionary(owner, reposlug);

            segments.Add(PULL_REQUEST_ID_SEGMENT, id.ToString());
            Dictionary <string, string> parameters = null;

            if (numberOfContextLines != 3L)
            {
                parameters = new Dictionary <string, string>();
                parameters.Add(NUMBER_OF_CONTEXT_LINES_PARAMETER, numberOfContextLines.ToString());
            }
            var request = new RestComplexRequest(Method.GET, segments, parameters, null);
            var task    = MakeAsyncRequest <string>(DIFF_SPECIFIED_PULL_REQUEST_RESOURCE, request);

            return(task);
        }
예제 #26
0
        public Task <PaginatedResponse <Commit> > GetAllAsync(string owner, string repoSlug,
                                                              PaginatedRequest paginatedRequest,
                                                              CommitGetOptionalParameters optional)
        {
            var segments    = CreateDefaultSegmentsDictionary(owner, repoSlug);
            var parameters  = CreateDefaultPaginationParameters(paginatedRequest);
            var resourceUrl = string.Empty;

            if (optional.BranchOrTag != null)
            {
                resourceUrl = COMMITS_DEFAULT_RESOURCE;
                segments.Add(optional.BranchOrTag.Name, optional.BranchOrTag.Value);
            }
            else
            {
                resourceUrl = COMMITS_DEFAULT_RESOURCE;
            }
            var restRequest = new RestComplexRequest(Method.GET, segments, parameters, null);
            var task        = MakeAsyncRequest <PaginatedResponse <Commit> >(resourceUrl, restRequest);

            return(task);
        }