diff --git a/main.go b/main.go index 6fcc09b5..f8094e2a 100644 --- a/main.go +++ b/main.go @@ -226,7 +226,8 @@ func makeWidget(app *tview.Application, pages *tview.Pages, widgetName string) w settings := gitter.NewSettingsFromYAML(wtf.Config) widget = gitter.NewWidget(app, pages, settings) case "gspreadsheets": - widget = gspreadsheets.NewWidget(app) + settings := gspreadsheets.NewSettingsFromYAML(wtf.Config) + widget = gspreadsheets.NewWidget(app, settings) case "hackernews": widget = hackernews.NewWidget(app, pages) case "ipapi": diff --git a/modules/gspreadsheets/client.go b/modules/gspreadsheets/client.go index 12b6caf0..929f9748 100644 --- a/modules/gspreadsheets/client.go +++ b/modules/gspreadsheets/client.go @@ -26,10 +26,10 @@ import ( /* -------------------- Exported Functions -------------------- */ -func Fetch() ([]*sheets.ValueRange, error) { +func (widget *Widget) Fetch() ([]*sheets.ValueRange, error) { ctx := context.Background() - secretPath, _ := wtf.ExpandHomeDir(wtf.Config.UString("wtf.mods.gspreadsheets.secretFile")) + secretPath, _ := wtf.ExpandHomeDir(widget.settings.secretFile) b, err := ioutil.ReadFile(secretPath) if err != nil { @@ -51,14 +51,13 @@ func Fetch() ([]*sheets.ValueRange, error) { return nil, err } - cells := wtf.ToStrs(wtf.Config.UList("wtf.mods.gspreadsheets.cells.addresses")) - documentId := wtf.Config.UString("wtf.mods.gspreadsheets.sheetId") + cells := wtf.ToStrs(widget.settings.cellAddresses) addresses := strings.Join(cells[:], ";") responses := make([]*sheets.ValueRange, len(cells)) for i := 0; i < len(cells); i++ { - resp, err := srv.Spreadsheets.Values.Get(documentId, cells[i]).Do() + resp, err := srv.Spreadsheets.Values.Get(widget.settings.sheetID, cells[i]).Do() if err != nil { log.Fatalf("Error fetching cells %s", addresses) return nil, err diff --git a/modules/gspreadsheets/settings.go b/modules/gspreadsheets/settings.go new file mode 100644 index 00000000..adea7b61 --- /dev/null +++ b/modules/gspreadsheets/settings.go @@ -0,0 +1,36 @@ +package gspreadsheets + +import ( + "github.com/olebedev/config" + "github.com/wtfutil/wtf/cfg" +) + +type colors struct { + values string +} + +type Settings struct { + colors + common *cfg.Common + + cellAddresses []interface{} + cellNames []interface{} + secretFile string + sheetID string +} + +func NewSettingsFromYAML(ymlConfig *config.Config) *Settings { + localConfig, _ := ymlConfig.Get("wtf.mods.gspreadsheets") + + settings := Settings{ + common: cfg.NewCommonSettingsFromYAML(ymlConfig), + + cellNames: localConfig.UList("cells.names"), + secretFile: localConfig.UString("secretFile"), + sheetID: localConfig.UString("sheetId"), + } + + settings.colors.values = localConfig.UString("colors.values", "green") + + return &settings +} diff --git a/modules/gspreadsheets/widget.go b/modules/gspreadsheets/widget.go index c2d9a5ba..448b06f4 100644 --- a/modules/gspreadsheets/widget.go +++ b/modules/gspreadsheets/widget.go @@ -10,11 +10,15 @@ import ( type Widget struct { wtf.TextWidget + + settings *Settings } -func NewWidget(app *tview.Application) *Widget { +func NewWidget(app *tview.Application, settings *Settings) *Widget { widget := Widget{ TextWidget: wtf.NewTextWidget(app, "Google Spreadsheets", "gspreadsheets", false), + + settings: settings, } return &widget @@ -23,7 +27,7 @@ func NewWidget(app *tview.Application) *Widget { /* -------------------- Exported Functions -------------------- */ func (widget *Widget) Refresh() { - cells, _ := Fetch() + cells, _ := widget.Fetch() widget.View.SetText(widget.contentFrom(cells)) } @@ -35,12 +39,11 @@ func (widget *Widget) contentFrom(valueRanges []*sheets.ValueRange) string { return "error 1" } - valuesColor := wtf.Config.UString("wtf.mods.gspreadsheets.colors.values", "green") res := "" - cells := wtf.ToStrs(wtf.Config.UList("wtf.mods.gspreadsheets.cells.names")) + cells := wtf.ToStrs(widget.settings.cellNames) for i := 0; i < len(valueRanges); i++ { - res = res + fmt.Sprintf("%s\t[%s]%s\n", cells[i], valuesColor, valueRanges[i].Values[0][0]) + res = res + fmt.Sprintf("%s\t[%s]%s\n", cells[i], widget.settings.colors.values, valueRanges[i].Values[0][0]) } return res