Show errors in login view. Fixes #14

This commit is contained in:
Tulir Asokan 2018-04-23 12:55:38 +03:00
parent ee4b0be953
commit 9308f4cb47
2 changed files with 70 additions and 3 deletions

View File

@ -17,6 +17,7 @@
package ui package ui
import ( import (
"maunium.net/go/gomatrix"
"maunium.net/go/gomuks/config" "maunium.net/go/gomuks/config"
"maunium.net/go/gomuks/debug" "maunium.net/go/gomuks/debug"
"maunium.net/go/gomuks/interface" "maunium.net/go/gomuks/interface"
@ -30,6 +31,7 @@ type LoginView struct {
homeserver *widget.AdvancedInputField homeserver *widget.AdvancedInputField
username *widget.AdvancedInputField username *widget.AdvancedInputField
password *widget.AdvancedInputField password *widget.AdvancedInputField
error *widget.FormTextView
matrix ifc.MatrixContainer matrix ifc.MatrixContainer
config *config.Config config *config.Config
@ -65,7 +67,15 @@ func (ui *GomuksUI) NewLoginView() tview.Primitive {
ui.loginView = view 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() { func (view *LoginView) Login() {
@ -75,6 +85,19 @@ func (view *LoginView) Login() {
debug.Printf("Logging into %s as %s...", hs, mxid) debug.Printf("Logging into %s as %s...", hs, mxid)
view.config.HS = hs view.config.HS = hs
debug.Print("Connect result:", view.matrix.InitClient()) err := view.matrix.InitClient()
debug.Print("Login result:", view.matrix.Login(mxid, password)) 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)
}
} }

View File

@ -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
}