stocks.go 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. package widget
  2. import (
  3. "context"
  4. "html/template"
  5. "time"
  6. "github.com/glanceapp/glance/internal/assets"
  7. "github.com/glanceapp/glance/internal/feed"
  8. )
  9. type Markets struct {
  10. widgetBase `yaml:",inline"`
  11. StocksRequests []feed.MarketRequest `yaml:"stocks"`
  12. MarketRequests []feed.MarketRequest `yaml:"markets"`
  13. Sort string `yaml:"sort-by"`
  14. Style string `yaml:"style"`
  15. Markets feed.Markets `yaml:"-"`
  16. }
  17. func (widget *Markets) Initialize() error {
  18. widget.withTitle("Markets").withCacheDuration(time.Hour)
  19. if len(widget.MarketRequests) == 0 {
  20. widget.MarketRequests = widget.StocksRequests
  21. }
  22. return nil
  23. }
  24. func (widget *Markets) Update(ctx context.Context) {
  25. markets, err := feed.FetchMarketsDataFromYahoo(widget.MarketRequests)
  26. if !widget.canContinueUpdateAfterHandlingErr(err) {
  27. return
  28. }
  29. if widget.Sort == "absolute-change" {
  30. markets.SortByAbsChange()
  31. }
  32. widget.Markets = markets
  33. }
  34. func (widget *Markets) Render() template.HTML {
  35. return widget.render(widget, assets.MarketsTemplate)
  36. }