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  }