From 8f358b76800ca73d3fa1ed9cccb7d5a1ca831427 Mon Sep 17 00:00:00 2001 From: Carl Schwan Date: Sun, 22 Nov 2020 11:02:56 +0100 Subject: [PATCH] Immediately display connect errors in the login page This is using a Kirigami.InlineMessage component. --- imports/NeoChat/Page/LoginPage.qml | 22 ++++++++++++++++++++++ qml/main.qml | 2 +- src/controller.cpp | 9 ++++----- src/controller.h | 4 ++++ 4 files changed, 31 insertions(+), 6 deletions(-) diff --git a/imports/NeoChat/Page/LoginPage.qml b/imports/NeoChat/Page/LoginPage.qml index b33f99820..5789606dc 100644 --- a/imports/NeoChat/Page/LoginPage.qml +++ b/imports/NeoChat/Page/LoginPage.qml @@ -19,6 +19,16 @@ Kirigami.ScrollablePage { title: i18n("Login") + header: QQC2.Control { + padding: Kirigami.Units.smallSpacing + contentItem: Kirigami.InlineMessage { + id: inlineMessage + type: Kirigami.MessageType.Error + visible: false + showCloseButton: true + } + } + Kirigami.FormLayout { id: formLayout QQC2.TextField { @@ -51,6 +61,18 @@ Kirigami.ScrollablePage { text: i18n("Login") onClicked: doLogin() } + + Connections { + target: Controller + onErrorOccured: { + if (detail.length !== 0) { + inlineMessage.text = i18n("%1: %2", error, detail); + } else { + inlineMessage.text = error; + } + inlineMessage.visible = true; + } + } } function doLogin() { diff --git a/qml/main.qml b/qml/main.qml index 992cb0d00..c86b89b99 100644 --- a/qml/main.qml +++ b/qml/main.qml @@ -151,7 +151,7 @@ Kirigami.ApplicationWindow { pageStack.replace("qrc:/imports/NeoChat/Page/LoginPage.qml") } - onErrorOccured: showPassiveNotification(error + ": " + detail) + onGlobalErrorOccured: showPassiveNotification(error + ": " + detail) } RoomListModel { diff --git a/src/controller.cpp b/src/controller.cpp index 775b308b6..8d3e1e8db 100644 --- a/src/controller.cpp +++ b/src/controller.cpp @@ -117,17 +117,16 @@ void Controller::loginWithCredentials(QString serverAddr, QString user, QString setActiveConnection(finalConn); }); connect(finalConn, &Connection::networkError, [=](QString error, QString, int, int) { - Q_EMIT errorOccured(i18n("Network Error"), error); + Q_EMIT globalErrorOccured(i18n("Network Error"), error); }); connect(finalConn, &Connection::loginError, [=](QString error, QString) { Q_EMIT errorOccured(i18n("Login Failed"), error); }); - } else { - Q_EMIT errorOccured(i18n("Error connecting to server"), ""); } }); - connect(conn, &Connection::networkError, this, [=](QString error, QString, int, int) { - Q_EMIT errorOccured(i18n("Network Error"), error); + connect(job, &BaseJob::retryScheduled, this, [=](int, Quotient::BaseJob::duration_ms_t) { + Q_EMIT errorOccured(i18n("%1 is not a matrix server or is unreachable", serverUrl.toString()), QString()); + job->abandon(); }); } } diff --git a/src/controller.h b/src/controller.h index 6efc80bba..0318088cb 100644 --- a/src/controller.h +++ b/src/controller.h @@ -88,7 +88,11 @@ private Q_SLOTS: Q_SIGNALS: void busyChanged(); + /// Error occured because of user inputs void errorOccured(QString error, QString detail); + + /// Error occured because of server or bug in NeoChat + void globalErrorOccured(QString error, QString detail); void syncDone(); void connectionAdded(Quotient::Connection *conn); void connectionDropped(Quotient::Connection *conn);