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: