forked from Elara6331/itd
		
	
		
			
				
	
	
		
			61 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			61 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package main
 | 
						|
 | 
						|
import (
 | 
						|
	"context"
 | 
						|
	"sync"
 | 
						|
 | 
						|
	"fyne.io/fyne/v2/app"
 | 
						|
	"fyne.io/fyne/v2/container"
 | 
						|
	"go.arsenm.dev/itd/api"
 | 
						|
)
 | 
						|
 | 
						|
func main() {
 | 
						|
	a := app.New()
 | 
						|
	w := a.NewWindow("itgui")
 | 
						|
 | 
						|
	// Create new context for use with the API client
 | 
						|
	ctx, cancel := context.WithCancel(context.Background())
 | 
						|
 | 
						|
	// Connect to ITD API
 | 
						|
	client, err := api.New(api.DefaultAddr)
 | 
						|
	if err != nil {
 | 
						|
		guiErr(err, "Error connecting to ITD", true, w)
 | 
						|
	}
 | 
						|
 | 
						|
	// Create channel to signal that the fs tab has been opened
 | 
						|
	fsOpened := make(chan struct{})
 | 
						|
	fsOnce := &sync.Once{}
 | 
						|
 | 
						|
	// Create app tabs
 | 
						|
	tabs := container.NewAppTabs(
 | 
						|
		container.NewTabItem("Info", infoTab(ctx, client, w)),
 | 
						|
		container.NewTabItem("Motion", motionTab(ctx, client, w)),
 | 
						|
		container.NewTabItem("Notify", notifyTab(ctx, client, w)),
 | 
						|
		container.NewTabItem("FS", fsTab(ctx, client, w, fsOpened)),
 | 
						|
		container.NewTabItem("Time", timeTab(ctx, client, w)),
 | 
						|
		container.NewTabItem("Firmware", firmwareTab(ctx, client, w)),
 | 
						|
	)
 | 
						|
 | 
						|
	metricsTab := graphTab(ctx, client, w)
 | 
						|
	if metricsTab != nil {
 | 
						|
		tabs.Append(container.NewTabItem("Metrics", metricsTab))
 | 
						|
	}
 | 
						|
 | 
						|
	// When a tab is selected
 | 
						|
	tabs.OnSelected = func(ti *container.TabItem) {
 | 
						|
		// If the tab's name is FS
 | 
						|
		if ti.Text == "FS" {
 | 
						|
			// Signal fsOpened only once
 | 
						|
			fsOnce.Do(func() {
 | 
						|
				fsOpened <- struct{}{}
 | 
						|
			})
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	// Cancel context on close
 | 
						|
	w.SetOnClosed(cancel)
 | 
						|
	// Set content and show window
 | 
						|
	w.SetContent(tabs)
 | 
						|
	w.ShowAndRun()
 | 
						|
}
 |