From bd1a80af6172cd380a09245e5475bc8e7a9a3508 Mon Sep 17 00:00:00 2001 From: Jeena Date: Sat, 10 Jan 2015 15:06:14 +0100 Subject: [PATCH] sessionIdChanged working --- Login.qml | 8 +++++++- main.cpp | 6 ++++++ tinytinyrss.cpp | 20 -------------------- tinytinyrsslogin.cpp | 40 ++++++++++++++++++++++++++++++---------- tinytinyrsslogin.h | 24 ++++++++++++++++++++---- 5 files changed, 63 insertions(+), 35 deletions(-) diff --git a/Login.qml b/Login.qml index 70ba396..d4703a2 100644 --- a/Login.qml +++ b/Login.qml @@ -1,12 +1,18 @@ import QtQuick 2.0 import QtQuick.Controls 1.2 +import TTRSS 1.0 Rectangle { color: "white" anchors.fill: parent - function login() { + Login { + id: ttrsslogin + onSessionIdChanged: parent.visible = false + } + function login() { + ttrsslogin.login(serverUrl.getText(), userName.getText(), password.getText()) } Column { diff --git a/main.cpp b/main.cpp index 68bab45..36186f4 100644 --- a/main.cpp +++ b/main.cpp @@ -1,11 +1,17 @@ #include #include #include +#include +#include + +#include "tinytinyrsslogin.h" int main(int argc, char *argv[]) { QGuiApplication app(argc, argv); + qmlRegisterType("TTRSS", 1, 0, "Login"); + QQmlApplicationEngine engine; engine.load(QUrl(QStringLiteral("qrc:/main.qml"))); diff --git a/tinytinyrss.cpp b/tinytinyrss.cpp index c545f12..dd3e0cb 100644 --- a/tinytinyrss.cpp +++ b/tinytinyrss.cpp @@ -15,26 +15,6 @@ TinyTinyRSS::~TinyTinyRSS() } -QString TinyTinyRSS::login(QString serverUrl, QString user, QString password) -{ - QVariantMap options; - options.insert("op", "login"); - options.insert("user", user); - options.insert("password", password); - - QJsonObject jsonobj = QJsonObject::fromVariantMap(options); - QJsonDocument json = QJsonDocument(jsonobj); - - QNetworkAccessManager *manager = new QNetworkAccessManager(this); - - QUrl url(serverUrl + "/api/"); - QNetworkRequest request(url); - request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded"); - - QObject::connect(manager, SIGNAL(finished(QNetworkReply)), this, SIGNAL(replyLogin(QNetworkReply))); - manager->post(request, json.toBinaryData()); -} - void TinyTinyRSS::doOperation(QString operation, QVariantMap opts) { QVariantMap options; options.insert("sid", this->sessionId); diff --git a/tinytinyrsslogin.cpp b/tinytinyrsslogin.cpp index d24816e..8766ff9 100644 --- a/tinytinyrsslogin.cpp +++ b/tinytinyrsslogin.cpp @@ -1,12 +1,23 @@ #include "tinytinyrsslogin.h" +#include +#include +#include TinyTinyRSSLogin::TinyTinyRSSLogin(QObject *parent) : QObject(parent) { + mNetworkManager = new QNetworkAccessManager(this); } -void TinyTinyRSSLogin::login(QString serverUrl, QString user, QString password) +TinyTinyRSSLogin::~TinyTinyRSSLogin() { + delete mNetworkManager; +} + +void TinyTinyRSSLogin::login(const QString serverUrl, const QString user, const QString password) +{ + mServerUrl = QUrl(serverUrl + "/api/"); + QVariantMap options; options.insert("op", "login"); options.insert("user", user); @@ -15,18 +26,27 @@ void TinyTinyRSSLogin::login(QString serverUrl, QString user, QString password) QJsonObject jsonobj = QJsonObject::fromVariantMap(options); QJsonDocument json = QJsonDocument(jsonobj); - QNetworkAccessManager *manager = new QNetworkAccessManager(this); - - QUrl url(serverUrl + "/api/"); - QNetworkRequest request(url); + QNetworkRequest request(mServerUrl); request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded"); - QObject::connect(manager, SIGNAL(finished(QNetworkReply)), this, SIGNAL(replyLogin(QNetworkReply))); - manager->post(request, json.toBinaryData()); + QNetworkReply *reply = mNetworkManager->post(request, json.toBinaryData()); + connect(reply, SIGNAL(finished()), this, SLOT(reply())); } -TinyTinyRSSLogin::replyLogin(QNetworkReply reply) +void TinyTinyRSSLogin::reply() { - QString sessionId = "1234"; - this->parent()->loggedIn(QString(sessionId)); + QNetworkReply *reply = qobject_cast(sender()); + + if (reply) { + if (reply->error() == QNetworkReply::NoError) { + //read data from reply + } else { + //get http status code + int httpStatus = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); + //do some error management + } + reply->deleteLater(); + } + mSessionId = "1234"; + emit sessionIdChanged(mSessionId); } diff --git a/tinytinyrsslogin.h b/tinytinyrsslogin.h index be0b9dc..914052c 100644 --- a/tinytinyrsslogin.h +++ b/tinytinyrsslogin.h @@ -2,18 +2,34 @@ #define TINYTINYRSSLOGIN_H #include +#include +#include +#include class TinyTinyRSSLogin : public QObject { Q_OBJECT + Q_PROPERTY(QString sessionId READ sessionId NOTIFY sessionIdChanged) + Q_PROPERTY(QUrl serverUrl READ serverUrl) + public: - explicit TinyTinyRSSLogin(QObject *parent = 0); - login(QString serverUrl, QString user, QString password); + TinyTinyRSSLogin(QObject *parent = 0); + ~TinyTinyRSSLogin(); + QString sessionId() const { return mSessionId; } + QUrl serverUrl() const { return mServerUrl; } + + Q_INVOKABLE void login(const QString serverUrl, const QString user, const QString password); signals: - replyLogin(QNetworkReply reply); + void sessionIdChanged(QString); -public slots: +private slots: + void reply(); + +private: + QString mSessionId; + QUrl mServerUrl; + QNetworkAccessManager *mNetworkManager; };