github.com/wtfutil/wtf@v0.43.0/modules/stocks/finnhub/widget.go (about) 1 package finnhub 2 3 import ( 4 "fmt" 5 6 "github.com/jedib0t/go-pretty/v6/table" 7 "github.com/rivo/tview" 8 "github.com/wtfutil/wtf/view" 9 ) 10 11 // Widget .. 12 type Widget struct { 13 view.TextWidget 14 *Client 15 16 settings *Settings 17 } 18 19 // NewWidget .. 20 func NewWidget(tviewApp *tview.Application, redrawChan chan bool, settings *Settings) *Widget { 21 widget := Widget{ 22 Client: NewClient(settings.symbols, settings.apiKey), 23 TextWidget: view.NewTextWidget(tviewApp, redrawChan, nil, settings.Common), 24 25 settings: settings, 26 } 27 28 return &widget 29 } 30 31 /* -------------------- Exported Functions -------------------- */ 32 33 func (widget *Widget) Refresh() { 34 if widget.Disabled() { 35 return 36 } 37 38 widget.Redraw(widget.content) 39 } 40 41 /* -------------------- Unexported Functions -------------------- */ 42 43 func (widget *Widget) content() (string, string, bool) { 44 quotes, err := widget.Client.Getquote() 45 46 title := widget.CommonSettings().Title 47 t := table.NewWriter() 48 t.AppendHeader(table.Row{"#", "Stock", "Current Price", "Open Price", "Change"}) 49 wrap := false 50 if err != nil { 51 wrap = true 52 } else { 53 for idx, q := range quotes { 54 t.AppendRows([]table.Row{ 55 {idx, q.Stock, q.C, q.O, fmt.Sprintf("%.4f", (q.C-q.O)/q.C)}, 56 }) 57 } 58 } 59 60 return title, t.Render(), wrap 61 }