From eaa8825aa56663835b2788e18b29fa04efd081e0 Mon Sep 17 00:00:00 2001 From: Chris Cummer Date: Tue, 16 Apr 2019 20:33:03 -0700 Subject: [PATCH] WTF-400 Twitter extracted to new config format --- main.go | 3 ++- modules/twitter/client.go | 21 +++++---------------- modules/twitter/request.go | 3 +-- modules/twitter/settings.go | 30 ++++++++++++++++++++++++++++++ modules/twitter/widget.go | 16 ++++++++-------- 5 files changed, 46 insertions(+), 27 deletions(-) create mode 100644 modules/twitter/settings.go diff --git a/main.go b/main.go index c7a59392..467d15a3 100644 --- a/main.go +++ b/main.go @@ -304,7 +304,8 @@ func makeWidget(app *tview.Application, pages *tview.Pages, widgetName string) w settings := trello.NewSettingsFromYAML(wtf.Config) widget = trello.NewWidget(app, settings) case "twitter": - widget = twitter.NewWidget(app, pages) + settings := twitter.NewSettingsFromYAML(wtf.Config) + widget = twitter.NewWidget(app, pages, settings) case "victorops": widget = victorops.NewWidget(app) case "weather": diff --git a/modules/twitter/client.go b/modules/twitter/client.go index e03a6a9c..affe0a20 100644 --- a/modules/twitter/client.go +++ b/modules/twitter/client.go @@ -3,10 +3,7 @@ package twitter import ( "encoding/json" "fmt" - "os" "strconv" - - "github.com/wtfutil/wtf/wtf" ) /* NOTE: Currently single application ONLY @@ -22,15 +19,14 @@ type Client struct { } // NewClient creates and returns a new Twitter client -func NewClient() *Client { +func NewClient(settings *Settings) *Client { client := Client{ - apiBase: "https://api.twitter.com/1.1/", - count: wtf.Config.UInt("wtf.mods.twitter.count", 5), - screenName: "", + apiBase: "https://api.twitter.com/1.1/", + count: settings.count, + screenName: "", + bearerToken: settings.bearerToken, } - client.loadAPICredentials() - return &client } @@ -65,10 +61,3 @@ func (client *Client) tweets() (tweets []Tweet, err error) { return } - -func (client *Client) loadAPICredentials() { - client.bearerToken = wtf.Config.UString( - "wtf.mods.twitter.bearerToken", - os.Getenv("WTF_TWITTER_BEARER_TOKEN"), - ) -} diff --git a/modules/twitter/request.go b/modules/twitter/request.go index ec5406d3..e20a306c 100644 --- a/modules/twitter/request.go +++ b/modules/twitter/request.go @@ -13,8 +13,7 @@ func Request(bearerToken string, apiURL string) ([]byte, error) { } // Expected authorization format for single-application twitter dev accounts - req.Header.Add("Authorization", - fmt.Sprintf("Bearer %s", bearerToken)) + req.Header.Add("Authorization", fmt.Sprintf("Bearer %s", bearerToken)) client := &http.Client{} resp, err := client.Do(req) diff --git a/modules/twitter/settings.go b/modules/twitter/settings.go new file mode 100644 index 00000000..7b139d6e --- /dev/null +++ b/modules/twitter/settings.go @@ -0,0 +1,30 @@ +package twitter + +import ( + "os" + + "github.com/olebedev/config" + "github.com/wtfutil/wtf/cfg" +) + +type Settings struct { + common *cfg.Common + + bearerToken string + count int + screenNames []interface{} +} + +func NewSettingsFromYAML(ymlConfig *config.Config) *Settings { + localConfig, _ := ymlConfig.Get("wtf.mods.twitter") + + settings := Settings{ + common: cfg.NewCommonSettingsFromYAML(ymlConfig), + + bearerToken: localConfig.UString("bearerToken", os.Getenv("WTF_TWITTER_BEARER_TOKEN")), + count: localConfig.UInt("count", 5), + screenNames: localConfig.UList("screenName"), + } + + return &settings +} diff --git a/modules/twitter/widget.go b/modules/twitter/widget.go index afdefa7e..f7dad81f 100644 --- a/modules/twitter/widget.go +++ b/modules/twitter/widget.go @@ -27,18 +27,20 @@ type Widget struct { wtf.MultiSourceWidget wtf.TextWidget - client *Client - idx int - sources []string + client *Client + idx int + settings *Settings + sources []string } -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), MultiSourceWidget: wtf.NewMultiSourceWidget("twitter", "screenName", "screenNames"), TextWidget: wtf.NewTextWidget(app, "Twitter", "twitter", true), - idx: 0, + idx: 0, + settings: settings, } widget.HelpfulWidget.SetView(widget.View) @@ -46,7 +48,7 @@ func NewWidget(app *tview.Application, pages *tview.Pages) *Widget { widget.LoadSources() widget.SetDisplayFunction(widget.display) - widget.client = NewClient() + widget.client = NewClient(settings) widget.View.SetBorderPadding(1, 1, 1, 1) widget.View.SetWrap(true) @@ -163,6 +165,4 @@ func (widget *Widget) keyboardIntercept(event *tcell.EventKey) *tcell.EventKey { default: return event } - - return event }