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  }