diff --git a/main.go b/main.go index 0fba068c..aaa20b17 100644 --- a/main.go +++ b/main.go @@ -190,7 +190,8 @@ func makeWidget(app *tview.Application, pages *tview.Pages, widgetName string) w cfg := bittrex.NewSettingsFromYAML(wtf.Config) widget = bittrex.NewWidget(app, cfg) case "blockfolio": - widget = blockfolio.NewWidget(app) + cfg := blockfolio.NewSettingsFromYAML(wtf.Config) + widget = blockfolio.NewWidget(app, cfg) case "circleci": cfg := circleci.NewSettingsFromYAML(wtf.Config) widget = circleci.NewWidget(app, cfg) diff --git a/modules/cryptoexchanges/blockfolio/settings.go b/modules/cryptoexchanges/blockfolio/settings.go new file mode 100644 index 00000000..e1f9bb02 --- /dev/null +++ b/modules/cryptoexchanges/blockfolio/settings.go @@ -0,0 +1,33 @@ +package blockfolio + +import ( + "github.com/olebedev/config" + "github.com/wtfutil/wtf/cfg" +) + +type colors struct { + name string + grows string + drop string +} + +type Settings struct { + colors + common *cfg.Common + + deviceToken string + displayHoldings bool +} + +func NewSettingsFromYAML(ymlConfig *config.Config) *Settings { + localConfig, _ := ymlConfig.Get("wtf.mods.todo") + + settings := Settings{ + common: cfg.NewCommonSettingsFromYAML(ymlConfig), + + deviceToken: localConfig.UString("device_token"), + displayHoldings: localConfig.UBool("displayHoldings", true), + } + + return &settings +} diff --git a/modules/cryptoexchanges/blockfolio/widget.go b/modules/cryptoexchanges/blockfolio/widget.go index 3c116c88..25dad3cb 100644 --- a/modules/cryptoexchanges/blockfolio/widget.go +++ b/modules/cryptoexchanges/blockfolio/widget.go @@ -15,12 +15,15 @@ type Widget struct { wtf.TextWidget device_token string + settings *Settings } -func NewWidget(app *tview.Application) *Widget { +func NewWidget(app *tview.Application, settings *Settings) *Widget { widget := Widget{ - TextWidget: wtf.NewTextWidget(app, "Blockfolio", "blockfolio", false), - device_token: wtf.Config.UString("wtf.mods.blockfolio.device_token"), + TextWidget: wtf.NewTextWidget(app, "Blockfolio", "blockfolio", false), + + device_token: settings.deviceToken, + settings: settings, } return &widget @@ -36,31 +39,50 @@ func (widget *Widget) Refresh() { return } - widget.View.SetText(contentFrom(positions)) + content := widget.contentFrom(positions) + widget.View.SetText(content) } /* -------------------- Unexported Functions -------------------- */ -func contentFrom(positions *AllPositionsResponse) string { +func (widget *Widget) contentFrom(positions *AllPositionsResponse) string { res := "" - colorName := wtf.Config.UString("wtf.mods.blockfolio.colors.name") - colorGrows := wtf.Config.UString("wtf.mods.blockfolio.colors.grows") - colorDrop := wtf.Config.UString("wtf.mods.blockfolio.colors.drop") - displayHoldings := wtf.Config.UBool("wtf.mods.blockfolio.displayHoldings") - var totalFiat float32 - totalFiat = 0.0 + totalFiat := float32(0.0) + for i := 0; i < len(positions.PositionList); i++ { - colorForChange := colorGrows + colorForChange := widget.settings.colors.grows + if positions.PositionList[i].TwentyFourHourPercentChangeFiat <= 0 { - colorForChange = colorDrop + colorForChange = widget.settings.colors.drop } + totalFiat += positions.PositionList[i].HoldingValueFiat - if displayHoldings { - res = res + fmt.Sprintf("[%s]%-6s - %5.2f ([%s]%.3fk [%s]%.2f%s)\n", colorName, positions.PositionList[i].Coin, positions.PositionList[i].Quantity, colorForChange, positions.PositionList[i].HoldingValueFiat/1000, colorForChange, positions.PositionList[i].TwentyFourHourPercentChangeFiat, "%") + + if widget.settings.displayHoldings { + res = res + fmt.Sprintf( + "[%s]%-6s - %5.2f ([%s]%.3fk [%s]%.2f%s)\n", + widget.settings.colors.name, + positions.PositionList[i].Coin, + positions.PositionList[i].Quantity, + colorForChange, + positions.PositionList[i].HoldingValueFiat/1000, + colorForChange, + positions.PositionList[i].TwentyFourHourPercentChangeFiat, + "%", + ) } else { - res = res + fmt.Sprintf("[%s]%-6s - %5.2f ([%s]%.2f%s)\n", colorName, positions.PositionList[i].Coin, positions.PositionList[i].Quantity, colorForChange, positions.PositionList[i].TwentyFourHourPercentChangeFiat, "%") + res = res + fmt.Sprintf( + "[%s]%-6s - %5.2f ([%s]%.2f%s)\n", + widget.settings.colors.name, + positions.PositionList[i].Coin, + positions.PositionList[i].Quantity, + colorForChange, + positions.PositionList[i].TwentyFourHourPercentChangeFiat, + "%", + ) } } - if displayHoldings { + + if widget.settings.displayHoldings { res = res + fmt.Sprintf("\n[%s]Total value: $%.3fk", "green", totalFiat/1000) }