make sure we're not running tea model when running in dev or web mode without task

This commit is contained in:
Robin Olsen
2026-03-11 11:59:10 +01:00
parent 34542a9670
commit 2c90566260

View File

@@ -97,28 +97,31 @@ func (w *Web) Run(ctx context.Context, config Config) error {
serverErr := make(chan error, 1) serverErr := make(chan error, 1)
uiQuitChan := make(chan struct{}) uiQuitChan := make(chan struct{})
screen := tea.NewProgram( var screen *tea.Program
tuiModel{ var screenDone chan struct{}
address: address,
quitChan: uiQuitChan,
},
tea.WithAltScreen(),
)
screenDone := make(chan struct{}) if w.quitChan != nil {
screen = tea.NewProgram(
tuiModel{
address: address,
quitChan: uiQuitChan,
},
tea.WithAltScreen(),
)
go func() { screenDone = make(chan struct{})
defer close(screenDone)
if _, err := screen.Run(); err != nil { go func() {
fmt.Printf("failed to start terminal UI: %s\n", err) defer close(screenDone)
} screen.Run()
}() }()
}
sigChan := make(chan os.Signal, 1) sigChan := make(chan os.Signal, 1)
signal.Notify(sigChan, os.Interrupt, syscall.SIGTERM) signal.Notify(sigChan, os.Interrupt, syscall.SIGTERM)
defer signal.Stop(sigChan) defer signal.Stop(sigChan)
fmt.Println("Starting server at", address+"...")
go func() { go func() {
if err := httpServer.ListenAndServe(); err != nil && if err := httpServer.ListenAndServe(); err != nil &&
!errors.Is(err, http.ErrServerClosed) { !errors.Is(err, http.ErrServerClosed) {
@@ -138,29 +141,44 @@ func (w *Web) Run(ctx context.Context, config Config) error {
handler.SetSubmitChan(w.submitChan) handler.SetSubmitChan(w.submitChan)
} }
if err := browser.Open(address); err != nil {
fmt.Printf("failed to open browser: %s\n", err)
}
var shutdownMsg string var shutdownMsg string
select { if w.quitChan != nil {
case <-w.quitChan:
shutdownMsg = "Task completed! Ending task and server..." if err := browser.Open(address); err != nil {
case <-uiQuitChan: fmt.Printf("failed to open browser: %s\n", err)
shutdownMsg = "Quit key pressed. Ending task and server..." }
case sig := <-sigChan: select {
shutdownMsg = fmt.Sprintf("Received signal %s. Ending task and server...", sig) case <-w.quitChan:
case <-ctx.Done(): shutdownMsg = "Task completed! Ending task and server..."
shutdownMsg = "Context cancelled. Ending task and server..." case <-uiQuitChan:
case err := <-serverErr: shutdownMsg = "Quit key pressed. Ending task and server..."
screen.Quit() case sig := <-sigChan:
<-screenDone shutdownMsg = fmt.Sprintf("Received signal %s. Ending task and server...", sig)
return err case <-ctx.Done():
shutdownMsg = "Context cancelled. Ending task and server..."
case err := <-serverErr:
if screen != nil {
screen.Quit()
<-screenDone
}
return err
}
} else {
select {
case sig := <-sigChan:
shutdownMsg = fmt.Sprintf("Received signal %s. Closing server...", sig)
case <-ctx.Done():
shutdownMsg = "Context cancelled. Closing server..."
case err := <-serverErr:
return err
}
} }
screen.Quit() if screen != nil {
<-screenDone screen.Quit()
<-screenDone
}
fmt.Println(shutdownMsg) fmt.Println(shutdownMsg)