From b8ee0e56f6e3e236568d65802b9ef126b4486183 Mon Sep 17 00:00:00 2001 From: Sherod Taylor Date: Thu, 31 May 2018 18:46:52 +0100 Subject: [PATCH] add optional more advanced jql queries and working usernames --- jira/client.go | 28 ++++++++++++++++++++++++++-- jira/widget.go | 2 +- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/jira/client.go b/jira/client.go index 0e140694..b7903018 100644 --- a/jira/client.go +++ b/jira/client.go @@ -7,11 +7,31 @@ import ( "io" "io/ioutil" "net/http" + "net/url" "os" + "strings" ) -func IssuesFor(username string) (*SearchResult, error) { - url := fmt.Sprintf("/rest/api/2/search?jql=assignee=%s", username) +func IssuesFor(username string, project string, jql string) (*SearchResult, error) { + query := []string{} + + if project != "" { + query = append(query, buildJql("project", project)) + } + + if username != "" { + query = append(query, buildJql("assignee", username)) + } + + if jql != "" { + query = append(query, jql) + } + + v := url.Values{} + + v.Set("jql", strings.Join(query, " AND ")) + + url := fmt.Sprintf("/rest/api/2/search?%s", v.Encode()) resp, err := jiraRequest(url) if err != nil { @@ -24,6 +44,10 @@ func IssuesFor(username string) (*SearchResult, error) { return searchResult, nil } +func buildJql(key string, value string) string { + return fmt.Sprintf("%s = \"%s\"", key, value) +} + /* -------------------- Unexported Functions -------------------- */ func jiraRequest(path string) (*http.Response, error) { diff --git a/jira/widget.go b/jira/widget.go index 4c69e2da..ed3c11c3 100644 --- a/jira/widget.go +++ b/jira/widget.go @@ -29,7 +29,7 @@ func (widget *Widget) Refresh() { return } - searchResult, err := IssuesFor(Config.UString("wtf.mods.jira.username")) + searchResult, err := IssuesFor(Config.UString("wtf.mods.jira.username"), Config.UString("wtf.mods.jira.project", ""), Config.UString("wtf.mods.jira.jql", "")) widget.UpdateRefreshedAt() widget.View.Clear()