From 5101a426c0a1df9f02db0f7efed53c817cb549cd Mon Sep 17 00:00:00 2001 From: Jeena Date: Sun, 11 Jan 2015 12:45:06 +0100 Subject: [PATCH] added post --- FeedMonkey.pro | 6 ++++-- main.cpp | 5 ++++- main.qml | 9 ++++++++- post.cpp | 20 +++++++++++++++++++ post.h | 44 ++++++++++++++++++++++++++++++++++++++++++ tinytinyrss.cpp | 46 ++++++++++++++++++++++++++++++-------------- tinytinyrss.h | 29 ++++++++++++++++++++-------- tinytinyrsslogin.cpp | 12 ++++++------ tinytinyrsslogin.h | 1 - 9 files changed, 139 insertions(+), 33 deletions(-) create mode 100644 post.cpp create mode 100644 post.h diff --git a/FeedMonkey.pro b/FeedMonkey.pro index 2a1cc89..79527ba 100644 --- a/FeedMonkey.pro +++ b/FeedMonkey.pro @@ -4,7 +4,8 @@ QT += qml quick SOURCES += main.cpp \ tinytinyrss.cpp \ - tinytinyrsslogin.cpp + tinytinyrsslogin.cpp \ + post.cpp RESOURCES += qml.qrc \ html.qrc @@ -25,4 +26,5 @@ OTHER_FILES += \ HEADERS += \ tinytinyrss.h \ - tinytinyrsslogin.h + tinytinyrsslogin.h \ + post.h diff --git a/main.cpp b/main.cpp index 4786772..9610c69 100644 --- a/main.cpp +++ b/main.cpp @@ -5,13 +5,16 @@ #include #include "tinytinyrsslogin.h" +#include "tinytinyrss.h" +#include "post.h" int main(int argc, char *argv[]) { QGuiApplication app(argc, argv); qmlRegisterType("TTRSS", 1, 0, "ServerLogin"); - // qmlRegisterType("TTRSS", 1, 0, "Server"); + qmlRegisterType("TTRSS", 1, 0, "Server"); + qmlRegisterType("TTRSS", 1, 0, "Post"); QQmlApplicationEngine engine; engine.load(QUrl(QStringLiteral("qrc:/main.qml"))); diff --git a/main.qml b/main.qml index 79cc309..3b0df13 100644 --- a/main.qml +++ b/main.qml @@ -28,6 +28,13 @@ ApplicationWindow { ServerLogin { id: serverLogin - onSessionIdChanged: login.visible = false + onSessionIdChanged: { + login.visible = false; + server.initialize(serverUrl. sessionId); + } + } + + Server { + id: server } } diff --git a/post.cpp b/post.cpp new file mode 100644 index 0000000..7552838 --- /dev/null +++ b/post.cpp @@ -0,0 +1,20 @@ +#include "post.h" +#include + +Post::Post(QObject *parent) : QObject(parent), + mStarred(false) +{ + +} + +Post::Post(QJsonDocument post, QObject *parent) : QObject(parent), + mStarred(false) +{ + qDebug() << post; +} + +Post::~Post() +{ + +} + diff --git a/post.h b/post.h new file mode 100644 index 0000000..43ff2d3 --- /dev/null +++ b/post.h @@ -0,0 +1,44 @@ +#ifndef POST_H +#define POST_H + +#include +#include +#include +#include + +class Post : public QObject +{ + Q_OBJECT + Q_PROPERTY(QString title READ title) + Q_PROPERTY(QString author READ author) + Q_PROPERTY(QUrl link READ link) + Q_PROPERTY(QDate date READ date) + Q_PROPERTY(QString content READ content) + Q_PROPERTY(bool starred READ starred NOTIFY starredChanged) + +public: + Post(QObject *parent = 0); + Post(QJsonDocument post, QObject *parent = 0); + ~Post(); + QString title() const { return mTitle; } + QString author() const { return mAuthor; } + QUrl link() const { return mLink; } + QDate date() const { return mDate; } + QString content() const { return mContent; } + bool starred() const { return mStarred; } + +signals: + void starredChanged(bool); + +public slots: + +private: + QString mTitle; + QString mAuthor; + QUrl mLink; + QDate mDate; + QString mContent; + bool mStarred; +}; + +#endif // POST_H diff --git a/tinytinyrss.cpp b/tinytinyrss.cpp index dd3e0cb..6ce937e 100644 --- a/tinytinyrss.cpp +++ b/tinytinyrss.cpp @@ -4,20 +4,27 @@ #include #include -TinyTinyRSS::TinyTinyRSS(QString serverUrl, QString sessionId) +TinyTinyRSS::TinyTinyRSS(QObject *parent) : + QObject(parent) { - this->serverUrl = serverUrl; - this->sessionId = sessionId; + mNetworkManager = new QNetworkAccessManager(this); +} + +void TinyTinyRSS::initialize(const QString serverUrl, const QString sessionId) +{ + mServerUrl = serverUrl; + mSessionId = sessionId; } TinyTinyRSS::~TinyTinyRSS() { - + delete mNetworkManager; } -void TinyTinyRSS::doOperation(QString operation, QVariantMap opts) { +void TinyTinyRSS::doOperation(QString operation, QVariantMap opts) +{ QVariantMap options; - options.insert("sid", this->sessionId); + options.insert("sid", mSessionId); options.insert("op", operation); QMapIterator i(opts); @@ -29,16 +36,27 @@ void TinyTinyRSS::doOperation(QString operation, QVariantMap opts) { QJsonObject jsonobj = QJsonObject::fromVariantMap(options); QJsonDocument json = QJsonDocument(jsonobj); - QNetworkAccessManager *manager = new QNetworkAccessManager(this); - - QUrl url(this->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(replyFinishedOperation(QNetworkReply))); - manager->post(request, json.toBinaryData()); + QNetworkReply *reply = mNetworkManager->post(request, json.toBinaryData()); + connect(reply, SIGNAL(finished()), this, SLOT(reply())); } -void TinyTinyRSS::replyFinishedOperation(QNetworkReply *reply) { - qWarning() << reply; +void TinyTinyRSS::reply() +{ + QNetworkReply *reply = qobject_cast(sender()); + + if (reply) { + if (reply->error() == QNetworkReply::NoError) { + //QJsonDocument json = QJsonDocument::fromBinaryData(reply->readAll()); + //mSessionId = json.toVariant().toMap().value("session_id"); + //emit sessionIdChanged(mSessionId); + } else { + int httpStatus = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); + //do some error management + qWarning() << "HTTP error: " << httpStatus; + } + reply->deleteLater(); + } } diff --git a/tinytinyrss.h b/tinytinyrss.h index 69b4435..04f67d5 100644 --- a/tinytinyrss.h +++ b/tinytinyrss.h @@ -2,25 +2,38 @@ #define TINYTINYRSS_H #include -#include #include #include +#include -class TinyTinyRSS : QObject +#include "post.h" + +class TinyTinyRSS : public QObject { Q_OBJECT + Q_PROPERTY(QList posts READ posts NOTIFY postsChanged) public: - TinyTinyRSS(QString serverUrl, QString sessionId); + TinyTinyRSS(QObject *parent = 0); ~TinyTinyRSS(); - void login(); - void replyFinishedOperation(QNetworkReply *reply); + QList posts() const; + + Q_INVOKABLE void initialize(const QString serverUrl, const QString sessionId); + Q_INVOKABLE void reload(); + +signals: + void postsChanged(QList); + +private slots: + void reply(); private: - QString serverUrl; - QString sessionId; - void doOperation(QString operation, QVariantMap opts); + + QString mServerUrl; + QString mSessionId; + QList mPosts; + QNetworkAccessManager *mNetworkManager; }; #endif // TINYTINYRSS_H diff --git a/tinytinyrsslogin.cpp b/tinytinyrsslogin.cpp index 8766ff9..e9e8b39 100644 --- a/tinytinyrsslogin.cpp +++ b/tinytinyrsslogin.cpp @@ -39,14 +39,14 @@ void TinyTinyRSSLogin::reply() if (reply) { if (reply->error() == QNetworkReply::NoError) { - //read data from reply + QJsonDocument json = QJsonDocument::fromBinaryData(reply->readAll()); + mSessionId = json.toVariant().toMap().value("session_id").toString(); + emit sessionIdChanged(mSessionId); } else { - //get http status code - int httpStatus = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); - //do some error management + int httpStatus = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); + //do some error management + qWarning() << "HTTP error: " << httpStatus; } reply->deleteLater(); } - mSessionId = "1234"; - emit sessionIdChanged(mSessionId); } diff --git a/tinytinyrsslogin.h b/tinytinyrsslogin.h index 914052c..79e037f 100644 --- a/tinytinyrsslogin.h +++ b/tinytinyrsslogin.h @@ -30,7 +30,6 @@ private: QString mSessionId; QUrl mServerUrl; QNetworkAccessManager *mNetworkManager; - }; #endif // TINYTINYRSSLOGIN_H