From 9308f4cb47fa7ce2392185ca904ff7b1d11fe1bc Mon Sep 17 00:00:00 2001 From: Tulir Asokan Date: Mon, 23 Apr 2018 12:55:38 +0300 Subject: Show errors in login view. Fixes #14 --- ui/view-login.go | 29 ++++++++++++++++++++++++++--- ui/widget/form-text-view.go | 44 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 70 insertions(+), 3 deletions(-) create mode 100644 ui/widget/form-text-view.go 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 . + +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 +} -- cgit v1.2.3