container.go 787 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. package widget
  2. import (
  3. "context"
  4. "sync"
  5. "time"
  6. )
  7. type containerWidgetBase struct {
  8. Widgets Widgets `yaml:"widgets"`
  9. }
  10. func (widget *containerWidgetBase) Update(ctx context.Context) {
  11. var wg sync.WaitGroup
  12. now := time.Now()
  13. for w := range widget.Widgets {
  14. widget := widget.Widgets[w]
  15. if !widget.RequiresUpdate(&now) {
  16. continue
  17. }
  18. wg.Add(1)
  19. go func() {
  20. defer wg.Done()
  21. widget.Update(ctx)
  22. }()
  23. }
  24. wg.Wait()
  25. }
  26. func (widget *containerWidgetBase) SetProviders(providers *Providers) {
  27. for i := range widget.Widgets {
  28. widget.Widgets[i].SetProviders(providers)
  29. }
  30. }
  31. func (widget *containerWidgetBase) RequiresUpdate(now *time.Time) bool {
  32. for i := range widget.Widgets {
  33. if widget.Widgets[i].RequiresUpdate(now) {
  34. return true
  35. }
  36. }
  37. return false
  38. }