From f025ad4d2ae0b54ad0f435873df83232948bb920 Mon Sep 17 00:00:00 2001 From: Jeena Date: Thu, 8 Jun 2017 18:20:55 +0200 Subject: [PATCH] Add feedback on login errors There was no feedback on any login errors when a user provided a wrong url, username, password or a disabled API. This commit adds feedback to the user in this cases. Fixes #15 --- qml/main.qml | 16 +++++++++++++++- src/tinytinyrsslogin.cpp | 30 +++++++++++++++++++++--------- src/tinytinyrsslogin.h | 4 ++++ 3 files changed, 40 insertions(+), 10 deletions(-) diff --git a/qml/main.qml b/qml/main.qml index d1e162a..e08f3d9 100644 --- a/qml/main.qml +++ b/qml/main.qml @@ -21,6 +21,7 @@ import QtQuick 2.3 import QtQuick.Controls 1.3 import QtQuick.Window 2.0 import QtQuick.Layouts 1.1 +import QtQuick.Dialogs 1.1 import Qt.labs.settings 1.0 import TTRSS 1.0 @@ -210,14 +211,27 @@ ApplicationWindow { visible: !serverLogin.loggedIn() function login() { - console.log("FOO") serverLogin.login(serverUrl, userName, password) } + + } + + MessageDialog { + id: loginErrorAlert + title: "A login error occured" + text: serverLogin.loginError + onAccepted: visible = false } ServerLogin { id: serverLogin onSessionIdChanged: app.loggedIn() + onLoginErrorChanged: { + console.log("loginError:", loginError) + if(loginError.length > 0) { + loginErrorAlert.visible = true + } + } } Server { diff --git a/src/tinytinyrsslogin.cpp b/src/tinytinyrsslogin.cpp index f0536f2..78fcd9f 100644 --- a/src/tinytinyrsslogin.cpp +++ b/src/tinytinyrsslogin.cpp @@ -88,23 +88,35 @@ void TinyTinyRSSLogin::reply() QNetworkReply *reply = qobject_cast(sender()); if (reply) { + if (reply->error() == QNetworkReply::NoError) { QString jsonString = QString(reply->readAll()); QJsonDocument json = QJsonDocument::fromJson(jsonString.toUtf8()); - mSessionId = json.object().value("content").toObject().value("session_id").toString(); + if(json.object().value("content").toObject().value("error").toString().length() > 0) { - emit sessionIdChanged(mSessionId); + mLoginError = json.object().value("content").toObject().value("error").toString(); + qWarning() << mLoginError; + emit loginErrorChanged(mLoginError); - QSettings settings; - settings.setValue("sessionId", mSessionId); - settings.setValue("serverUrl", mServerUrl); - settings.sync(); + } else { + mSessionId = json.object().value("content").toObject().value("session_id").toString(); + emit sessionIdChanged(mSessionId); + + QSettings settings; + settings.setValue("sessionId", mSessionId); + settings.setValue("serverUrl", mServerUrl); + settings.sync(); + } } else { - int httpStatus = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); - //do some error management - qWarning() << "HTTP error: " << httpStatus << " :: " << reply->error(); + mLoginError = "HTTP error: " + + reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toString() + + " :: " + + reply->errorString(); + qWarning() << mLoginError; + + emit loginErrorChanged(mLoginError); } reply->deleteLater(); } diff --git a/src/tinytinyrsslogin.h b/src/tinytinyrsslogin.h index 8971f2a..5c21887 100644 --- a/src/tinytinyrsslogin.h +++ b/src/tinytinyrsslogin.h @@ -30,12 +30,14 @@ class TinyTinyRSSLogin : public QObject Q_OBJECT Q_PROPERTY(QString sessionId READ sessionId NOTIFY sessionIdChanged) Q_PROPERTY(QUrl serverUrl READ serverUrl) + Q_PROPERTY(QString loginError READ loginError NOTIFY loginErrorChanged) public: TinyTinyRSSLogin(QObject *parent = 0); ~TinyTinyRSSLogin(); QString sessionId() const { return mSessionId; } QUrl serverUrl() const { return mServerUrl; } + QString loginError() const { return mLoginError; } Q_INVOKABLE bool loggedIn(); Q_INVOKABLE void login(const QString serverUrl, const QString user, const QString password); @@ -43,6 +45,7 @@ public: signals: void sessionIdChanged(QString); + void loginErrorChanged(QString); private slots: void reply(); @@ -50,6 +53,7 @@ private slots: private: QString mSessionId; QUrl mServerUrl; + QString mLoginError; QNetworkAccessManager *mNetworkManager; };