diff --git a/main.go b/main.go index 6c3ea1fe..6fcc09b5 100644 --- a/main.go +++ b/main.go @@ -223,7 +223,8 @@ func makeWidget(app *tview.Application, pages *tview.Pages, widgetName string) w settings := gitlab.NewSettingsFromYAML(wtf.Config) widget = gitlab.NewWidget(app, pages, settings) case "gitter": - widget = gitter.NewWidget(app, pages) + settings := gitter.NewSettingsFromYAML(wtf.Config) + widget = gitter.NewWidget(app, pages, settings) case "gspreadsheets": widget = gspreadsheets.NewWidget(app) case "hackernews": diff --git a/modules/gitter/client.go b/modules/gitter/client.go index f3d635c2..0eec0343 100644 --- a/modules/gitter/client.go +++ b/modules/gitter/client.go @@ -5,18 +5,16 @@ import ( "encoding/json" "fmt" "github.com/wtfutil/wtf/logger" - "github.com/wtfutil/wtf/wtf" "io" "io/ioutil" "net/http" - "os" "strconv" ) -func GetMessages(roomId string, numberOfMessages int) ([]Message, error) { +func GetMessages(roomId string, numberOfMessages int, apiToken string) ([]Message, error) { var messages []Message - resp, err := apiRequest("rooms/" + roomId + "/chatMessages?limit=" + strconv.Itoa(numberOfMessages)) + resp, err := apiRequest("rooms/"+roomId+"/chatMessages?limit="+strconv.Itoa(numberOfMessages), apiToken) if err != nil { return nil, err } @@ -26,10 +24,10 @@ func GetMessages(roomId string, numberOfMessages int) ([]Message, error) { return messages, nil } -func GetRoom(roomUri string) (*Room, error) { +func GetRoom(roomUri, apiToken string) (*Room, error) { var rooms Rooms - resp, err := apiRequest("rooms?q=" + roomUri) + resp, err := apiRequest("rooms?q="+roomUri, apiToken) if err != nil { return nil, err } @@ -52,9 +50,9 @@ var ( apiBaseURL = "https://api.gitter.im/v1/" ) -func apiRequest(path string) (*http.Response, error) { +func apiRequest(path, apiToken string) (*http.Response, error) { req, err := http.NewRequest("GET", apiBaseURL+path, nil) - bearer := fmt.Sprintf("Bearer %s", apiToken()) + bearer := fmt.Sprintf("Bearer %s", apiToken) req.Header.Add("Authorization", bearer) httpClient := &http.Client{} @@ -86,10 +84,3 @@ func parseJson(obj interface{}, text io.Reader) { } } } - -func apiToken() string { - return wtf.Config.UString( - "wtf.mods.gitter.apiToken", - os.Getenv("WTF_GITTER_API_TOKEN"), - ) -} diff --git a/modules/gitter/settings.go b/modules/gitter/settings.go new file mode 100644 index 00000000..6abdefd7 --- /dev/null +++ b/modules/gitter/settings.go @@ -0,0 +1,30 @@ +package gitter + +import ( + "os" + + "github.com/olebedev/config" + "github.com/wtfutil/wtf/cfg" +) + +type Settings struct { + common *cfg.Common + + apiToken string + numberOfMessages int + roomURI string +} + +func NewSettingsFromYAML(ymlConfig *config.Config) *Settings { + localConfig, _ := ymlConfig.Get("wtf.mods.gitter") + + settings := Settings{ + common: cfg.NewCommonSettingsFromYAML(ymlConfig), + + apiToken: localConfig.UString("apiToken", os.Getenv("WTF_GITTER_API_TOKEN")), + numberOfMessages: localConfig.UInt("numberOfMessages", 10), + roomURI: localConfig.UString("roomUri", "wtfutil/Lobby"), + } + + return &settings +} diff --git a/modules/gitter/widget.go b/modules/gitter/widget.go index 89dbb03a..80b54e95 100644 --- a/modules/gitter/widget.go +++ b/modules/gitter/widget.go @@ -26,12 +26,15 @@ type Widget struct { messages []Message selected int + settings *Settings } -func NewWidget(app *tview.Application, pages *tview.Pages) *Widget { +func NewWidget(app *tview.Application, pages *tview.Pages, settings *Settings) *Widget { widget := Widget{ HelpfulWidget: wtf.NewHelpfulWidget(app, pages, HelpText), TextWidget: wtf.NewTextWidget(app, "Gitter", "gitter", true), + + settings: settings, } widget.HelpfulWidget.SetView(widget.View) @@ -51,7 +54,7 @@ func (widget *Widget) Refresh() { return } - room, err := GetRoom(wtf.Config.UString("wtf.mods.gitter.roomUri", "wtfutil/Lobby")) + room, err := GetRoom(widget.settings.roomURI, widget.settings.apiToken) if err != nil { widget.View.SetWrap(true) widget.View.SetTitle(widget.Name()) @@ -63,7 +66,7 @@ func (widget *Widget) Refresh() { return } - messages, err := GetMessages(room.ID, wtf.Config.UInt("wtf.mods.gitter.numberOfMessages", 10)) + messages, err := GetMessages(room.ID, widget.settings.numberOfMessages, widget.settings.apiToken) if err != nil { widget.View.SetWrap(true) @@ -86,7 +89,7 @@ func (widget *Widget) display() { widget.View.SetWrap(true) widget.View.Clear() - widget.View.SetTitle(widget.ContextualTitle(fmt.Sprintf("%s - %s", widget.Name(), wtf.Config.UString("wtf.mods.gitter.roomUri", "wtfutil/Lobby")))) + widget.View.SetTitle(widget.ContextualTitle(fmt.Sprintf("%s - %s", widget.Name(), widget.settings.roomURI))) widget.View.SetText(widget.contentFrom(widget.messages)) widget.View.Highlight(strconv.Itoa(widget.selected)).ScrollToHighlight() }