Files
Archduino/internal/tui/dashboard/run.go

47 lines
1.2 KiB
Go

package dashboard
import (
"context"
"fmt"
tea "github.com/charmbracelet/bubbletea"
"github.com/MDietermann/ArduinoArchSetup/internal/engine"
"github.com/MDietermann/ArduinoArchSetup/internal/module"
"github.com/MDietermann/ArduinoArchSetup/internal/tui"
)
// Run displays the dashboard while engine.Run executes the selected modules.
// Returns the engine summary (for writeState) and the top-level error, if any.
func Run(ctx context.Context, reg *module.Registry, state tui.WizardState, halt bool) (engine.Summary, error) {
selected := state.SelectedIDs()
nameByID := make(map[string]string, len(state.Modules))
for _, m := range state.Modules {
nameByID[m.ID] = m.Name
}
m := NewModel(selected, nameByID)
p := tea.NewProgram(m, tea.WithContext(ctx))
reporter := tui.NewTeaReporter(p)
go func() {
summary, err := engine.Run(ctx, reg, engine.RunOptions{
Selected: selected,
HaltOnError: halt,
Reporter: reporter,
})
p.Send(DoneMsg{Summary: summary, Err: err})
}()
if _, err := p.Run(); err != nil {
return engine.Summary{}, fmt.Errorf("tui run: %w", err)
}
var sum engine.Summary
if m.Summary() != nil {
sum = *m.Summary()
}
return sum, m.RunErr()
}