diff --git a/cmd/run/run.go b/cmd/run/run.go index 345f116..a807c16 100644 --- a/cmd/run/run.go +++ b/cmd/run/run.go @@ -53,7 +53,13 @@ func (r *Cmd) Run() error { go func() { mainFlex = newMainFlex() + if err := <-lf.Error; err != nil { + app.Stop() + log.Fatal(err) + } + if err := openState(<-lf.Token); err != nil { + app.Stop() log.Fatal(err) } @@ -66,7 +72,7 @@ func (r *Cmd) Run() error { } else { mainFlex = newMainFlex() if err := openState(r.Token); err != nil { - log.Fatal(err) + app.Stop() } app.SetRoot(mainFlex, true) diff --git a/ui/login_form.go b/ui/login_form.go index e182d51..51cdb13 100644 --- a/ui/login_form.go +++ b/ui/login_form.go @@ -1,7 +1,7 @@ package ui import ( - "log" + "errors" "github.com/ayn2op/discordo/config" "github.com/diamondburned/arikawa/v3/api" @@ -13,12 +13,14 @@ import ( type LoginForm struct { *tview.Form Token chan string + Error chan error } func NewLoginForm() *LoginForm { lf := &LoginForm{ Form: tview.NewForm(), Token: make(chan string, 1), + Error: make(chan error, 0), } lf.AddInputField("Email", "", 0, nil, nil) @@ -51,7 +53,8 @@ func (lf *LoginForm) onLoginButtonSelected() { // Log in using the provided email and password. lr, err := apiClient.Login(email, password) if err != nil { - log.Fatal(err) + lf.Error <- err + return } // If the account has MFA-enabled, attempt to log in using the provided code. @@ -63,18 +66,20 @@ func (lf *LoginForm) onLoginButtonSelected() { lr, err = apiClient.TOTP(code, lr.Ticket) if err != nil { - log.Fatal(err) + lf.Error <- err + return } } if lr.Token == "" { - log.Fatal("missing token") - } else { - rememberMe := lf.GetFormItem(3).(*tview.Checkbox).IsChecked() - if rememberMe { - go keyring.Set(config.Name, "token", lr.Token) - } - - lf.Token <- lr.Token + lf.Error <- errors.New("Token is missing") + return } + + rememberMe := lf.GetFormItem(3).(*tview.Checkbox).IsChecked() + if rememberMe { + go keyring.Set(config.Name, "token", lr.Token) + } + + lf.Token <- lr.Token }