예제 #1
0
        public async Task <IPagedQueryResult <Comment> > GetPagedCommentsAsync(string issueKey, int?maxComments = default(int?), int startAt = 0, CancellationToken token = default(CancellationToken))
        {
            var resource        = $"rest/api/latest/issue/{issueKey}/comment";
            var queryParameters = new Dictionary <string, string>();

            queryParameters.Add("startAt", $"{startAt}");

            if (maxComments.HasValue)
            {
                queryParameters.Add("maxResults", $"{maxComments.Value}");
            }

            var result = await _jira.RestClient.ExecuteRequestAsync(Method.GET, resource, queryParameters, token).ConfigureAwait(false);

            var serializerSettings = _jira.RestClient.Settings.JsonSerializerSettings;
            var comments           = result["comments"]
                                     .Cast <JObject>()
                                     .Select(commentJson =>
            {
                var remoteComment = JsonConvert.DeserializeObject <RemoteComment>(commentJson.ToString(), serializerSettings);
                return(new Comment(remoteComment));
            });

            return(PagedQueryResult <Comment> .FromJson((JObject)result, comments));
        }
예제 #2
0
        private async Task <IPagedQueryResult <Issue> > GetIssuesFromJqlAsync(JqlOptions options)
        {
            if (_jira.Debug)
            {
                Trace.WriteLine("[GetFromJqlAsync] JQL: " + options.Jql);
            }

            var parameters = new
            {
                jql           = options.Jql,
                startAt       = options.StartAt,
                maxResults    = options.MaxIssuesPerRequest,
                validateQuery = options.ValidateQuery,
            };

            var result = await _jira.RestClient.ExecuteRequestAsync(Method.POST, "rest/api/2/search", parameters, options.Token).ConfigureAwait(false);

            var serializerSettings = await this.GetIssueSerializerSettingsAsync(options.Token).ConfigureAwait(false);

            var issues = result["issues"]
                         .Cast <JObject>()
                         .Select(issueJson =>
            {
                var remoteIssue = JsonConvert.DeserializeObject <RemoteIssueWrapper>(issueJson.ToString(), serializerSettings).RemoteIssue;
                return(new Issue(_jira, remoteIssue));
            });

            return(PagedQueryResult <Issue> .FromJson((JObject)result, issues));
        }
예제 #3
0
        public async Task <IPagedQueryResult <Issue> > GetIssuesFromJqlAsync(IssueSearchOptions options, CancellationToken token = default(CancellationToken))
        {
            if (_jira.Debug)
            {
                Trace.WriteLine("[GetFromJqlAsync] JQL: " + options.Jql);
            }

            var fields = new List <string>();

            if (options.AdditionalFields == null || !options.AdditionalFields.Any())
            {
                fields.Add(ALL_FIELDS_QUERY_STRING);
                fields.AddRange(_excludedFields.Select(field => $"-{field}"));
            }
            else if (options.FetchBasicFields)
            {
                var excludedFields = _excludedFields.Where(excludedField => !options.AdditionalFields.Contains(excludedField, StringComparer.OrdinalIgnoreCase)).ToArray();
                fields.Add(ALL_FIELDS_QUERY_STRING);
                fields.AddRange(excludedFields.Select(field => $"-{field}"));
            }
            else
            {
                fields.AddRange(options.AdditionalFields.Select(field => field.Trim().ToLowerInvariant()));
            }

            var parameters = new
            {
                jql           = options.Jql,
                startAt       = options.StartAt,
                maxResults    = options.MaxIssuesPerRequest ?? this.MaxIssuesPerRequest,
                validateQuery = options.ValidateQuery,
                fields        = fields
            };

            var result = await _jira.RestClient.ExecuteRequestAsync(Method.POST, "rest/api/2/search", parameters, token).ConfigureAwait(false);

            var serializerSettings = await this.GetIssueSerializerSettingsAsync(token).ConfigureAwait(false);

            var issues = result["issues"]
                         .Cast <JObject>()
                         .Select(issueJson =>
            {
                var remoteIssue = JsonConvert.DeserializeObject <RemoteIssueWrapper>(issueJson.ToString(), serializerSettings).RemoteIssue;
                return(new Issue(_jira, remoteIssue));
            });

            return(PagedQueryResult <Issue> .FromJson((JObject)result, issues));
        }
        public async Task <IPagedQueryResult <JiraUser> > GetUsersAsync(string groupname, bool includeInactiveUsers = false, int maxResults = 50, int startAt = 0, CancellationToken token = default(CancellationToken))
        {
            var resource = String.Format(
                "rest/api/2/group/member?groupname={0}&includeInactiveUsers={1}&startAt={2}&maxResults={3}",
                Uri.EscapeDataString(groupname),
                includeInactiveUsers,
                startAt,
                maxResults);

            var response = await _jira.RestClient.ExecuteRequestAsync(Method.GET, resource, null, token).ConfigureAwait(false);

            var serializerSetting = _jira.RestClient.Settings.JsonSerializerSettings;
            var users             = response["values"]
                                    .Cast <JObject>()
                                    .Select(valuesJson => JsonConvert.DeserializeObject <JiraUser>(valuesJson.ToString(), serializerSetting));

            return(PagedQueryResult <JiraUser> .FromJson((JObject)response, users));
        }
        public async Task <IPagedQueryResult <JiraUser> > GetUsersAsync(string groupname, bool includeInactiveUsers = false, int maxResults = 50, int startAt = 0, CancellationToken token = default(CancellationToken))
        {
            var resource        = "rest/api/latest/group/member";
            var queryParameters = new Dictionary <string, string>();

            queryParameters.Add("groupname", Uri.EscapeDataString(groupname));
            queryParameters.Add("includeInactiveUsers", $"{includeInactiveUsers}");
            queryParameters.Add("startAt", $"{startAt}");
            queryParameters.Add("maxResults", $"{maxResults}");

            var response = await _jira.RestClient.ExecuteRequestAsync(Method.GET, resource, queryParameters, token).ConfigureAwait(false);

            var serializerSetting = _jira.RestClient.Settings.JsonSerializerSettings;
            var users             = response["values"]
                                    .Cast <JObject>()
                                    .Select(valuesJson => JsonConvert.DeserializeObject <JiraUser>(valuesJson.ToString(), serializerSetting));

            return(PagedQueryResult <JiraUser> .FromJson((JObject)response, users));
        }
예제 #6
0
        public async Task <IPagedQueryResult <ProjectVersion> > GetPagedVersionsAsync(string projectKey, int startAt = 0, int maxResults = 50, CancellationToken token = default(CancellationToken))
        {
            var settings = _jira.RestClient.Settings.JsonSerializerSettings;
            var resource = String.Format("rest/api/2/project/{0}/version?startAt={1}&maxResults={2}",
                                         projectKey,
                                         startAt,
                                         maxResults);

            var result = await _jira.RestClient.ExecuteRequestAsync(Method.GET, resource, null, token).ConfigureAwait(false);

            var versions = result["values"]
                           .Cast <JObject>()
                           .Select(versionJson =>
            {
                var remoteVersion        = JsonConvert.DeserializeObject <RemoteVersion>(versionJson.ToString(), settings);
                remoteVersion.ProjectKey = projectKey;
                return(new ProjectVersion(_jira, remoteVersion));
            });

            return(PagedQueryResult <ProjectVersion> .FromJson((JObject)result, versions));
        }
예제 #7
0
        public Task <IPagedQueryResult <Comment> > GetCommentsFromIssueAsync(string issueKey, int maxComments, int startAt, CancellationToken token)
        {
            var resource   = String.Format("rest/api/2/issue/{0}/comment", issueKey);
            var parameters = new
            {
                startAt    = startAt,
                maxResults = maxComments,
            };

            return(this.ExecuteRequestAsync(Method.GET, resource, parameters).ContinueWith <IPagedQueryResult <Comment> >(task =>
            {
                var comments = task.Result["comments"]
                               .Cast <JObject>()
                               .Select(commentJson =>
                {
                    var remoteComment = JsonConvert.DeserializeObject <RemoteComment>(commentJson.ToString(), this.GetSerializerSettings());
                    return new Comment(remoteComment);
                });

                return PagedQueryResult <Comment> .FromJson((JObject)task.Result, comments);
            }));
        }
예제 #8
0
        public Task <IEnumerable <Issue> > GetIssuesFromJqlAsync(string jql, int?maxIssues, int startAt, CancellationToken token)
        {
            var jira       = this._getCurrentJiraFunc();
            var parameters = new
            {
                jql        = jql,
                startAt    = startAt,
                maxResults = maxIssues ?? jira.MaxIssuesPerRequest,
            };

            return(this.ExecuteRequestAsync(Method.POST, "rest/api/2/search", parameters, token).ContinueWith <IEnumerable <Issue> >(task =>
            {
                var issues = task.Result["issues"]
                             .Cast <JObject>()
                             .Select(issueJson =>
                {
                    var remoteIssue = JsonConvert.DeserializeObject <RemoteIssueWrapper>(issueJson.ToString(), this.GetSerializerSettings()).RemoteIssue;
                    return new Issue(jira, remoteIssue);
                });

                return PagedQueryResult <Issue> .FromJson((JObject)task.Result, issues);
            }));
        }