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.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 {

View file

@ -88,23 +88,35 @@ void TinyTinyRSSLogin::reply()
QNetworkReply *reply = qobject_cast<QNetworkReply*>(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();
}

View file

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