diff --git a/cmd/spilltea/main.go b/cmd/spilltea/main.go index bafb6ff..218f5af 100644 --- a/cmd/spilltea/main.go +++ b/cmd/spilltea/main.go @@ -137,17 +137,31 @@ func main() { } broker := intercept.NewBroker() m := appUI.New(broker, project.Name, project.Path) - if _, err := tea.NewProgram(m).Run(); err != nil { + final, err := tea.NewProgram(m).Run() + if err != nil { fmt.Fprintf(os.Stderr, "tui: %v\n", err) os.Exit(1) } + if app, ok := final.(appUI.Model); ok { + if ferr := app.FatalErr(); ferr != nil { + fmt.Fprintf(os.Stderr, "error: %v\n", ferr) + os.Exit(1) + } + } return } // Run home + app in a single program to avoid a blank flash on transition. root := rootModel{home: homeUI.New(projectDir)} - if _, err := tea.NewProgram(root).Run(); err != nil { + final, err := tea.NewProgram(root).Run() + if err != nil { fmt.Fprintf(os.Stderr, "tui: %v\n", err) os.Exit(1) } + if r, ok := final.(rootModel); ok { + if ferr := r.FatalErr(); ferr != nil { + fmt.Fprintf(os.Stderr, "error: %v\n", ferr) + os.Exit(1) + } + } } diff --git a/cmd/spilltea/root.go b/cmd/spilltea/root.go index 072c608..c1b435b 100644 --- a/cmd/spilltea/root.go +++ b/cmd/spilltea/root.go @@ -58,3 +58,12 @@ func (m rootModel) View() tea.View { } return m.home.View() } + +func (m rootModel) FatalErr() error { + if m.state == rootStateApp { + if app, ok := m.app.(appUI.Model); ok { + return app.FatalErr() + } + } + return nil +} diff --git a/internal/ui/app/model.go b/internal/ui/app/model.go index b1fde56..78cce01 100644 --- a/internal/ui/app/model.go +++ b/internal/ui/app/model.go @@ -55,6 +55,7 @@ type Model struct { database *db.DB logFile *os.File pluginManager *plugins.Manager + fatalErr error width int height int @@ -135,6 +136,8 @@ func New(broker *intercept.Broker, name, path string) Model { return m } +func (m Model) FatalErr() error { return m.fatalErr } + func (m Model) Init() tea.Cmd { mgr := m.pluginManager return tea.Batch( diff --git a/internal/ui/app/update.go b/internal/ui/app/update.go index 4403c03..3317c33 100644 --- a/internal/ui/app/update.go +++ b/internal/ui/app/update.go @@ -107,16 +107,8 @@ func (m Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) { case proxyPkg.ErrMsg: if msg.Err != nil { log.Printf("proxy error: %v", msg.Err) - return m, tea.Batch( - func() tea.Msg { - return notificationsUI.NotificationMsg{ - Title: "Proxy Error", - Body: msg.Err.Error(), - Kind: notificationsUI.KindError, - } - }, - tea.Quit, - ) + m.fatalErr = msg.Err + return m, tea.Quit } return m, nil