diff --git a/src/librssguard/services/gmail/gui/formeditgmailaccount.cpp b/src/librssguard/services/gmail/gui/formeditgmailaccount.cpp index de03a2496..bd9c3cf25 100644 --- a/src/librssguard/services/gmail/gui/formeditgmailaccount.cpp +++ b/src/librssguard/services/gmail/gui/formeditgmailaccount.cpp @@ -22,10 +22,15 @@ FormEditGmailAccount::FormEditGmailAccount(QWidget* parent) void FormEditGmailAccount::apply() { bool editing_account = !applyInternal(); - // We copy credentials from testing OAuth to live OAuth. - account()->network()->oauth()->setAccessToken(m_details->m_oauth->accessToken()); - account()->network()->oauth()->setRefreshToken(m_details->m_oauth->refreshToken()); - account()->network()->oauth()->setTokensExpireIn(m_details->m_oauth->tokensExpireIn()); + if (!editing_account) { + // We transfer refresh token to avoid the need to login once more, + // then we delete testing OAuth service. + account()->network()->oauth()->setRefreshToken(m_details->m_oauth->refreshToken()); + account()->network()->oauth()->setAccessToken(m_details->m_oauth->accessToken()); + account()->network()->oauth()->setTokensExpireIn(m_details->m_oauth->tokensExpireIn()); + m_details->m_oauth->logout(); + m_details->m_oauth->deleteLater(); + } account()->network()->oauth()->setClientId(m_details->m_ui.m_txtAppId->lineEdit()->text()); account()->network()->oauth()->setClientSecret(m_details->m_ui.m_txtAppKey->lineEdit()->text()); @@ -47,6 +52,7 @@ void FormEditGmailAccount::setEditableAccount(ServiceRoot* editable_account) { FormAccountDetails::setEditableAccount(editable_account); if (m_details->m_oauth != nullptr) { + // We will use live OAuth service for testing. m_details->m_oauth->logout(); m_details->m_oauth->deleteLater(); } diff --git a/src/librssguard/services/gmail/gui/gmailaccountdetails.cpp b/src/librssguard/services/gmail/gui/gmailaccountdetails.cpp index a2b10e9fe..27b78e5a4 100644 --- a/src/librssguard/services/gmail/gui/gmailaccountdetails.cpp +++ b/src/librssguard/services/gmail/gui/gmailaccountdetails.cpp @@ -42,10 +42,10 @@ GmailAccountDetails::GmailAccountDetails(QWidget* parent) m_ui.m_spinLimitMessages->setMinimum(GMAIL_MIN_BATCH_SIZE); m_ui.m_spinLimitMessages->setMaximum(GMAIL_MAX_BATCH_SIZE); - checkUsername(m_ui.m_txtUsername->lineEdit()->text()); + emit m_ui.m_txtUsername->lineEdit()->textChanged(m_ui.m_txtUsername->lineEdit()->text()); + emit m_ui.m_txtAppId->lineEdit()->textChanged(m_ui.m_txtAppId->lineEdit()->text()); + emit m_ui.m_txtAppKey->lineEdit()->textChanged(m_ui.m_txtAppKey->lineEdit()->text()); - m_ui.m_txtAppId->lineEdit()->clear(); - m_ui.m_txtAppKey->lineEdit()->clear(); m_ui.m_txtRedirectUrl->lineEdit()->setText(QString(OAUTH_REDIRECT_URI) + QL1C(':') + QString::number(OAUTH_REDIRECT_URI_PORT)); @@ -54,13 +54,7 @@ GmailAccountDetails::GmailAccountDetails(QWidget* parent) } void GmailAccountDetails::testSetup() { - if (m_oauth->clientId() != m_ui.m_txtAppId->lineEdit()->text() || - m_oauth->clientSecret() != m_ui.m_txtAppKey->lineEdit()->text() || - m_oauth->redirectUrl() != m_ui.m_txtRedirectUrl->lineEdit()->text()) { - // User changed some important settings. Log out. - m_oauth->logout(); - } - + m_oauth->logout(); m_oauth->setClientId(m_ui.m_txtAppId->lineEdit()->text()); m_oauth->setClientSecret(m_ui.m_txtAppKey->lineEdit()->text()); m_oauth->setRedirectUrl(m_ui.m_txtRedirectUrl->lineEdit()->text()); diff --git a/src/librssguard/services/gmail/network/gmailnetworkfactory.cpp b/src/librssguard/services/gmail/network/gmailnetworkfactory.cpp index 3f60a7d45..70c5ba32a 100644 --- a/src/librssguard/services/gmail/network/gmailnetworkfactory.cpp +++ b/src/librssguard/services/gmail/network/gmailnetworkfactory.cpp @@ -135,6 +135,10 @@ void GmailNetworkFactory::initializeOauth() { }); } +void GmailNetworkFactory::setOauth(OAuth2Service* oauth) { + m_oauth2 = oauth; +} + void GmailNetworkFactory::setUsername(const QString& username) { m_username = username; } diff --git a/src/librssguard/services/gmail/network/gmailnetworkfactory.h b/src/librssguard/services/gmail/network/gmailnetworkfactory.h index 3f7ef0c48..460195805 100644 --- a/src/librssguard/services/gmail/network/gmailnetworkfactory.h +++ b/src/librssguard/services/gmail/network/gmailnetworkfactory.h @@ -27,6 +27,7 @@ class GmailNetworkFactory : public QObject { void setService(GmailServiceRoot* service); OAuth2Service* oauth() const; + void setOauth(OAuth2Service* oauth); QString username() const; void setUsername(const QString& username); @@ -62,8 +63,6 @@ class GmailNetworkFactory : public QObject { const QNetworkProxy& custom_proxy); QList decodeLiteMessages(const QString& messages_json_data, const QString& stream_id, QString& next_page_token); - //RootItem* decodeFeedCategoriesData(const QString& categories); - void initializeOauth(); private: diff --git a/src/librssguard/services/inoreader/gui/formeditinoreaderaccount.cpp b/src/librssguard/services/inoreader/gui/formeditinoreaderaccount.cpp index 1caf3a025..a8a0e86c3 100644 --- a/src/librssguard/services/inoreader/gui/formeditinoreaderaccount.cpp +++ b/src/librssguard/services/inoreader/gui/formeditinoreaderaccount.cpp @@ -24,9 +24,13 @@ void FormEditInoreaderAccount::apply() { bool editing_account = !applyInternal(); if (!editing_account) { - // We are creating new account. - m_details->m_oauth->setParent(account()->network()); - account()->network()->setOauth(m_details->m_oauth); + // We transfer refresh token to avoid the need to login once more, + // then we delete testing OAuth service. + account()->network()->oauth()->setRefreshToken(m_details->m_oauth->refreshToken()); + account()->network()->oauth()->setAccessToken(m_details->m_oauth->accessToken()); + account()->network()->oauth()->setTokensExpireIn(m_details->m_oauth->tokensExpireIn()); + m_details->m_oauth->logout(); + m_details->m_oauth->deleteLater(); } account()->network()->oauth()->setClientId(m_details->m_ui.m_txtAppId->lineEdit()->text()); @@ -49,8 +53,7 @@ void FormEditInoreaderAccount::setEditableAccount(ServiceRoot* editable_account) FormAccountDetails::setEditableAccount(editable_account); if (m_details->m_oauth != nullptr) { - // Remove OAuth meant for new account. - // We are load existing account and we will use its OAuth. + // We will use live OAuth service for testing. m_details->m_oauth->logout(); m_details->m_oauth->deleteLater(); } diff --git a/src/librssguard/services/inoreader/gui/inoreaderaccountdetails.cpp b/src/librssguard/services/inoreader/gui/inoreaderaccountdetails.cpp index d28d316ea..e8b6d4180 100755 --- a/src/librssguard/services/inoreader/gui/inoreaderaccountdetails.cpp +++ b/src/librssguard/services/inoreader/gui/inoreaderaccountdetails.cpp @@ -45,7 +45,7 @@ InoreaderAccountDetails::InoreaderAccountDetails(QWidget* parent) m_ui.m_spinLimitMessages->setMinimum(INOREADER_MIN_BATCH_SIZE); m_ui.m_spinLimitMessages->setMaximum(INOREADER_MAX_BATCH_SIZE); - checkUsername(m_ui.m_txtUsername->lineEdit()->text()); + emit m_ui.m_txtUsername->lineEdit()->textChanged(m_ui.m_txtUsername->lineEdit()->text()); m_ui.m_txtAppId->lineEdit()->setText(INOREADER_OAUTH_CLI_ID); m_ui.m_txtAppKey->lineEdit()->setText(INOREADER_OAUTH_CLI_KEY); diff --git a/src/librssguard/services/inoreader/gui/inoreaderaccountdetails.h b/src/librssguard/services/inoreader/gui/inoreaderaccountdetails.h index 70843e733..b1c52c11e 100755 --- a/src/librssguard/services/inoreader/gui/inoreaderaccountdetails.h +++ b/src/librssguard/services/inoreader/gui/inoreaderaccountdetails.h @@ -31,6 +31,9 @@ class InoreaderAccountDetails : public QWidget { private: Ui::InoreaderAccountDetails m_ui; + + // Testing OAuth service. Only for testing. Resulting tokens + // OAuth2Service* m_oauth; };