1
0
mirror of https://github.com/taigrr/wtf synced 2025-01-18 04:03:14 -08:00

Add lists of authored and assigned issues in GitLab project

This commit is contained in:
Albert Salim 2019-10-15 23:38:23 +08:00
parent 6b67baa65f
commit 149228dd1c
2 changed files with 79 additions and 0 deletions

View File

@ -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",

View File

@ -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)