diff --git a/main.go b/main.go index d7088082..6c3ea1fe 100644 --- a/main.go +++ b/main.go @@ -220,7 +220,8 @@ func makeWidget(app *tview.Application, pages *tview.Pages, widgetName string) w settings := github.NewSettingsFromYAML(wtf.Config) widget = github.NewWidget(app, pages, settings) case "gitlab": - widget = gitlab.NewWidget(app, pages) + settings := gitlab.NewSettingsFromYAML(wtf.Config) + widget = gitlab.NewWidget(app, pages, settings) case "gitter": widget = gitter.NewWidget(app, pages) case "gspreadsheets": diff --git a/modules/gitlab/display.go b/modules/gitlab/display.go index 3899d7f2..51cdfcc9 100644 --- a/modules/gitlab/display.go +++ b/modules/gitlab/display.go @@ -21,10 +21,10 @@ func (widget *Widget) display() { str = str + widget.displayStats(project) str = str + "\n" str = str + " [red]Open Approval Requests[white]\n" - str = str + widget.displayMyApprovalRequests(project, wtf.Config.UString("wtf.mods.gitlab.username")) + str = str + widget.displayMyApprovalRequests(project, widget.settings.username) str = str + "\n" str = str + " [red]My Merge Requests[white]\n" - str = str + widget.displayMyMergeRequests(project, wtf.Config.UString("wtf.mods.gitlab.username")) + str = str + widget.displayMyMergeRequests(project, widget.settings.username) widget.View.SetText(str) } diff --git a/modules/gitlab/settings.go b/modules/gitlab/settings.go new file mode 100644 index 00000000..51ca388a --- /dev/null +++ b/modules/gitlab/settings.go @@ -0,0 +1,32 @@ +package gitlab + +import ( + "os" + + "github.com/olebedev/config" + "github.com/wtfutil/wtf/cfg" +) + +type Settings struct { + common *cfg.Common + + apiKey string + domain string + projects map[string]interface{} + username string +} + +func NewSettingsFromYAML(ymlConfig *config.Config) *Settings { + localConfig, _ := ymlConfig.Get("wtf.mods.gitlab") + + settings := Settings{ + common: cfg.NewCommonSettingsFromYAML(ymlConfig), + + apiKey: localConfig.UString("apiKey", os.Getenv("WTF_GITLAB_TOKEN")), + domain: localConfig.UString("domain"), + projects: localConfig.UMap("projects"), + username: localConfig.UString("username"), + } + + return &settings +} diff --git a/modules/gitlab/widget.go b/modules/gitlab/widget.go index 8001e84f..a0d3f00f 100644 --- a/modules/gitlab/widget.go +++ b/modules/gitlab/widget.go @@ -1,8 +1,6 @@ package gitlab import ( - "os" - "github.com/gdamore/tcell" "github.com/rivo/tview" "github.com/wtfutil/wtf/wtf" @@ -25,15 +23,15 @@ type Widget struct { wtf.HelpfulWidget wtf.TextWidget - gitlab *glb.Client - GitlabProjects []*GitlabProject Idx int + gitlab *glb.Client + settings *Settings } -func NewWidget(app *tview.Application, pages *tview.Pages) *Widget { - baseURL := wtf.Config.UString("wtf.mods.gitlab.domain") - gitlab := glb.NewClient(nil, apiKey()) +func NewWidget(app *tview.Application, pages *tview.Pages, settings *Settings) *Widget { + baseURL := settings.domain + gitlab := glb.NewClient(nil, settings.apiKey) if baseURL != "" { gitlab.SetBaseURL(baseURL) @@ -43,12 +41,12 @@ func NewWidget(app *tview.Application, pages *tview.Pages) *Widget { HelpfulWidget: wtf.NewHelpfulWidget(app, pages, HelpText), TextWidget: wtf.NewTextWidget(app, "Gitlab", "gitlab", true), - gitlab: gitlab, - - Idx: 0, + Idx: 0, + gitlab: gitlab, + settings: settings, } - widget.GitlabProjects = widget.buildProjectCollection(wtf.Config.UMap("wtf.mods.gitlab.projects")) + widget.GitlabProjects = widget.buildProjectCollection(settings.projects) widget.HelpfulWidget.SetView(widget.View) widget.View.SetInputCapture(widget.keyboardIntercept) @@ -86,13 +84,6 @@ func (widget *Widget) Prev() { /* -------------------- Unexported Functions -------------------- */ -func apiKey() string { - return wtf.Config.UString( - "wtf.mods.gitlab.apiKey", - os.Getenv("WTF_GITLAB_TOKEN"), - ) -} - func (widget *Widget) buildProjectCollection(projectData map[string]interface{}) []*GitlabProject { gitlabProjects := []*GitlabProject{}