The main goal was to decouple more things We got devices being looked for in the background and the stream view is like a device now too
54 lines
1.2 KiB
Go
54 lines
1.2 KiB
Go
// Package tui
|
|
package tui
|
|
|
|
import (
|
|
"log/slog"
|
|
|
|
"esdi/services"
|
|
"esdi/tui/internal/controllers"
|
|
|
|
"github.com/rivo/tview"
|
|
)
|
|
|
|
type ControlPanel struct {
|
|
*controllers.Controller
|
|
|
|
DeviceController *controllers.DeviceController
|
|
}
|
|
|
|
func NewControlPanel(logger *slog.Logger) *ControlPanel {
|
|
// NOTE: given the services should not be only for the TUI should this be here?
|
|
baseController := &controllers.Controller{
|
|
Logger: logger,
|
|
App: tview.NewApplication(),
|
|
}
|
|
|
|
// NOTE: create our device service here
|
|
devService := services.NewDeviceService(logger.With("service", "DeviceService"))
|
|
|
|
telemService := services.NewTelemetryService(logger, devService)
|
|
if telemService == nil {
|
|
panic("failed to create the telemetry service")
|
|
}
|
|
|
|
go telemService.FindProvider(telemService.CtxMonitor)
|
|
|
|
return &ControlPanel{
|
|
Controller: baseController,
|
|
DeviceController: controllers.NewDeviceController(baseController, devService, telemService),
|
|
}
|
|
}
|
|
|
|
func (cp *ControlPanel) Run() error {
|
|
if err := cp.DeviceController.Main(); err != nil {
|
|
return err
|
|
}
|
|
|
|
return cp.App.Run()
|
|
}
|
|
|
|
func Run(logger *slog.Logger) error {
|
|
progController := NewControlPanel(logger)
|
|
return progController.Run()
|
|
}
|