diff --git a/src/services/inoreader/definitions.h b/src/services/inoreader/definitions.h
index 4902564bd..8a78f34b1 100755
--- a/src/services/inoreader/definitions.h
+++ b/src/services/inoreader/definitions.h
@@ -25,5 +25,7 @@
#define INOREADER_OAUTH_AUTH_URL "https://www.inoreader.com/oauth2/auth"
#define INOREADER_OAUTH_CLI_ID "1000000604"
#define INOREADER_OAUTH_CLI_KEY "gsStoZ3aAoQJCgQxoFSuXkWI7Sly87yK"
+#define INOREADER_REFRESH_TOKEN_KEY "refresh_token"
+#define INOREADER_ACCESS_TOKEN_KEY "access_token"
#endif // INOREADER_DEFINITIONS_H
diff --git a/src/services/inoreader/gui/formeditinoreaderaccount.ui b/src/services/inoreader/gui/formeditinoreaderaccount.ui
index 3493f9386..b624e4acb 100755
--- a/src/services/inoreader/gui/formeditinoreaderaccount.ui
+++ b/src/services/inoreader/gui/formeditinoreaderaccount.ui
@@ -7,25 +7,44 @@
0
0
400
- 157
+ 180
Dialog
-
- -
-
-
- Qt::Horizontal
-
-
- QDialogButtonBox::Cancel|QDialogButtonBox::Ok
+
+
-
+
+
+ Only download newest X messages per feed
- -
-
+
-
+
+
+
+ 140
+ 16777215
+
+
+
+ = unlimited
+
+
+ -1
+
+
+ 1000
+
+
+ -1
+
+
+
+ -
+
-
@@ -36,9 +55,9 @@
-
-
+
0
- 0
+ 1
@@ -48,6 +67,29 @@
+ -
+
+
+ Qt::Horizontal
+
+
+ QDialogButtonBox::Cancel|QDialogButtonBox::Ok
+
+
+
+ -
+
+
+ Qt::Vertical
+
+
+
+ 20
+ 90
+
+
+
+
@@ -59,6 +101,7 @@
+ m_spinLimitMessages
m_btnTestSetup
diff --git a/src/services/inoreader/network/inoreadernetworkfactory.cpp b/src/services/inoreader/network/inoreadernetworkfactory.cpp
index 90d52a79c..1e7f16eae 100755
--- a/src/services/inoreader/network/inoreadernetworkfactory.cpp
+++ b/src/services/inoreader/network/inoreadernetworkfactory.cpp
@@ -38,7 +38,8 @@ bool InoreaderNetworkFactory::isLoggedIn() const {
}
void InoreaderNetworkFactory::logIn() {
- if (!m_oauth2.expirationAt().isNull() && m_oauth2.expirationAt() <= QDateTime::currentDateTime()) {
+ if (!m_oauth2.expirationAt().isNull() && m_oauth2.expirationAt() <= QDateTime::currentDateTime() && !m_refreshToken.isEmpty()) {
+ // We have some refresh token which expired.
m_oauth2.refreshAccessToken();
}
else {
@@ -73,6 +74,19 @@ void InoreaderNetworkFactory::initializeOauth() {
connect(&m_oauth2, &QOAuth2AuthorizationCodeFlow::statusChanged, [=](QAbstractOAuth::Status status) {
qDebug("Inoreader: Status changed to '%d'.", (int)status);
});
+ connect(oauth_reply_handler, &QOAuthHttpServerReplyHandler::tokensReceived, [this](QVariantMap tokens) {
+ qDebug() << "Inoreader: Tokens received:" << tokens;
+
+ if (tokens.contains(QSL(INOREADER_REFRESH_TOKEN_KEY))) {
+ m_refreshToken = tokens.value(QSL(INOREADER_REFRESH_TOKEN_KEY)).toString();
+ }
+
+ if (tokens.contains(QSL(INOREADER_ACCESS_TOKEN_KEY))) {
+ m_accessToken = tokens.value(QSL(INOREADER_ACCESS_TOKEN_KEY)).toString();
+ }
+
+ emit tokensRefreshed();
+ });
m_oauth2.setModifyParametersFunction([&](QAbstractOAuth::Stage stage, QVariantMap* parameters) {
qDebug() << "Inoreader: Set modify parameters for stage" << (int)stage << "called: \n" << parameters;
});
@@ -85,6 +99,7 @@ void InoreaderNetworkFactory::initializeOauth() {
Q_UNUSED(uri)
qCritical("Inoreader: We have error: '%s'.", qPrintable(error_description));
+ m_accessToken = m_refreshToken = QString();
emit error(error_description);
});
connect(&m_oauth2, &QOAuth2AuthorizationCodeFlow::authorizeWithBrowser, [](const QUrl& url) {
diff --git a/src/services/inoreader/network/inoreadernetworkfactory.h b/src/services/inoreader/network/inoreadernetworkfactory.h
index 359214224..50dd080a1 100755
--- a/src/services/inoreader/network/inoreadernetworkfactory.h
+++ b/src/services/inoreader/network/inoreadernetworkfactory.h
@@ -37,6 +37,7 @@ class InoreaderNetworkFactory : public QObject {
signals:
void accessGranted();
+ void tokensRefreshed();
void error(QString& description);
private:
@@ -44,6 +45,8 @@ class InoreaderNetworkFactory : public QObject {
private:
QOAuth2AuthorizationCodeFlow m_oauth2;
+ QString m_accessToken;
+ QString m_refreshToken;
};
#endif // INOREADERNETWORKFACTORY_H