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.