github.com/wtfutil/wtf@v0.43.0/modules/gitlab/display.go (about) 1 package gitlab 2 3 import ( 4 "fmt" 5 6 "github.com/xanzy/go-gitlab" 7 ) 8 9 func (widget *Widget) display() { 10 widget.Redraw(widget.content) 11 } 12 13 func (widget *Widget) displayError() { 14 widget.Redraw(widget.contentError) 15 } 16 17 func (widget *Widget) contentError() (string, string, bool) { 18 19 title := fmt.Sprintf("%s - Error", widget.CommonSettings().Title) 20 21 if widget.configError != nil { 22 return title, fmt.Sprintf("Error: \n [red]%v[white]", widget.configError), false 23 24 } 25 return title, "Error", false 26 } 27 28 func (widget *Widget) content() (string, string, bool) { 29 30 project := widget.currentGitlabProject() 31 if project == nil { 32 return widget.CommonSettings().Title, " Gitlab project data is unavailable ", true 33 } 34 35 // initial maxItems count 36 widget.Items = make([]ContentItem, 0) 37 widget.SetItemCount(0) 38 39 title := fmt.Sprintf("%s - %s", widget.CommonSettings().Title, widget.title(project)) 40 41 _, _, width, _ := widget.View.GetRect() 42 str := widget.settings.PaginationMarker(len(widget.GitlabProjects), widget.Idx, width) + "\n" 43 str += fmt.Sprintf(" [%s]Stats[white]\n", widget.settings.Colors.Subheading) 44 str += widget.displayStats(project) 45 str += "\n" 46 str += fmt.Sprintf(" [%s]Open Assigned Merge Requests[white]\n", widget.settings.Colors.Subheading) 47 str += widget.displayMyAssignedMergeRequests(project, widget.settings.username) 48 str += "\n" 49 str += fmt.Sprintf(" [%s]My Merge Requests[white]\n", widget.settings.Colors.Subheading) 50 str += widget.displayMyMergeRequests(project, widget.settings.username) 51 str += "\n" 52 str += fmt.Sprintf(" [%s]Open Assigned Issues[white]\n", widget.settings.Colors.Subheading) 53 str += widget.displayMyAssignedIssues(project, widget.settings.username) 54 str += "\n" 55 str += fmt.Sprintf(" [%s]My Issues[white]\n", widget.settings.Colors.Subheading) 56 str += widget.displayMyIssues(project, widget.settings.username) 57 58 return title, str, false 59 } 60 61 func (widget *Widget) displayMyMergeRequests(project *GitlabProject, username string) string { 62 mrs := project.myMergeRequests() 63 return widget.renderMergeRequests(mrs) 64 } 65 66 func (widget *Widget) displayMyAssignedMergeRequests(project *GitlabProject, username string) string { 67 mrs := project.myAssignedMergeRequests() 68 return widget.renderMergeRequests(mrs) 69 } 70 71 func (widget *Widget) displayMyAssignedIssues(project *GitlabProject, username string) string { 72 issues := project.myAssignedIssues() 73 return widget.renderIssues(issues) 74 } 75 76 func (widget *Widget) displayMyIssues(project *GitlabProject, username string) string { 77 issues := project.myIssues() 78 return widget.renderIssues(issues) 79 } 80 81 func (widget *Widget) renderMergeRequests(mrs []*gitlab.MergeRequest) string { 82 83 length := len(mrs) 84 85 if length == 0 { 86 return " [grey]none[white]\n" 87 } 88 maxItems := widget.GetItemCount() 89 90 str := "" 91 for idx, issue := range mrs { 92 str += fmt.Sprintf(` [green]["%d"]%4d[""][white] %s`, maxItems+idx, issue.IID, issue.Title) 93 str += "\n" 94 widget.Items = append(widget.Items, ContentItem{Type: "MR", ID: issue.IID}) 95 } 96 widget.SetItemCount(maxItems + length) 97 98 return str 99 } 100 101 func (widget *Widget) renderIssues(issues []*gitlab.Issue) string { 102 103 length := len(issues) 104 105 if length == 0 { 106 return " [grey]none[white]\n" 107 } 108 maxItems := widget.GetItemCount() 109 110 str := "" 111 for idx, issue := range issues { 112 str += fmt.Sprintf(` [green]["%d"]%4d[""][white] %s`, maxItems+idx, issue.IID, issue.Title) 113 str += "\n" 114 widget.Items = append(widget.Items, ContentItem{Type: "ISSUE", ID: issue.IID}) 115 } 116 widget.SetItemCount(maxItems + length) 117 118 return str 119 } 120 121 func (widget *Widget) displayStats(project *GitlabProject) string { 122 str := fmt.Sprintf( 123 " MRs: %d Issues: %d Stars: %d\n", 124 project.MergeRequestCount(), 125 project.IssueCount(), 126 project.StarCount(), 127 ) 128 129 return str 130 } 131 132 func (widget *Widget) title(project *GitlabProject) string { 133 return fmt.Sprintf("[green]%s [white]", project.path) 134 }