diff options
author | Tulir Asokan <tulir@maunium.net> | 2018-04-23 12:55:38 +0300 |
---|---|---|
committer | Tulir Asokan <tulir@maunium.net> | 2018-04-23 12:55:38 +0300 |
commit | 9308f4cb47fa7ce2392185ca904ff7b1d11fe1bc (patch) | |
tree | 8de2ca443e66303bb82762eb15063726e87e0234 | |
parent | ee4b0be953bb1e099bd8706a0f8e49fc18f41b6a (diff) |
Show errors in login view. Fixes #14
-rw-r--r-- | ui/view-login.go | 29 | ||||
-rw-r--r-- | ui/widget/form-text-view.go | 44 |
2 files changed, 70 insertions, 3 deletions
diff --git a/ui/view-login.go b/ui/view-login.go index 46e1903..a900870 100644 --- a/ui/view-login.go +++ b/ui/view-login.go @@ -17,6 +17,7 @@ package ui import ( + "maunium.net/go/gomatrix" "maunium.net/go/gomuks/config" "maunium.net/go/gomuks/debug" "maunium.net/go/gomuks/interface" @@ -30,6 +31,7 @@ type LoginView struct { homeserver *widget.AdvancedInputField username *widget.AdvancedInputField password *widget.AdvancedInputField + error *widget.FormTextView matrix ifc.MatrixContainer config *config.Config @@ -65,7 +67,15 @@ func (ui *GomuksUI) NewLoginView() tview.Primitive { ui.loginView = view - return widget.Center(45, 11, ui.loginView) + return widget.Center(45, 13, ui.loginView) +} + +func (view *LoginView) Error(err string) { + if view.error == nil { + view.error = &widget.FormTextView{TextView: tview.NewTextView()} + view.AddFormItem(view.error) + } + view.error.SetText(err) } func (view *LoginView) Login() { @@ -75,6 +85,19 @@ func (view *LoginView) Login() { debug.Printf("Logging into %s as %s...", hs, mxid) view.config.HS = hs - debug.Print("Connect result:", view.matrix.InitClient()) - debug.Print("Login result:", view.matrix.Login(mxid, password)) + err := view.matrix.InitClient() + debug.Print("Init error:", err) + err = view.matrix.Login(mxid, password) + if err != nil { + if httpErr, ok := err.(gomatrix.HTTPError); ok { + if respErr, ok := httpErr.WrappedError.(gomatrix.RespError); ok { + view.Error(respErr.Err) + } else { + view.Error(httpErr.Message) + } + } else { + view.Error("Failed to connect to server.") + } + debug.Print("Login error:", err) + } } diff --git a/ui/widget/form-text-view.go b/ui/widget/form-text-view.go new file mode 100644 index 0000000..5645a35 --- /dev/null +++ b/ui/widget/form-text-view.go @@ -0,0 +1,44 @@ +// gomuks - A terminal Matrix client written in Go. +// Copyright (C) 2018 Tulir Asokan +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see <http://www.gnu.org/licenses/>. + +package widget + +import ( + "maunium.net/go/tcell" + "maunium.net/go/tview" +) + +type FormTextView struct { + *tview.TextView +} + +func (ftv *FormTextView) GetLabel() string { + return "" +} + +func (ftv *FormTextView) SetFormAttributes(label string, labelColor, bgColor, fieldTextColor, fieldBgColor tcell.Color) tview.FormItem { + return ftv +} + +func (ftv *FormTextView) GetFieldWidth() int { + _, _, w, _ := ftv.TextView.GetRect() + return w +} + +func (ftv *FormTextView) SetFinishedFunc(handler func(key tcell.Key)) tview.FormItem { + ftv.SetDoneFunc(handler) + return ftv +} |