diff --git a/resources/sql.qrc b/resources/sql.qrc
index 80c16307b..4377922a7 100755
--- a/resources/sql.qrc
+++ b/resources/sql.qrc
@@ -20,6 +20,7 @@
sql/db_update_mysql_17_18.sql
sql/db_update_mysql_18_19.sql
sql/db_update_mysql_19_20.sql
+ sql/db_update_mysql_20_21.sql
sql/db_init_sqlite.sql
sql/db_update_sqlite_1_2.sql
@@ -41,5 +42,6 @@
sql/db_update_sqlite_17_18.sql
sql/db_update_sqlite_18_19.sql
sql/db_update_sqlite_19_20.sql
+ sql/db_update_sqlite_20_21.sql
\ No newline at end of file
diff --git a/resources/sql/db_init_mysql.sql b/resources/sql/db_init_mysql.sql
index 85b157eea..1a21593bf 100644
--- a/resources/sql/db_init_mysql.sql
+++ b/resources/sql/db_init_mysql.sql
@@ -12,7 +12,7 @@ CREATE TABLE IF NOT EXISTS Information (
inf_value TEXT NOT NULL
);
-- !
-INSERT INTO Information VALUES (1, 'schema_version', '20');
+INSERT INTO Information VALUES (1, 'schema_version', '21');
-- !
CREATE TABLE IF NOT EXISTS Accounts (
id INTEGER AUTO_INCREMENT PRIMARY KEY,
@@ -85,6 +85,16 @@ CREATE TABLE IF NOT EXISTS GoogleReaderApiAccounts (
FOREIGN KEY (id) REFERENCES Accounts (id)
);
-- !
+CREATE TABLE IF NOT EXISTS FeedlyAccounts (
+ id INTEGER,
+ username TEXT NOT NULL,
+ developer_access_token TEXT,
+ refresh_token TEXT,
+ msg_limit INTEGER NOT NULL DEFAULT -1 CHECK (msg_limit >= -1),
+
+ FOREIGN KEY (id) REFERENCES Accounts (id)
+);
+-- !
DROP TABLE IF EXISTS Categories;
-- !
CREATE TABLE IF NOT EXISTS Categories (
diff --git a/resources/sql/db_init_sqlite.sql b/resources/sql/db_init_sqlite.sql
index 5166dbb43..461d0f0f3 100644
--- a/resources/sql/db_init_sqlite.sql
+++ b/resources/sql/db_init_sqlite.sql
@@ -6,7 +6,7 @@ CREATE TABLE IF NOT EXISTS Information (
inf_value TEXT NOT NULL
);
-- !
-INSERT INTO Information VALUES (1, 'schema_version', '20');
+INSERT INTO Information VALUES (1, 'schema_version', '21');
-- !
CREATE TABLE IF NOT EXISTS Accounts (
id INTEGER PRIMARY KEY,
@@ -79,6 +79,16 @@ CREATE TABLE IF NOT EXISTS GoogleReaderApiAccounts (
FOREIGN KEY (id) REFERENCES Accounts (id)
);
-- !
+CREATE TABLE IF NOT EXISTS FeedlyAccounts (
+ id INTEGER,
+ username TEXT NOT NULL,
+ developer_access_token TEXT,
+ refresh_token TEXT,
+ msg_limit INTEGER NOT NULL DEFAULT -1 CHECK (msg_limit >= -1),
+
+ FOREIGN KEY (id) REFERENCES Accounts (id)
+);
+-- !
DROP TABLE IF EXISTS Categories;
-- !
CREATE TABLE IF NOT EXISTS Categories (
diff --git a/resources/sql/db_update_mysql_20_21.sql b/resources/sql/db_update_mysql_20_21.sql
new file mode 100755
index 000000000..fc8c2f2e1
--- /dev/null
+++ b/resources/sql/db_update_mysql_20_21.sql
@@ -0,0 +1,11 @@
+CREATE TABLE IF NOT EXISTS FeedlyAccounts (
+ id INTEGER,
+ username TEXT NOT NULL,
+ developer_access_token TEXT,
+ refresh_token TEXT,
+ msg_limit INTEGER NOT NULL DEFAULT -1 CHECK (msg_limit >= -1),
+
+ FOREIGN KEY (id) REFERENCES Accounts (id)
+);
+-- !
+UPDATE Information SET inf_value = '21' WHERE inf_key = 'schema_version';
\ No newline at end of file
diff --git a/resources/sql/db_update_sqlite_20_21.sql b/resources/sql/db_update_sqlite_20_21.sql
new file mode 100755
index 000000000..fc8c2f2e1
--- /dev/null
+++ b/resources/sql/db_update_sqlite_20_21.sql
@@ -0,0 +1,11 @@
+CREATE TABLE IF NOT EXISTS FeedlyAccounts (
+ id INTEGER,
+ username TEXT NOT NULL,
+ developer_access_token TEXT,
+ refresh_token TEXT,
+ msg_limit INTEGER NOT NULL DEFAULT -1 CHECK (msg_limit >= -1),
+
+ FOREIGN KEY (id) REFERENCES Accounts (id)
+);
+-- !
+UPDATE Information SET inf_value = '21' WHERE inf_key = 'schema_version';
\ No newline at end of file
diff --git a/src/librssguard/definitions/definitions.h b/src/librssguard/definitions/definitions.h
index 9a5187678..b1e6225b8 100755
--- a/src/librssguard/definitions/definitions.h
+++ b/src/librssguard/definitions/definitions.h
@@ -152,7 +152,7 @@
#define APP_DB_SQLITE_FILE "database.db"
// Keep this in sync with schema versions declared in SQL initialization code.
-#define APP_DB_SCHEMA_VERSION "20"
+#define APP_DB_SCHEMA_VERSION "21"
#define APP_DB_UPDATE_FILE_PATTERN "db_update_%1_%2_%3.sql"
#define APP_DB_COMMENT_SPLIT "-- !\n"
#define APP_DB_NAME_PLACEHOLDER "##"
diff --git a/src/librssguard/miscellaneous/databasefactory.cpp b/src/librssguard/miscellaneous/databasefactory.cpp
index 2d7591a71..079d4154b 100644
--- a/src/librssguard/miscellaneous/databasefactory.cpp
+++ b/src/librssguard/miscellaneous/databasefactory.cpp
@@ -453,11 +453,10 @@ bool DatabaseFactory::sqliteUpdateDatabaseSchema(const QSqlDatabase& database, c
// Increment the version.
qDebugNN << LOGSEC_DB
- << "Updating database schema: '"
- << working_version
- << "' -> '"
- << working_version + 1
- << "'.";
+ << "Updating database schema:"
+ << QUOTE_W_SPACE(working_version)
+ << "->"
+ << QUOTE_W_SPACE_DOT(working_version + 1);
working_version++;
}
diff --git a/src/librssguard/network-web/oauth2service.cpp b/src/librssguard/network-web/oauth2service.cpp
index 075064458..5c3374fa2 100644
--- a/src/librssguard/network-web/oauth2service.cpp
+++ b/src/librssguard/network-web/oauth2service.cpp
@@ -290,12 +290,14 @@ bool OAuth2Service::login() {
}
}
-void OAuth2Service::logout() {
+void OAuth2Service::logout(bool stop_redirection_handler) {
setTokensExpireIn(QDateTime());
setAccessToken(QString());
setRefreshToken(QString());
- m_redirectionHandler->stop();
+ if (stop_redirection_handler) {
+ m_redirectionHandler->stop();
+ }
}
void OAuth2Service::startRefreshTimer() {
diff --git a/src/librssguard/network-web/oauth2service.h b/src/librssguard/network-web/oauth2service.h
index 137fb6f7c..4e0a98405 100644
--- a/src/librssguard/network-web/oauth2service.h
+++ b/src/librssguard/network-web/oauth2service.h
@@ -94,7 +94,7 @@ class OAuth2Service : public QObject {
bool login();
// Removes all state data and stops redirection handler.
- void logout();
+ void logout(bool stop_redirection_handler = true);
private slots:
void startRefreshTimer();
diff --git a/src/librssguard/services/feedly/definitions.h b/src/librssguard/services/feedly/definitions.h
index 1773c9bc8..011440103 100755
--- a/src/librssguard/services/feedly/definitions.h
+++ b/src/librssguard/services/feedly/definitions.h
@@ -7,7 +7,12 @@
#define FEEDLY_API_REDIRECT_URI_PORT 8080
#define FEEDLY_API_SCOPE "https://cloud.feedly.com/subscriptions"
+#if defined(DEBUG)
+#define FEEDLY_API_URL_BASE "https://sandbox7.feedly.com/v3/"
+#else
#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"
diff --git a/src/librssguard/services/feedly/feedlynetwork.cpp b/src/librssguard/services/feedly/feedlynetwork.cpp
index f63eaf49c..169d8cf0e 100755
--- a/src/librssguard/services/feedly/feedlynetwork.cpp
+++ b/src/librssguard/services/feedly/feedlynetwork.cpp
@@ -152,6 +152,9 @@ QString FeedlyNetwork::fullUrl(FeedlyNetwork::Service service) const {
switch (service) {
case FeedlyNetwork::Service::Profile:
return QSL(FEEDLY_API_URL_BASE) + FEEDLY_API_URL_PROFILE;
+
+ default:
+ return FEEDLY_API_URL_BASE;
}
}
diff --git a/src/librssguard/services/feedly/gui/feedlyaccountdetails.cpp b/src/librssguard/services/feedly/gui/feedlyaccountdetails.cpp
index 01b08db48..1da8cfaa6 100755
--- a/src/librssguard/services/feedly/gui/feedlyaccountdetails.cpp
+++ b/src/librssguard/services/feedly/gui/feedlyaccountdetails.cpp
@@ -110,7 +110,7 @@ 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();
+ m_oauth->logout(false);
if (m_oauth->login()) {
m_ui.m_lblTestResult->setStatus(WidgetWithStatus::StatusType::Ok,
diff --git a/src/librssguard/services/feedly/gui/formeditfeedlyaccount.cpp b/src/librssguard/services/feedly/gui/formeditfeedlyaccount.cpp
index b91e57b83..fcf738a57 100755
--- a/src/librssguard/services/feedly/gui/formeditfeedlyaccount.cpp
+++ b/src/librssguard/services/feedly/gui/formeditfeedlyaccount.cpp
@@ -35,6 +35,9 @@ void FormEditFeedlyAccount::apply() {
account()->network()->oauth()->setTokensExpireIn(m_details->m_oauth->tokensExpireIn());
m_details->m_oauth->logout();
m_details->m_oauth->deleteLater();
+
+ // Force live OAuth object to re-start it's
+ account()->network()->oauth()->setRedirectUrl(account()->network()->oauth()->redirectUrl());
}
#endif
diff --git a/src/librssguard/services/inoreader/gui/formeditinoreaderaccount.cpp b/src/librssguard/services/inoreader/gui/formeditinoreaderaccount.cpp
index a8a0e86c3..1f9a804ce 100644
--- a/src/librssguard/services/inoreader/gui/formeditinoreaderaccount.cpp
+++ b/src/librssguard/services/inoreader/gui/formeditinoreaderaccount.cpp
@@ -66,6 +66,6 @@ void FormEditInoreaderAccount::setEditableAccount(ServiceRoot* editable_account)
m_details->m_ui.m_txtAppKey->lineEdit()->setText(m_details->m_oauth->clientSecret());
m_details->m_ui.m_txtRedirectUrl->lineEdit()->setText(m_details->m_oauth->redirectUrl());
- m_details->m_ui.m_txtUsername->lineEdit()->setText(account()->network()->userName());
+ m_details->m_ui.m_txtUsername->lineEdit()->setText(account()->network()->username());
m_details->m_ui.m_spinLimitMessages->setValue(account()->network()->batchSize());
}
diff --git a/src/librssguard/services/inoreader/inoreaderserviceroot.cpp b/src/librssguard/services/inoreader/inoreaderserviceroot.cpp
index bcbaa3a25..01c38b7e5 100644
--- a/src/librssguard/services/inoreader/inoreaderserviceroot.cpp
+++ b/src/librssguard/services/inoreader/inoreaderserviceroot.cpp
@@ -25,7 +25,7 @@ InoreaderServiceRoot::InoreaderServiceRoot(RootItem* parent)
InoreaderServiceRoot::~InoreaderServiceRoot() = default;
void InoreaderServiceRoot::updateTitle() {
- setTitle(m_network->userName() + QSL(" (Inoreader)"));
+ setTitle(TextFactory::extractUsernameFromEmail(m_network->username()) + QSL(" (Inoreader)"));
}
void InoreaderServiceRoot::loadFromDatabase() {
@@ -41,7 +41,7 @@ void InoreaderServiceRoot::saveAccountDataToDatabase(bool creating_new) {
QSqlDatabase database = qApp->database()->connection(metaObject()->className());
if (!creating_new) {
- if (DatabaseQueries::overwriteInoreaderAccount(database, m_network->userName(),
+ if (DatabaseQueries::overwriteInoreaderAccount(database, m_network->username(),
m_network->oauth()->clientId(),
m_network->oauth()->clientSecret(),
m_network->oauth()->redirectUrl(),
@@ -55,7 +55,7 @@ void InoreaderServiceRoot::saveAccountDataToDatabase(bool creating_new) {
else {
if (DatabaseQueries::createInoreaderAccount(database,
accountId(),
- m_network->userName(),
+ m_network->username(),
m_network->oauth()->clientId(),
m_network->oauth()->clientSecret(),
m_network->oauth()->redirectUrl(),
diff --git a/src/librssguard/services/inoreader/network/inoreadernetworkfactory.cpp b/src/librssguard/services/inoreader/network/inoreadernetworkfactory.cpp
index 82b60e9c5..f64c17661 100644
--- a/src/librssguard/services/inoreader/network/inoreadernetworkfactory.cpp
+++ b/src/librssguard/services/inoreader/network/inoreadernetworkfactory.cpp
@@ -40,7 +40,7 @@ OAuth2Service* InoreaderNetworkFactory::oauth() const {
return m_oauth2;
}
-QString InoreaderNetworkFactory::userName() const {
+QString InoreaderNetworkFactory::username() const {
return m_username;
}
diff --git a/src/librssguard/services/inoreader/network/inoreadernetworkfactory.h b/src/librssguard/services/inoreader/network/inoreadernetworkfactory.h
index f15fe4231..7ebb86fc3 100644
--- a/src/librssguard/services/inoreader/network/inoreadernetworkfactory.h
+++ b/src/librssguard/services/inoreader/network/inoreadernetworkfactory.h
@@ -27,7 +27,7 @@ class InoreaderNetworkFactory : public QObject {
OAuth2Service* oauth() const;
void setOauth(OAuth2Service* oauth);
- QString userName() const;
+ QString username() const;
void setUsername(const QString& username);
// Gets/sets the amount of messages to obtain during single feed update.