浏览代码

Extract group widget functionality into generic widget container

Svilen Markov 8 月之前
父节点
当前提交
17c8071de9
共有 2 个文件被更改,包括 53 次插入31 次删除
  1. 48 0
      internal/widget/container.go
  2. 5 31
      internal/widget/group.go

+ 48 - 0
internal/widget/container.go

@@ -0,0 +1,48 @@
+package widget
+
+import (
+	"context"
+	"sync"
+	"time"
+)
+
+type containerWidget struct {
+	Widgets Widgets `yaml:"widgets"`
+}
+
+func (widget *containerWidget) Update(ctx context.Context) {
+	var wg sync.WaitGroup
+	now := time.Now()
+
+	for w := range widget.Widgets {
+		widget := widget.Widgets[w]
+
+		if !widget.RequiresUpdate(&now) {
+			continue
+		}
+
+		wg.Add(1)
+		go func() {
+			defer wg.Done()
+			widget.Update(ctx)
+		}()
+	}
+
+	wg.Wait()
+}
+
+func (widget *containerWidget) SetProviders(providers *Providers) {
+	for i := range widget.Widgets {
+		widget.Widgets[i].SetProviders(providers)
+	}
+}
+
+func (widget *containerWidget) RequiresUpdate(now *time.Time) bool {
+	for i := range widget.Widgets {
+		if widget.Widgets[i].RequiresUpdate(now) {
+			return true
+		}
+	}
+
+	return false
+}

+ 5 - 31
internal/widget/group.go

@@ -4,15 +4,14 @@ import (
 	"context"
 	"context"
 	"errors"
 	"errors"
 	"html/template"
 	"html/template"
-	"sync"
 	"time"
 	"time"
 
 
 	"github.com/glanceapp/glance/internal/assets"
 	"github.com/glanceapp/glance/internal/assets"
 )
 )
 
 
 type Group struct {
 type Group struct {
-	widgetBase `yaml:",inline"`
-	Widgets    Widgets `yaml:"widgets"`
+	widgetBase      `yaml:",inline"`
+	containerWidget `yaml:",inline"`
 }
 }
 
 
 func (widget *Group) Initialize() error {
 func (widget *Group) Initialize() error {
@@ -35,40 +34,15 @@ func (widget *Group) Initialize() error {
 }
 }
 
 
 func (widget *Group) Update(ctx context.Context) {
 func (widget *Group) Update(ctx context.Context) {
-	var wg sync.WaitGroup
-	now := time.Now()
-
-	for w := range widget.Widgets {
-		widget := widget.Widgets[w]
-
-		if !widget.RequiresUpdate(&now) {
-			continue
-		}
-
-		wg.Add(1)
-		go func() {
-			defer wg.Done()
-			widget.Update(ctx)
-		}()
-	}
-
-	wg.Wait()
+	widget.containerWidget.Update(ctx)
 }
 }
 
 
 func (widget *Group) SetProviders(providers *Providers) {
 func (widget *Group) SetProviders(providers *Providers) {
-	for i := range widget.Widgets {
-		widget.Widgets[i].SetProviders(providers)
-	}
+	widget.containerWidget.SetProviders(providers)
 }
 }
 
 
 func (widget *Group) RequiresUpdate(now *time.Time) bool {
 func (widget *Group) RequiresUpdate(now *time.Time) bool {
-	for i := range widget.Widgets {
-		if widget.Widgets[i].RequiresUpdate(now) {
-			return true
-		}
-	}
-
-	return false
+	return widget.containerWidget.RequiresUpdate(now)
 }
 }
 
 
 func (widget *Group) Render() template.HTML {
 func (widget *Group) Render() template.HTML {