diff --git a/resources/desktop/com.github.rssguard.appdata.xml b/resources/desktop/com.github.rssguard.appdata.xml
index af149a451..98487b569 100644
--- a/resources/desktop/com.github.rssguard.appdata.xml
+++ b/resources/desktop/com.github.rssguard.appdata.xml
@@ -17,11 +17,11 @@
Linux version
- https://github.com/martinrotter/rssguard/blob/master/resources/screenshots/screenshot-linux.png?raw=true
+ https://github.com/martinrotter/rssguard/blob/master/resources/docs/images/screenshot-linux.png?raw=true
Windows version
- https://github.com/martinrotter/rssguard/blob/master/resources/screenshots/screenshot-windows.png?raw=true
+ https://github.com/martinrotter/rssguard/blob/master/resources/docs/images/screenshot-windows.png?raw=true
https://github.com/martinrotter/rssguard
@@ -30,7 +30,7 @@
https://martinrotter.github.io/donate/
-
+
none
diff --git a/resources/screenshots/screenshot-linux.png b/resources/docs/images/screenshot-linux.png
similarity index 100%
rename from resources/screenshots/screenshot-linux.png
rename to resources/docs/images/screenshot-linux.png
diff --git a/resources/screenshots/screenshot-windows.png b/resources/docs/images/screenshot-windows.png
similarity index 100%
rename from resources/screenshots/screenshot-windows.png
rename to resources/docs/images/screenshot-windows.png
diff --git a/resources/scripts/7za b/resources/scripts/7za
index 9c10723bf..47f412575 160000
--- a/resources/scripts/7za
+++ b/resources/scripts/7za
@@ -1 +1 @@
-Subproject commit 9c10723bfbaf6cb85107d6ee16e0324e9e487749
+Subproject commit 47f4125753452eff8800dbd6600c5a05540b15d9
diff --git a/resources/sql/db_init_mysql.sql b/resources/sql/db_init_mysql.sql
index 1a21593bf..9acd6e3d0 100644
--- a/resources/sql/db_init_mysql.sql
+++ b/resources/sql/db_init_mysql.sql
@@ -91,6 +91,7 @@ CREATE TABLE IF NOT EXISTS FeedlyAccounts (
developer_access_token TEXT,
refresh_token TEXT,
msg_limit INTEGER NOT NULL DEFAULT -1 CHECK (msg_limit >= -1),
+ update_only_unread INTEGER(1) NOT NULL DEFAULT 0 CHECK (update_only_unread >= 0 AND update_only_unread <= 1),
FOREIGN KEY (id) REFERENCES Accounts (id)
);
diff --git a/resources/sql/db_init_sqlite.sql b/resources/sql/db_init_sqlite.sql
index 461d0f0f3..680aa856e 100644
--- a/resources/sql/db_init_sqlite.sql
+++ b/resources/sql/db_init_sqlite.sql
@@ -85,6 +85,7 @@ CREATE TABLE IF NOT EXISTS FeedlyAccounts (
developer_access_token TEXT,
refresh_token TEXT,
msg_limit INTEGER NOT NULL DEFAULT -1 CHECK (msg_limit >= -1),
+ update_only_unread INTEGER(1) NOT NULL DEFAULT 0 CHECK (update_only_unread >= 0 AND update_only_unread <= 1),
FOREIGN KEY (id) REFERENCES Accounts (id)
);
diff --git a/resources/sql/db_update_mysql_20_21.sql b/resources/sql/db_update_mysql_20_21.sql
index fc8c2f2e1..ed41302db 100755
--- a/resources/sql/db_update_mysql_20_21.sql
+++ b/resources/sql/db_update_mysql_20_21.sql
@@ -4,6 +4,7 @@ CREATE TABLE IF NOT EXISTS FeedlyAccounts (
developer_access_token TEXT,
refresh_token TEXT,
msg_limit INTEGER NOT NULL DEFAULT -1 CHECK (msg_limit >= -1),
+ update_only_unread INTEGER(1) NOT NULL DEFAULT 0 CHECK (update_only_unread >= 0 AND update_only_unread <= 1),
FOREIGN KEY (id) REFERENCES Accounts (id)
);
diff --git a/resources/sql/db_update_sqlite_20_21.sql b/resources/sql/db_update_sqlite_20_21.sql
index fc8c2f2e1..ed41302db 100755
--- a/resources/sql/db_update_sqlite_20_21.sql
+++ b/resources/sql/db_update_sqlite_20_21.sql
@@ -4,6 +4,7 @@ CREATE TABLE IF NOT EXISTS FeedlyAccounts (
developer_access_token TEXT,
refresh_token TEXT,
msg_limit INTEGER NOT NULL DEFAULT -1 CHECK (msg_limit >= -1),
+ update_only_unread INTEGER(1) NOT NULL DEFAULT 0 CHECK (update_only_unread >= 0 AND update_only_unread <= 1),
FOREIGN KEY (id) REFERENCES Accounts (id)
);
diff --git a/src/librssguard/miscellaneous/databasequeries.cpp b/src/librssguard/miscellaneous/databasequeries.cpp
index 21319f5bb..6b08102b0 100755
--- a/src/librssguard/miscellaneous/databasequeries.cpp
+++ b/src/librssguard/miscellaneous/databasequeries.cpp
@@ -1846,16 +1846,18 @@ bool DatabaseQueries::overwriteOwnCloudAccount(const QSqlDatabase& db, const QSt
bool DatabaseQueries::createFeedlyAccount(const QSqlDatabase& db, const QString& username,
const QString& developer_access_token, const QString& refresh_token,
- int batch_size, int account_id) {
+ int batch_size, bool download_only_unread_messages,
+ int account_id) {
QSqlQuery q(db);
- q.prepare("INSERT INTO FeedlyAccounts (id, username, developer_access_token, refresh_token, msg_limit) "
- "VALUES (:id, :username, :developer_access_token, :refresh_token, :msg_limit);");
+ q.prepare("INSERT INTO FeedlyAccounts (id, username, developer_access_token, refresh_token, msg_limit, update_only_unread) "
+ "VALUES (:id, :username, :developer_access_token, :refresh_token, :msg_limit, :update_only_unread);");
q.bindValue(QSL(":id"), account_id);
q.bindValue(QSL(":username"), username);
q.bindValue(QSL(":developer_access_token"), developer_access_token);
q.bindValue(QSL(":refresh_token"), refresh_token);
q.bindValue(QSL(":msg_limit"), batch_size <= 0 ? FEEDLY_UNLIMITED_BATCH_SIZE : batch_size);
+ q.bindValue(QSL(":update_only_unread"), download_only_unread_messages ? 1 : 0);
if (q.exec()) {
return true;
@@ -1870,18 +1872,21 @@ bool DatabaseQueries::createFeedlyAccount(const QSqlDatabase& db, const QString&
bool DatabaseQueries::overwriteFeedlyAccount(const QSqlDatabase& db, const QString& username,
const QString& developer_access_token, const QString& refresh_token,
- int batch_size, int account_id) {
+ int batch_size, bool download_only_unread_messages,
+ int account_id) {
QSqlQuery query(db);
query.prepare("UPDATE FeedlyAccounts "
"SET username = :username, developer_access_token = :developer_access_token, "
- "refresh_token = :refresh_token, msg_limit = :msg_limit "
+ "refresh_token = :refresh_token, msg_limit = :msg_limit, "
+ "update_only_unread = :update_only_unread "
"WHERE id = :id;");
query.bindValue(QSL(":id"), account_id);
query.bindValue(QSL(":username"), username);
query.bindValue(QSL(":developer_access_token"), developer_access_token);
query.bindValue(QSL(":refresh_token"), refresh_token);
query.bindValue(QSL(":msg_limit"), batch_size <= 0 ? FEEDLY_UNLIMITED_BATCH_SIZE : batch_size);
+ query.bindValue(QSL(":update_only_unread"), download_only_unread_messages ? 1 : 0);
if (query.exec()) {
return true;
@@ -2628,6 +2633,7 @@ QList DatabaseQueries::getFeedlyAccounts(const QSqlDatabase& db, b
#endif
root->network()->setBatchSize(query.value(4).toInt());
+ root->network()->setDownloadOnlyUnreadMessages(query.value(5).toBool());
root->updateTitle();
fillBaseAccountData(db, root);
diff --git a/src/librssguard/miscellaneous/databasequeries.h b/src/librssguard/miscellaneous/databasequeries.h
index 040f16a6a..fbc57e05c 100644
--- a/src/librssguard/miscellaneous/databasequeries.h
+++ b/src/librssguard/miscellaneous/databasequeries.h
@@ -159,12 +159,14 @@ class DatabaseQueries {
const QString& developer_access_token,
const QString& refresh_token,
int batch_size,
+ bool download_only_unread_messages,
int account_id);
static bool overwriteFeedlyAccount(const QSqlDatabase& db,
const QString& username,
const QString& developer_access_token,
const QString& refresh_token,
int batch_size,
+ bool download_only_unread_messages,
int account_id);
// Greader account.
diff --git a/src/librssguard/services/feedly/definitions.h b/src/librssguard/services/feedly/definitions.h
index 587d58d94..2fdfeb214 100755
--- a/src/librssguard/services/feedly/definitions.h
+++ b/src/librssguard/services/feedly/definitions.h
@@ -2,7 +2,8 @@
#define FEEDLY_DEFINITIONS_H
#define FEEDLY_UNLIMITED_BATCH_SIZE -1
-#define FEEDLY_MAX_BATCH_SIZE 999
+#define FEEDLY_DEFAULT_BATCH_SIZE 20
+#define FEEDLY_MAX_BATCH_SIZE 500
#define FEEDLY_GENERATE_DAT "https://feedly.com/v3/auth/dev"
@@ -15,10 +16,11 @@
#define FEEDLY_API_URL_BASE "https://cloud.feedly.com/v3/"
#endif
-#define FEEDLY_API_URL_AUTH "auth/auth"
-#define FEEDLY_API_URL_TOKEN "auth/token"
-#define FEEDLY_API_URL_PROFILE "profile"
-#define FEEDLY_API_URL_COLLETIONS "collections"
-#define FEEDLY_API_URL_TAGS "tags"
+#define FEEDLY_API_URL_AUTH "auth/auth"
+#define FEEDLY_API_URL_TOKEN "auth/token"
+#define FEEDLY_API_URL_PROFILE "profile"
+#define FEEDLY_API_URL_COLLETIONS "collections"
+#define FEEDLY_API_URL_TAGS "tags"
+#define FEEDLY_API_URL_STREAM_CONTENTS "streams/contents?streamId=%1"
#endif // FEEDLY_DEFINITIONS_H
diff --git a/src/librssguard/services/feedly/feedlyfeed.cpp b/src/librssguard/services/feedly/feedlyfeed.cpp
index 1e2fd3d4e..72efda71f 100755
--- a/src/librssguard/services/feedly/feedlyfeed.cpp
+++ b/src/librssguard/services/feedly/feedlyfeed.cpp
@@ -16,20 +16,14 @@ FeedlyServiceRoot* FeedlyFeed::serviceRoot() const {
}
QList FeedlyFeed::obtainNewMessages(bool* error_during_obtaining) {
- return {};
+ Feed::Status error = Feed::Status::Normal;
+ QList messages = serviceRoot()->network()->streamContents(customId());
- /*
- Feed::Status error = Feed::Status::Normal;
- QList messages = serviceRoot()->network()->streamContents(getParentServiceRoot(),
- customId(),
- error,
- getParentServiceRoot()->networkProxy());
+ setStatus(error);
- setStatus(error);
+ if (error == Feed::Status::NetworkError || error == Feed::Status::AuthError) {
+ *error_during_obtaining = true;
+ }
- if (error == Feed::Status::NetworkError || error == Feed::Status::AuthError) {
- * error_during_obtaining = true;
- }
-
- return messages;*/
+ return messages;
}
diff --git a/src/librssguard/services/feedly/feedlynetwork.cpp b/src/librssguard/services/feedly/feedlynetwork.cpp
index 0f2597c14..a56e6ba9d 100755
--- a/src/librssguard/services/feedly/feedlynetwork.cpp
+++ b/src/librssguard/services/feedly/feedlynetwork.cpp
@@ -33,7 +33,7 @@ FeedlyNetwork::FeedlyNetwork(QObject* parent)
FEEDLY_API_SCOPE, this)),
#endif
m_username(QString()),
- m_developerAccessToken(QString()), m_batchSize(FEEDLY_UNLIMITED_BATCH_SIZE) {
+ m_developerAccessToken(QString()), m_batchSize(FEEDLY_DEFAULT_BATCH_SIZE), m_downloadOnlyUnreadMessages(false) {
#if defined (FEEDLY_OFFICIAL_SUPPORT)
m_oauth->setRedirectUrl(QString(OAUTH_REDIRECT_URI) + QL1C(':') + QString::number(FEEDLY_API_REDIRECT_URI_PORT));
@@ -44,6 +44,57 @@ FeedlyNetwork::FeedlyNetwork(QObject* parent)
#endif
}
+QList FeedlyNetwork::streamContents(const QString& stream_id) {
+ QString bear = bearer();
+
+ if (bear.isEmpty()) {
+ qCriticalNN << LOGSEC_FEEDLY << "Cannot obtain personal collections, because bearer is empty.";
+ throw NetworkException(QNetworkReply::NetworkError::AuthenticationRequiredError);
+ }
+
+ int timeout = qApp->settings()->value(GROUP(Feeds), SETTING(Feeds::UpdateTimeout)).toInt();
+ QByteArray output;
+ QString continuation;
+ QList messages;
+
+ // We download in batches.
+ do {
+ QString target_url = fullUrl(Service::StreamContents).arg(QString(QUrl::toPercentEncoding(stream_id)));
+
+ if (m_downloadOnlyUnreadMessages) {
+ target_url += QSL("&unreadOnly=true");
+ }
+
+ if (!continuation.isEmpty()) {
+ target_url += QSL("&continuation=%1").arg(continuation);
+ }
+ else if (m_batchSize > 0) {
+ target_url += QSL("&count=%2").arg(QString::number(m_batchSize));
+ }
+
+ auto result = NetworkFactory::performNetworkOperation(target_url,
+ timeout,
+ {},
+ output,
+ QNetworkAccessManager::Operation::GetOperation,
+ { bearerHeader(bear) },
+ false,
+ {},
+ {},
+ m_service->networkProxy());
+
+ messages += decodeStreamContents(output);
+
+ }
+ while (!continuation.isEmpty());
+
+ return messages;
+}
+
+QList FeedlyNetwork::decodeStreamContents(const QByteArray& stream_contents) const {
+ return {};
+}
+
RootItem* FeedlyNetwork::collections(bool obtain_icons) {
QString bear = bearer();
@@ -54,11 +105,11 @@ RootItem* FeedlyNetwork::collections(bool obtain_icons) {
QString target_url = fullUrl(Service::Collections);
int timeout = qApp->settings()->value(GROUP(Feeds), SETTING(Feeds::UpdateTimeout)).toInt();
- QByteArray output_msgs;
+ QByteArray output;
auto result = NetworkFactory::performNetworkOperation(target_url,
timeout,
{},
- output_msgs,
+ output,
QNetworkAccessManager::Operation::GetOperation,
{ bearerHeader(bear) },
false,
@@ -70,7 +121,7 @@ RootItem* FeedlyNetwork::collections(bool obtain_icons) {
throw NetworkException(result.first);
}
- return decodeCollections(output_msgs, obtain_icons, m_service->networkProxy(), timeout);
+ return decodeCollections(output, obtain_icons, m_service->networkProxy(), timeout);
}
RootItem* FeedlyNetwork::decodeCollections(const QByteArray& json, bool obtain_icons,
@@ -190,7 +241,20 @@ QList FeedlyNetwork::tags() {
throw NetworkException(result.first);
}
- return {};
+ QJsonDocument json = QJsonDocument::fromJson(output);
+ QList lbls;
+
+ for (const QJsonValue& tag : json.array()) {
+ const QJsonObject& tag_obj = tag.toObject();
+ QString name_id = tag_obj["id"].toString();
+ QString plain_name = tag_obj["label"].toString();
+ auto* new_lbl = new Label(plain_name, TextFactory::generateColorFromText(name_id));
+
+ new_lbl->setCustomId(name_id);
+ lbls.append(new_lbl);
+ }
+
+ return lbls;
}
QString FeedlyNetwork::username() const {
@@ -278,6 +342,9 @@ QString FeedlyNetwork::fullUrl(FeedlyNetwork::Service service) const {
case Service::Tags:
return QSL(FEEDLY_API_URL_BASE) + FEEDLY_API_URL_TAGS;
+ case Service::StreamContents:
+ return QSL(FEEDLY_API_URL_BASE) + FEEDLY_API_URL_STREAM_CONTENTS;
+
default:
return FEEDLY_API_URL_BASE;
}
@@ -297,6 +364,14 @@ QPair FeedlyNetwork::bearerHeader(const QString& bearer)
return { QString(HTTP_HEADERS_AUTHORIZATION).toLocal8Bit(), bearer.toLocal8Bit() };
}
+bool FeedlyNetwork::downloadOnlyUnreadMessages() const {
+ return m_downloadOnlyUnreadMessages;
+}
+
+void FeedlyNetwork::setDownloadOnlyUnreadMessages(bool download_only_unread_messages) {
+ m_downloadOnlyUnreadMessages = download_only_unread_messages;
+}
+
void FeedlyNetwork::setService(FeedlyServiceRoot* service) {
m_service = service;
}
diff --git a/src/librssguard/services/feedly/feedlynetwork.h b/src/librssguard/services/feedly/feedlynetwork.h
index 591e01292..e1a3bd51f 100755
--- a/src/librssguard/services/feedly/feedlynetwork.h
+++ b/src/librssguard/services/feedly/feedlynetwork.h
@@ -21,6 +21,7 @@ class FeedlyNetwork : public QObject {
explicit FeedlyNetwork(QObject* parent = nullptr);
// API operations.
+ QList streamContents(const QString& stream_id);
QVariantHash profile(const QNetworkProxy& network_proxy);
QList tags();
RootItem* collections(bool obtain_icons);
@@ -32,6 +33,9 @@ class FeedlyNetwork : public QObject {
QString developerAccessToken() const;
void setDeveloperAccessToken(const QString& dev_acc_token);
+ bool downloadOnlyUnreadMessages() const;
+ void setDownloadOnlyUnreadMessages(bool download_only_unread_messages);
+
int batchSize() const;
void setBatchSize(int batch_size);
@@ -51,11 +55,13 @@ class FeedlyNetwork : public QObject {
enum class Service {
Profile,
Collections,
- Tags
+ Tags,
+ StreamContents
};
QString fullUrl(Service service) const;
QString bearer() const;
+ QList decodeStreamContents(const QByteArray& stream_contents) const;
RootItem* decodeCollections(const QByteArray& json, bool obtain_icons, const QNetworkProxy& proxy, int timeout = 0) const;
QPair bearerHeader(const QString& bearer) const;
@@ -69,6 +75,7 @@ class FeedlyNetwork : public QObject {
QString m_username;
QString m_developerAccessToken;
int m_batchSize;
+ bool m_downloadOnlyUnreadMessages;
};
#endif // FEEDLYNETWORK_H
diff --git a/src/librssguard/services/feedly/feedlyserviceroot.cpp b/src/librssguard/services/feedly/feedlyserviceroot.cpp
index 694da0ddb..748944947 100755
--- a/src/librssguard/services/feedly/feedlyserviceroot.cpp
+++ b/src/librssguard/services/feedly/feedlyserviceroot.cpp
@@ -3,6 +3,8 @@
#include "services/feedly/feedlyserviceroot.h"
#include "definitions/definitions.h"
+#include "exceptions/applicationexception.h"
+#include "exceptions/networkexception.h"
#include "miscellaneous/application.h"
#include "miscellaneous/databasequeries.h"
#include "miscellaneous/iconfactory.h"
@@ -91,6 +93,7 @@ void FeedlyServiceRoot::saveAccountDataToDatabase(bool creating_new) {
{},
#endif
m_network->batchSize(),
+ m_network->downloadOnlyUnreadMessages(),
accountId())) {
updateTitle();
itemChanged(QList() << this);
@@ -106,6 +109,7 @@ void FeedlyServiceRoot::saveAccountDataToDatabase(bool creating_new) {
{},
#endif
m_network->batchSize(),
+ m_network->downloadOnlyUnreadMessages(),
accountId())) {
updateTitle();
}
@@ -113,14 +117,22 @@ void FeedlyServiceRoot::saveAccountDataToDatabase(bool creating_new) {
}
RootItem* FeedlyServiceRoot::obtainNewTreeForSyncIn() const {
- auto tree = m_network->collections(true);
- auto* lblroot = new LabelsNode(tree);
- auto labels = m_network->tags();
+ try {
+ auto tree = m_network->collections(true);
+ auto* lblroot = new LabelsNode(tree);
+ auto labels = m_network->tags();
- lblroot->setChildItems(labels);
- tree->appendChild(lblroot);
+ lblroot->setChildItems(labels);
+ tree->appendChild(lblroot);
- return tree;
+ return tree;
+ }
+ catch (const ApplicationException& ex) {
+ qCriticalNN << LOGSEC_FEEDLY
+ << "Failed to obtain new sync-in tree:"
+ << QUOTE_W_SPACE_DOT(ex.message());
+ return nullptr;
+ }
}
void FeedlyServiceRoot::loadFromDatabase() {
diff --git a/src/librssguard/services/feedly/gui/feedlyaccountdetails.cpp b/src/librssguard/services/feedly/gui/feedlyaccountdetails.cpp
index 2b974dc6c..a5d6c51f9 100755
--- a/src/librssguard/services/feedly/gui/feedlyaccountdetails.cpp
+++ b/src/librssguard/services/feedly/gui/feedlyaccountdetails.cpp
@@ -65,11 +65,12 @@ FeedlyAccountDetails::FeedlyAccountDetails(QWidget* parent) : QWidget(parent) {
m_ui.m_spinLimitMessages->setMinimum(FEEDLY_UNLIMITED_BATCH_SIZE);
m_ui.m_spinLimitMessages->setMaximum(FEEDLY_MAX_BATCH_SIZE);
- m_ui.m_spinLimitMessages->setValue(FEEDLY_UNLIMITED_BATCH_SIZE);
+ m_ui.m_spinLimitMessages->setValue(FEEDLY_DEFAULT_BATCH_SIZE);
setTabOrder(m_ui.m_txtUsername->lineEdit(), m_ui.m_btnGetToken);
setTabOrder(m_ui.m_btnGetToken, m_ui.m_txtDeveloperAccessToken->lineEdit());
- setTabOrder(m_ui.m_txtDeveloperAccessToken->lineEdit(), m_ui.m_spinLimitMessages);
+ setTabOrder(m_ui.m_txtDeveloperAccessToken->lineEdit(), m_ui.m_checkDownloadOnlyUnreadMessages);
+ setTabOrder(m_ui.m_checkDownloadOnlyUnreadMessages, m_ui.m_spinLimitMessages);
setTabOrder(m_ui.m_spinLimitMessages, m_ui.m_btnTestSetup);
onDeveloperAccessTokenChanged();
@@ -116,9 +117,9 @@ void FeedlyAccountDetails::onAuthGranted() {
void FeedlyAccountDetails::performTest(const QNetworkProxy& custom_proxy) {
#if defined (FEEDLY_OFFICIAL_SUPPORT)
- if (m_ui.m_txtDeveloperAccessToken->lineEdit()->text().simplified().isEmpty()) {
- m_oauth->logout(false);
+ m_oauth->logout(false);
+ if (m_ui.m_txtDeveloperAccessToken->lineEdit()->text().simplified().isEmpty()) {
if (m_oauth->login()) {
m_ui.m_lblTestResult->setStatus(WidgetWithStatus::StatusType::Ok,
tr("You are already logged in."),
diff --git a/src/librssguard/services/feedly/gui/feedlyaccountdetails.ui b/src/librssguard/services/feedly/gui/feedlyaccountdetails.ui
index 04fb07ef4..9429ec630 100755
--- a/src/librssguard/services/feedly/gui/feedlyaccountdetails.ui
+++ b/src/librssguard/services/feedly/gui/feedlyaccountdetails.ui
@@ -52,8 +52,18 @@
- -
+
-
+
-
+
+
+ Only download newest X messages per feed
+
+
+ m_spinLimitMessages
+
+
+
-
@@ -67,19 +77,9 @@
- -
-
-
- Only download newest X messages per feed
-
-
- m_spinLimitMessages
-
-
-
- -
+
-
Qt::Vertical
@@ -92,7 +92,7 @@
- -
+
-
-
@@ -110,6 +110,13 @@
+ -
+
+
+ Download only unread messages
+
+
+
diff --git a/src/librssguard/services/feedly/gui/formeditfeedlyaccount.cpp b/src/librssguard/services/feedly/gui/formeditfeedlyaccount.cpp
index f4c9718a8..def54e2dd 100755
--- a/src/librssguard/services/feedly/gui/formeditfeedlyaccount.cpp
+++ b/src/librssguard/services/feedly/gui/formeditfeedlyaccount.cpp
@@ -44,6 +44,7 @@ void FormEditFeedlyAccount::apply() {
#endif
account()->network()->setUsername(m_details->m_ui.m_txtUsername->lineEdit()->text());
+ account()->network()->setDownloadOnlyUnreadMessages(m_details->m_ui.m_checkDownloadOnlyUnreadMessages->isChecked());
account()->network()->setBatchSize(m_details->m_ui.m_spinLimitMessages->value());
account()->network()->setDeveloperAccessToken(m_details->m_ui.m_txtDeveloperAccessToken->lineEdit()->text());
@@ -72,6 +73,7 @@ void FormEditFeedlyAccount::setEditableAccount(ServiceRoot* editable_account) {
m_details->m_ui.m_txtUsername->lineEdit()->setText(account()->network()->username());
m_details->m_ui.m_txtDeveloperAccessToken->lineEdit()->setText(account()->network()->developerAccessToken());
+ m_details->m_ui.m_checkDownloadOnlyUnreadMessages->setChecked(account()->network()->downloadOnlyUnreadMessages());
m_details->m_ui.m_spinLimitMessages->setValue(account()->network()->batchSize());
}