diff --git a/modules/gitlab/display.go b/modules/gitlab/display.go index c1e33feb..193bd5bf 100644 --- a/modules/gitlab/display.go +++ b/modules/gitlab/display.go @@ -27,6 +27,12 @@ func (widget *Widget) content() (string, string, bool) { str += "\n" str += " [red]My Merge Requests[white]\n" str += widget.displayMyMergeRequests(project, widget.settings.username) + str += "\n" + str += " [red]Open Assigned Issues[white]\n" + str += widget.displayMyAssignedIssues(project, widget.settings.username) + str += "\n" + str += " [red]My Issues[white]\n" + str += widget.displayMyIssues(project, widget.settings.username) return title, str, false } @@ -61,6 +67,36 @@ func (widget *Widget) displayMyApprovalRequests(project *GitlabProject, username return str } +func (widget *Widget) displayMyAssignedIssues(project *GitlabProject, username string) string { + issues := project.myAssignedIssues(username) + + if len(issues) == 0 { + return " [grey]none[white]\n" + } + + str := "" + for _, issue := range issues { + str += fmt.Sprintf(" [green]%4d[white] %s\n", issue.IID, issue.Title) + } + + return str +} + +func (widget *Widget) displayMyIssues(project *GitlabProject, username string) string { + issues := project.myIssues(username) + + if len(issues) == 0 { + return " [grey]none[white]\n" + } + + str := "" + for _, issue := range issues { + str += fmt.Sprintf(" [green]%4d[white] %s\n", issue.IID, issue.Title) + } + + return str +} + func (widget *Widget) displayStats(project *GitlabProject) string { str := fmt.Sprintf( " MRs: %d Issues: %d Stars: %d\n", diff --git a/modules/gitlab/gitlab_project.go b/modules/gitlab/gitlab_project.go index b144db7a..9840c47e 100644 --- a/modules/gitlab/gitlab_project.go +++ b/modules/gitlab/gitlab_project.go @@ -9,6 +9,7 @@ type GitlabProject struct { path string MergeRequests []*glb.MergeRequest + Issues []*glb.Issue RemoteProject *glb.Project } @@ -25,6 +26,7 @@ func NewGitlabProject(projectPath string, client *glb.Client) *GitlabProject { func (project *GitlabProject) Refresh() { project.MergeRequests, _ = project.loadMergeRequests() project.RemoteProject, _ = project.loadRemoteProject() + project.Issues, _ = project.loadIssues() } /* -------------------- Counts -------------------- */ @@ -86,6 +88,32 @@ func (project *GitlabProject) myApprovalRequests(username string) []*glb.MergeRe return mrs } +// myAssignedIssues returns a list of issues for which username has been assigned +func (project *GitlabProject) myAssignedIssues(username string) []*glb.Issue { + issues := []*glb.Issue{} + + for _, issue := range project.Issues { + if issue.Assignee != nil && issue.Assignee.Username == username { + issues = append(issues, issue) + } + } + + return issues +} + +// myIssues returns a list of issues created by username on this project +func (project *GitlabProject) myIssues(username string) []*glb.Issue { + issues := []*glb.Issue{} + + for _, issue := range project.Issues { + if issue.Author.Username == username { + issues = append(issues, issue) + } + } + + return issues +} + func (project *GitlabProject) loadMergeRequests() ([]*glb.MergeRequest, error) { state := "opened" opts := glb.ListProjectMergeRequestsOptions{ @@ -101,6 +129,21 @@ func (project *GitlabProject) loadMergeRequests() ([]*glb.MergeRequest, error) { return mrs, nil } +func (project *GitlabProject) loadIssues() ([]*glb.Issue, error) { + state := "opened" + opts := glb.ListProjectIssuesOptions{ + State: &state, + } + + issues, _, err := project.client.Issues.ListProjectIssues(project.path, &opts) + + if err != nil { + return nil, err + } + + return issues, nil +} + func (project *GitlabProject) loadRemoteProject() (*glb.Project, error) { projectsitory, _, err := project.client.Projects.GetProject(project.path, nil)