diff --git a/cmd/application.go b/cmd/application.go index c409d1f..c330a48 100644 --- a/cmd/application.go +++ b/cmd/application.go @@ -13,10 +13,9 @@ import ( ) type application struct { - *tview.Application - cfg *config.Config + *tview.Application pages *tview.Pages flex *tview.Flex guildsTree *guildsTree @@ -29,10 +28,9 @@ type application struct { func newApplication(cfg *config.Config) *application { app := &application{ - Application: tview.NewApplication(), - cfg: cfg, + Application: tview.NewApplication(), pages: tview.NewPages(), flex: tview.NewFlex(), guildsTree: newGuildsTree(cfg), @@ -80,6 +78,16 @@ func (a *application) run(token string) error { return nil } +func (a *application) quit() { + if discordState != nil { + if err := discordState.Close(); err != nil { + slog.Error("failed to close the session", "err", err) + } + } + + a.Stop() +} + func (a *application) init() { a.pages.Clear() a.flex.Clear() @@ -98,13 +106,8 @@ func (a *application) init() { func (a *application) onInputCapture(event *tcell.EventKey) *tcell.EventKey { switch event.Name() { case a.cfg.Keys.Quit: - if discordState != nil { - if err := discordState.Close(); err != nil { - slog.Error("failed to close the session", "err", err) - } - } - - a.Stop() + a.quit() + return nil case "Ctrl+C": // https://github.com/ayn2op/tview/blob/a64fc48d7654432f71922c8b908280cdb525805c/application.go#L153 return tcell.NewEventKey(tcell.KeyCtrlC, 0, tcell.ModNone) @@ -127,7 +130,7 @@ func (a *application) onFlexInputCapture(event *tcell.EventKey) *tcell.EventKey a.SetFocus(app.messageInput) return nil case a.cfg.Keys.Logout: - a.Stop() + a.quit() if err := keyring.Delete(consts.Name, "token"); err != nil { slog.Error("failed to delete token from keyring", "err", err)