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
This commit is contained in:
Jeena 2017-06-08 18:20:55 +02:00
parent 4bb5610f7f
commit f025ad4d2a
3 changed files with 40 additions and 10 deletions

View file

@ -21,6 +21,7 @@ import QtQuick 2.3
import QtQuick.Controls 1.3 import QtQuick.Controls 1.3
import QtQuick.Window 2.0 import QtQuick.Window 2.0
import QtQuick.Layouts 1.1 import QtQuick.Layouts 1.1
import QtQuick.Dialogs 1.1
import Qt.labs.settings 1.0 import Qt.labs.settings 1.0
import TTRSS 1.0 import TTRSS 1.0
@ -210,14 +211,27 @@ ApplicationWindow {
visible: !serverLogin.loggedIn() visible: !serverLogin.loggedIn()
function login() { function login() {
console.log("FOO")
serverLogin.login(serverUrl, userName, password) serverLogin.login(serverUrl, userName, password)
} }
}
MessageDialog {
id: loginErrorAlert
title: "A login error occured"
text: serverLogin.loginError
onAccepted: visible = false
} }
ServerLogin { ServerLogin {
id: serverLogin id: serverLogin
onSessionIdChanged: app.loggedIn() onSessionIdChanged: app.loggedIn()
onLoginErrorChanged: {
console.log("loginError:", loginError)
if(loginError.length > 0) {
loginErrorAlert.visible = true
}
}
} }
Server { Server {

View file

@ -88,23 +88,35 @@ void TinyTinyRSSLogin::reply()
QNetworkReply *reply = qobject_cast<QNetworkReply*>(sender()); QNetworkReply *reply = qobject_cast<QNetworkReply*>(sender());
if (reply) { if (reply) {
if (reply->error() == QNetworkReply::NoError) { if (reply->error() == QNetworkReply::NoError) {
QString jsonString = QString(reply->readAll()); QString jsonString = QString(reply->readAll());
QJsonDocument json = QJsonDocument::fromJson(jsonString.toUtf8()); 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; } else {
settings.setValue("sessionId", mSessionId); mSessionId = json.object().value("content").toObject().value("session_id").toString();
settings.setValue("serverUrl", mServerUrl);
settings.sync();
emit sessionIdChanged(mSessionId);
QSettings settings;
settings.setValue("sessionId", mSessionId);
settings.setValue("serverUrl", mServerUrl);
settings.sync();
}
} else { } else {
int httpStatus = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); mLoginError = "HTTP error: "
//do some error management + reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toString()
qWarning() << "HTTP error: " << httpStatus << " :: " << reply->error(); + " :: "
+ reply->errorString();
qWarning() << mLoginError;
emit loginErrorChanged(mLoginError);
} }
reply->deleteLater(); reply->deleteLater();
} }

View file

@ -30,12 +30,14 @@ class TinyTinyRSSLogin : public QObject
Q_OBJECT Q_OBJECT
Q_PROPERTY(QString sessionId READ sessionId NOTIFY sessionIdChanged) Q_PROPERTY(QString sessionId READ sessionId NOTIFY sessionIdChanged)
Q_PROPERTY(QUrl serverUrl READ serverUrl) Q_PROPERTY(QUrl serverUrl READ serverUrl)
Q_PROPERTY(QString loginError READ loginError NOTIFY loginErrorChanged)
public: public:
TinyTinyRSSLogin(QObject *parent = 0); TinyTinyRSSLogin(QObject *parent = 0);
~TinyTinyRSSLogin(); ~TinyTinyRSSLogin();
QString sessionId() const { return mSessionId; } QString sessionId() const { return mSessionId; }
QUrl serverUrl() const { return mServerUrl; } QUrl serverUrl() const { return mServerUrl; }
QString loginError() const { return mLoginError; }
Q_INVOKABLE bool loggedIn(); Q_INVOKABLE bool loggedIn();
Q_INVOKABLE void login(const QString serverUrl, const QString user, const QString password); Q_INVOKABLE void login(const QString serverUrl, const QString user, const QString password);
@ -43,6 +45,7 @@ public:
signals: signals:
void sessionIdChanged(QString); void sessionIdChanged(QString);
void loginErrorChanged(QString);
private slots: private slots:
void reply(); void reply();
@ -50,6 +53,7 @@ private slots:
private: private:
QString mSessionId; QString mSessionId;
QUrl mServerUrl; QUrl mServerUrl;
QString mLoginError;
QNetworkAccessManager *mNetworkManager; QNetworkAccessManager *mNetworkManager;
}; };