From b24d2bef07a7cf6efa9dcc802e28b9482b80d6aa Mon Sep 17 00:00:00 2001 From: Jeena Date: Sun, 18 Jan 2015 23:45:44 +0100 Subject: [PATCH] better sidebar --- PostListItem.qml | 39 ++++++++++++++++++++++++++++ main.qml | 60 +++++++++++++++++++++++++++----------------- post.cpp | 15 +++++------ post.h | 15 ++++++----- qml.qrc | 1 + tinytinyrsslogin.cpp | 18 +++++++++++++ tinytinyrsslogin.h | 1 + 7 files changed, 113 insertions(+), 36 deletions(-) create mode 100644 PostListItem.qml diff --git a/PostListItem.qml b/PostListItem.qml new file mode 100644 index 0000000..89691ea --- /dev/null +++ b/PostListItem.qml @@ -0,0 +1,39 @@ +import QtQuick 2.0 + +Item { + property ListView listView + height: column.height + + Rectangle { + color: "white" + anchors.margins: 10 + anchors.fill: parent + Column { + id: column + Text { + text: "[" + date.toLocaleString(null, "hh:mm:ss") + "] " + feedTitle + font.pointSize: 9 + color: "gray" + wrapMode: Text.Wrap + } + Text { + text: title + font.pointSize: 12 + wrapMode: Text.Wrap + } + Text { + text: excerpt + font.pointSize: 9 + color: "gray" + wrapMode: Text.Wrap + } + } + } + + MouseArea { + anchors.fill: parent + onClicked: { + listView.currentIndex = index + } + } +} diff --git a/main.qml b/main.qml index b2469e4..f719f47 100644 --- a/main.qml +++ b/main.qml @@ -1,5 +1,6 @@ import QtQuick 2.3 import QtQuick.Controls 1.3 +import QtQuick.Layouts 1.1 import TTRSS 1.0 ApplicationWindow { @@ -10,29 +11,39 @@ ApplicationWindow { menuBar: TheMenuBar {} - Component { - id: delegate - Text { text: title } + function loggedIn() { + login.visible = false; + server.initialize(serverLogin.serverUrl, serverLogin.sessionId); } - ScrollView { - width: parent.width / 3 - anchors.bottom: parent.bottom - anchors.top: parent.top - ListView { - anchors.top: parent.top - anchors.bottom: parent.bottom - spacing: 5 - model: server.posts - delegate: delegate + SplitView { + anchors.fill: parent + orientation: Qt.Horizontal + + ScrollView { + Layout.minimumWidth: 400 + + ListView { + id: listView + anchors.top: parent.top + anchors.bottom: parent.bottom + spacing: 5 + model: server.posts + delegate: PostListItem { + listView: listView + } + highlight: Rectangle { + color: "lightblue" + opacity: 0.5 + focus: true + } + } } - } - Content { - width: parent.width / 3 * 2 - anchors.right: parent.right - anchors.top: parent.top - anchors.bottom: parent.bottom + Content { + Layout.minimumWidth: 50 + Layout.fillWidth: true + } } Login { @@ -47,13 +58,16 @@ ApplicationWindow { ServerLogin { id: serverLogin - onSessionIdChanged: { - login.visible = false; - server.initialize(serverUrl, sessionId); - } + onSessionIdChanged: loggedIn() } Server { id: server } + + Component.onCompleted: { + if(serverLogin.loggedIn()) { + loggedIn(); + } + } } diff --git a/post.cpp b/post.cpp index 35f8d2c..cb6ac15 100644 --- a/post.cpp +++ b/post.cpp @@ -8,17 +8,18 @@ Post::Post(QObject *parent) : QObject(parent) Post::Post(QJsonObject post, QObject *parent) : QObject(parent) { - mTitle = post.value("title").toString(); - mFeedTitle = post.value("feed_title").toString(); - mId = post.value("id").toString(); - mFeedId = post.value("feed_id").toString(); - mAuthor = post.value("author").toString(); - QUrl url(post.value("link").toString()); + mTitle = post.value("title").toString().trimmed(); + mFeedTitle = post.value("feed_title").toString().trimmed(); + mId = post.value("id").toString().trimmed(); + mFeedId = post.value("feed_id").toString().trimmed(); + mAuthor = post.value("author").toString().trimmed(); + QUrl url(post.value("link").toString().trimmed()); mLink = url; QDateTime timestamp; timestamp.setTime_t(post.value("updated").toInt()); mDate = timestamp; - mContent = post.value("content").toString(); + mContent = post.value("content").toString().trimmed(); + mExcerpt = post.value("excerpt").toString().trimmed(); mStarred = post.value("marked").toBool(); mRead = !post.value("unread").toBool(); } diff --git a/post.h b/post.h index 746de4b..a759487 100644 --- a/post.h +++ b/post.h @@ -10,13 +10,14 @@ class Post : public QObject { Q_OBJECT Q_PROPERTY(QString title READ title CONSTANT) - Q_PROPERTY(QString feedTitle READ feedTitle) - Q_PROPERTY(QString id READ id) - Q_PROPERTY(QString feedId READ feedId) + Q_PROPERTY(QString feedTitle READ feedTitle CONSTANT) + Q_PROPERTY(QString id READ id CONSTANT) + Q_PROPERTY(QString feedId READ feedId CONSTANT) Q_PROPERTY(QString author READ author CONSTANT) - Q_PROPERTY(QUrl link READ link) - Q_PROPERTY(QDateTime date READ date) - Q_PROPERTY(QString content READ content) + Q_PROPERTY(QUrl link READ link CONSTANT) + Q_PROPERTY(QDateTime date READ date CONSTANT) + Q_PROPERTY(QString content READ content CONSTANT) + Q_PROPERTY(QString excerpt READ excerpt CONSTANT) Q_PROPERTY(bool starred READ starred NOTIFY starredChanged) Q_PROPERTY(bool read READ read NOTIFY readChanged) @@ -32,6 +33,7 @@ public: QUrl link() const { return mLink; } QDateTime date() const { return mDate; } QString content() const { return mContent; } + QString excerpt() const { return mExcerpt; } bool starred() const { return mStarred; } bool read() const { return mRead; } @@ -50,6 +52,7 @@ private: QUrl mLink; QDateTime mDate; QString mContent; + QString mExcerpt; bool mStarred; bool mRead; }; diff --git a/qml.qrc b/qml.qrc index 857d910..f92e21f 100644 --- a/qml.qrc +++ b/qml.qrc @@ -4,5 +4,6 @@ TheMenuBar.qml Content.qml Login.qml + PostListItem.qml diff --git a/tinytinyrsslogin.cpp b/tinytinyrsslogin.cpp index e231b34..7af2ef1 100644 --- a/tinytinyrsslogin.cpp +++ b/tinytinyrsslogin.cpp @@ -2,11 +2,16 @@ #include #include #include +#include TinyTinyRSSLogin::TinyTinyRSSLogin(QObject *parent) : QObject(parent) { mNetworkManager = new QNetworkAccessManager(this); + + QSettings settings("net.jeena", "feedmonkey"); + mSessionId = settings.value("sessionId").toString(); + mServerUrl = settings.value("serverUrl").toString(); } TinyTinyRSSLogin::~TinyTinyRSSLogin() @@ -14,6 +19,11 @@ TinyTinyRSSLogin::~TinyTinyRSSLogin() delete mNetworkManager; } +bool TinyTinyRSSLogin::loggedIn() +{ + return !mSessionId.isEmpty(); +} + void TinyTinyRSSLogin::login(const QString serverUrl, const QString user, const QString password) { mServerUrl = QUrl(serverUrl + "/api/"); @@ -39,10 +49,18 @@ void TinyTinyRSSLogin::reply() 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(); + emit sessionIdChanged(mSessionId); + + QSettings settings("net.jeena", "feedmonkey"); + settings.setValue("sessionId", mSessionId); + settings.setValue("serverUrl", mServerUrl); + settings.sync(); + } else { int httpStatus = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); //do some error management diff --git a/tinytinyrsslogin.h b/tinytinyrsslogin.h index 79e037f..178093f 100644 --- a/tinytinyrsslogin.h +++ b/tinytinyrsslogin.h @@ -18,6 +18,7 @@ public: QString sessionId() const { return mSessionId; } QUrl serverUrl() const { return mServerUrl; } + Q_INVOKABLE bool loggedIn(); Q_INVOKABLE void login(const QString serverUrl, const QString user, const QString password); signals: