mirror of
https://github.com/taigrr/wtf
synced 2025-01-18 04:03:14 -08:00
Merge branch 'master' of github.com:wtfutil/wtf
This commit is contained in:
commit
cb636881c3
@ -22,8 +22,8 @@ func (widget *Widget) content() (string, string, bool) {
|
|||||||
str += " [red]Stats[white]\n"
|
str += " [red]Stats[white]\n"
|
||||||
str += widget.displayStats(project)
|
str += widget.displayStats(project)
|
||||||
str += "\n"
|
str += "\n"
|
||||||
str += " [red]Open Approval Requests[white]\n"
|
str += " [red]Open Assigned Merge Requests[white]\n"
|
||||||
str += widget.displayMyApprovalRequests(project, widget.settings.username)
|
str += widget.displayMyAssignedMergeRequests(project, widget.settings.username)
|
||||||
str += "\n"
|
str += "\n"
|
||||||
str += " [red]My Merge Requests[white]\n"
|
str += " [red]My Merge Requests[white]\n"
|
||||||
str += widget.displayMyMergeRequests(project, widget.settings.username)
|
str += widget.displayMyMergeRequests(project, widget.settings.username)
|
||||||
@ -52,8 +52,8 @@ func (widget *Widget) displayMyMergeRequests(project *GitlabProject, username st
|
|||||||
return str
|
return str
|
||||||
}
|
}
|
||||||
|
|
||||||
func (widget *Widget) displayMyApprovalRequests(project *GitlabProject, username string) string {
|
func (widget *Widget) displayMyAssignedMergeRequests(project *GitlabProject, username string) string {
|
||||||
mrs := project.myApprovalRequests(username)
|
mrs := project.myAssignedMergeRequests(username)
|
||||||
|
|
||||||
if len(mrs) == 0 {
|
if len(mrs) == 0 {
|
||||||
return " [grey]none[white]\n"
|
return " [grey]none[white]\n"
|
||||||
|
@ -4,18 +4,48 @@ import (
|
|||||||
glb "github.com/xanzy/go-gitlab"
|
glb "github.com/xanzy/go-gitlab"
|
||||||
)
|
)
|
||||||
|
|
||||||
type GitlabProject struct {
|
type context struct {
|
||||||
client *glb.Client
|
client *glb.Client
|
||||||
|
user *glb.User
|
||||||
|
}
|
||||||
|
|
||||||
|
func newContext(settings *Settings) (*context, error) {
|
||||||
|
baseURL := settings.domain
|
||||||
|
gitlabClient := glb.NewClient(nil, settings.apiKey)
|
||||||
|
|
||||||
|
if baseURL != "" {
|
||||||
|
gitlabClient.SetBaseURL(baseURL)
|
||||||
|
}
|
||||||
|
|
||||||
|
user, _, err := gitlabClient.Users.CurrentUser()
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
context := context{
|
||||||
|
client: gitlabClient,
|
||||||
|
user: user,
|
||||||
|
}
|
||||||
|
|
||||||
|
return &context, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type GitlabProject struct {
|
||||||
|
context *context
|
||||||
path string
|
path string
|
||||||
|
|
||||||
MergeRequests []*glb.MergeRequest
|
MergeRequests []*glb.MergeRequest
|
||||||
Issues []*glb.Issue
|
AssignedMergeRequests []*glb.MergeRequest
|
||||||
|
AuthoredMergeRequests []*glb.MergeRequest
|
||||||
|
AssignedIssues []*glb.Issue
|
||||||
|
AuthoredIssues []*glb.Issue
|
||||||
RemoteProject *glb.Project
|
RemoteProject *glb.Project
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewGitlabProject(projectPath string, client *glb.Client) *GitlabProject {
|
func NewGitlabProject(context *context, projectPath string) *GitlabProject {
|
||||||
project := GitlabProject{
|
project := GitlabProject{
|
||||||
client: client,
|
context: context,
|
||||||
path: projectPath,
|
path: projectPath,
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -25,8 +55,11 @@ func NewGitlabProject(projectPath string, client *glb.Client) *GitlabProject {
|
|||||||
// Refresh reloads the gitlab data via the Gitlab API
|
// Refresh reloads the gitlab data via the Gitlab API
|
||||||
func (project *GitlabProject) Refresh() {
|
func (project *GitlabProject) Refresh() {
|
||||||
project.MergeRequests, _ = project.loadMergeRequests()
|
project.MergeRequests, _ = project.loadMergeRequests()
|
||||||
|
project.AssignedMergeRequests, _ = project.loadAssignedMergeRequests()
|
||||||
|
project.AuthoredMergeRequests, _ = project.loadAuthoredMergeRequests()
|
||||||
|
project.AssignedIssues, _ = project.loadAssignedIssues()
|
||||||
|
project.AuthoredIssues, _ = project.loadAuthoredIssues()
|
||||||
project.RemoteProject, _ = project.loadRemoteProject()
|
project.RemoteProject, _ = project.loadRemoteProject()
|
||||||
project.Issues, _ = project.loadIssues()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------- Counts -------------------- */
|
/* -------------------- Counts -------------------- */
|
||||||
@ -55,63 +88,23 @@ func (project *GitlabProject) StarCount() int {
|
|||||||
|
|
||||||
// myMergeRequests returns a list of merge requests created by username on this project
|
// myMergeRequests returns a list of merge requests created by username on this project
|
||||||
func (project *GitlabProject) myMergeRequests(username string) []*glb.MergeRequest {
|
func (project *GitlabProject) myMergeRequests(username string) []*glb.MergeRequest {
|
||||||
mrs := []*glb.MergeRequest{}
|
return project.AuthoredMergeRequests
|
||||||
|
|
||||||
for _, mr := range project.MergeRequests {
|
|
||||||
user := mr.Author
|
|
||||||
|
|
||||||
if user.Username == username {
|
|
||||||
mrs = append(mrs, mr)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return mrs
|
// myAssignedMergeRequests returns a list of merge requests for which username has been
|
||||||
}
|
// assigned
|
||||||
|
func (project *GitlabProject) myAssignedMergeRequests(username string) []*glb.MergeRequest {
|
||||||
// myApprovalRequests returns a list of merge requests for which username has been
|
return project.AssignedMergeRequests
|
||||||
// requested to approve
|
|
||||||
func (project *GitlabProject) myApprovalRequests(username string) []*glb.MergeRequest {
|
|
||||||
mrs := []*glb.MergeRequest{}
|
|
||||||
|
|
||||||
for _, mr := range project.MergeRequests {
|
|
||||||
approvers, _, err := project.client.MergeRequests.GetMergeRequestApprovals(project.path, mr.IID)
|
|
||||||
if err != nil {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
for _, approver := range approvers.Approvers {
|
|
||||||
if approver.User.Username == username {
|
|
||||||
mrs = append(mrs, mr)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return mrs
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// myAssignedIssues returns a list of issues for which username has been assigned
|
// myAssignedIssues returns a list of issues for which username has been assigned
|
||||||
func (project *GitlabProject) myAssignedIssues(username string) []*glb.Issue {
|
func (project *GitlabProject) myAssignedIssues(username string) []*glb.Issue {
|
||||||
issues := []*glb.Issue{}
|
return project.AssignedIssues
|
||||||
|
|
||||||
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
|
// myIssues returns a list of issues created by username on this project
|
||||||
func (project *GitlabProject) myIssues(username string) []*glb.Issue {
|
func (project *GitlabProject) myIssues(username string) []*glb.Issue {
|
||||||
issues := []*glb.Issue{}
|
return project.AuthoredIssues
|
||||||
|
|
||||||
for _, issue := range project.Issues {
|
|
||||||
if issue.Author.Username == username {
|
|
||||||
issues = append(issues, issue)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return issues
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (project *GitlabProject) loadMergeRequests() ([]*glb.MergeRequest, error) {
|
func (project *GitlabProject) loadMergeRequests() ([]*glb.MergeRequest, error) {
|
||||||
@ -120,7 +113,7 @@ func (project *GitlabProject) loadMergeRequests() ([]*glb.MergeRequest, error) {
|
|||||||
State: &state,
|
State: &state,
|
||||||
}
|
}
|
||||||
|
|
||||||
mrs, _, err := project.client.MergeRequests.ListProjectMergeRequests(project.path, &opts)
|
mrs, _, err := project.context.client.MergeRequests.ListProjectMergeRequests(project.path, &opts)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@ -129,13 +122,62 @@ func (project *GitlabProject) loadMergeRequests() ([]*glb.MergeRequest, error) {
|
|||||||
return mrs, nil
|
return mrs, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (project *GitlabProject) loadIssues() ([]*glb.Issue, error) {
|
func (project *GitlabProject) loadAssignedMergeRequests() ([]*glb.MergeRequest, error) {
|
||||||
|
state := "opened"
|
||||||
|
opts := glb.ListProjectMergeRequestsOptions{
|
||||||
|
State: &state,
|
||||||
|
AssigneeID: &project.context.user.ID,
|
||||||
|
}
|
||||||
|
|
||||||
|
mrs, _, err := project.context.client.MergeRequests.ListProjectMergeRequests(project.path, &opts)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return mrs, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (project *GitlabProject) loadAuthoredMergeRequests() ([]*glb.MergeRequest, error) {
|
||||||
|
state := "opened"
|
||||||
|
opts := glb.ListProjectMergeRequestsOptions{
|
||||||
|
State: &state,
|
||||||
|
AuthorID: &project.context.user.ID,
|
||||||
|
}
|
||||||
|
|
||||||
|
mrs, _, err := project.context.client.MergeRequests.ListProjectMergeRequests(project.path, &opts)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return mrs, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (project *GitlabProject) loadAssignedIssues() ([]*glb.Issue, error) {
|
||||||
state := "opened"
|
state := "opened"
|
||||||
opts := glb.ListProjectIssuesOptions{
|
opts := glb.ListProjectIssuesOptions{
|
||||||
State: &state,
|
State: &state,
|
||||||
|
AssigneeID: &project.context.user.ID,
|
||||||
}
|
}
|
||||||
|
|
||||||
issues, _, err := project.client.Issues.ListProjectIssues(project.path, &opts)
|
issues, _, err := project.context.client.Issues.ListProjectIssues(project.path, &opts)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return issues, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (project *GitlabProject) loadAuthoredIssues() ([]*glb.Issue, interface{}) {
|
||||||
|
state := "opened"
|
||||||
|
opts := glb.ListProjectIssuesOptions{
|
||||||
|
State: &state,
|
||||||
|
AuthorID: &project.context.user.ID,
|
||||||
|
}
|
||||||
|
|
||||||
|
issues, _, err := project.context.client.Issues.ListProjectIssues(project.path, &opts)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@ -145,7 +187,7 @@ func (project *GitlabProject) loadIssues() ([]*glb.Issue, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (project *GitlabProject) loadRemoteProject() (*glb.Project, error) {
|
func (project *GitlabProject) loadRemoteProject() (*glb.Project, error) {
|
||||||
projectsitory, _, err := project.client.Projects.GetProject(project.path, nil)
|
projectsitory, _, err := project.context.client.Projects.GetProject(project.path, nil)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -3,7 +3,6 @@ package gitlab
|
|||||||
import (
|
import (
|
||||||
"github.com/rivo/tview"
|
"github.com/rivo/tview"
|
||||||
"github.com/wtfutil/wtf/view"
|
"github.com/wtfutil/wtf/view"
|
||||||
glb "github.com/xanzy/go-gitlab"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type Widget struct {
|
type Widget struct {
|
||||||
@ -13,28 +12,23 @@ type Widget struct {
|
|||||||
|
|
||||||
GitlabProjects []*GitlabProject
|
GitlabProjects []*GitlabProject
|
||||||
|
|
||||||
gitlab *glb.Client
|
context *context
|
||||||
settings *Settings
|
settings *Settings
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewWidget(app *tview.Application, pages *tview.Pages, settings *Settings) *Widget {
|
func NewWidget(app *tview.Application, pages *tview.Pages, settings *Settings) *Widget {
|
||||||
baseURL := settings.domain
|
context, _ := newContext(settings)
|
||||||
gitlab := glb.NewClient(nil, settings.apiKey)
|
|
||||||
|
|
||||||
if baseURL != "" {
|
|
||||||
gitlab.SetBaseURL(baseURL)
|
|
||||||
}
|
|
||||||
|
|
||||||
widget := Widget{
|
widget := Widget{
|
||||||
KeyboardWidget: view.NewKeyboardWidget(app, pages, settings.common),
|
KeyboardWidget: view.NewKeyboardWidget(app, pages, settings.common),
|
||||||
MultiSourceWidget: view.NewMultiSourceWidget(settings.common, "repository", "repositories"),
|
MultiSourceWidget: view.NewMultiSourceWidget(settings.common, "repository", "repositories"),
|
||||||
TextWidget: view.NewTextWidget(app, settings.common),
|
TextWidget: view.NewTextWidget(app, settings.common),
|
||||||
|
|
||||||
gitlab: gitlab,
|
context: context,
|
||||||
settings: settings,
|
settings: settings,
|
||||||
}
|
}
|
||||||
|
|
||||||
widget.GitlabProjects = widget.buildProjectCollection(settings.projects)
|
widget.GitlabProjects = widget.buildProjectCollection(context, settings.projects)
|
||||||
|
|
||||||
widget.initializeKeyboardControls()
|
widget.initializeKeyboardControls()
|
||||||
widget.View.SetInputCapture(widget.InputCapture)
|
widget.View.SetInputCapture(widget.InputCapture)
|
||||||
@ -61,11 +55,11 @@ func (widget *Widget) HelpText() string {
|
|||||||
|
|
||||||
/* -------------------- Unexported Functions -------------------- */
|
/* -------------------- Unexported Functions -------------------- */
|
||||||
|
|
||||||
func (widget *Widget) buildProjectCollection(projectData []string) []*GitlabProject {
|
func (widget *Widget) buildProjectCollection(context *context, projectData []string) []*GitlabProject {
|
||||||
gitlabProjects := []*GitlabProject{}
|
gitlabProjects := []*GitlabProject{}
|
||||||
|
|
||||||
for _, projectPath := range projectData {
|
for _, projectPath := range projectData {
|
||||||
project := NewGitlabProject(projectPath, widget.gitlab)
|
project := NewGitlabProject(context, projectPath)
|
||||||
gitlabProjects = append(gitlabProjects, project)
|
gitlabProjects = append(gitlabProjects, project)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user