diff --git a/src/librssguard/gui/networkproxydetails.cpp b/src/librssguard/gui/networkproxydetails.cpp new file mode 100755 index 000000000..11c2fd2fd --- /dev/null +++ b/src/librssguard/gui/networkproxydetails.cpp @@ -0,0 +1,39 @@ +// For license of this file, see /LICENSE.md. + +#include "gui/networkproxydetails.h" + +#include "gui/guiutilities.h" + +#include + +NetworkProxyDetails::NetworkProxyDetails(QWidget* parent) : QWidget(parent) { + m_ui.setupUi(this); + GuiUtilities::setLabelAsNotice(*m_ui.m_lblProxyInfo, false); + + connect(m_ui.m_cmbProxyType, static_cast(&QComboBox::currentIndexChanged), this, + &NetworkProxyDetails::onProxyTypeChanged); + connect(m_ui.m_checkShowPassword, &QCheckBox::stateChanged, this, &NetworkProxyDetails::displayProxyPassword); + + m_ui.m_cmbProxyType->addItem(tr("No proxy"), QNetworkProxy::ProxyType::NoProxy); + m_ui.m_cmbProxyType->addItem(tr("System proxy"), QNetworkProxy::ProxyType::DefaultProxy); + m_ui.m_cmbProxyType->addItem(tr("Socks5"), QNetworkProxy::ProxyType::Socks5Proxy); + m_ui.m_cmbProxyType->addItem(tr("Http"), QNetworkProxy::ProxyType::HttpProxy); + + displayProxyPassword(Qt::CheckState::Unchecked); +} + +void NetworkProxyDetails::displayProxyPassword(int state) { + if (state == Qt::CheckState::Checked) { + m_ui.m_txtProxyPassword->setEchoMode(QLineEdit::EchoMode::Normal); + } + else { + m_ui.m_txtProxyPassword->setEchoMode(QLineEdit::EchoMode::PasswordEchoOnEdit); + } +} + +void NetworkProxyDetails::onProxyTypeChanged(int index) { + const QNetworkProxy::ProxyType selected_type = static_cast(m_ui.m_cmbProxyType->itemData(index).toInt()); + const bool is_proxy_selected = selected_type != QNetworkProxy::NoProxy && selected_type != QNetworkProxy::DefaultProxy; + + m_ui.m_proxyDetails->setEnabled(is_proxy_selected); +} diff --git a/src/librssguard/gui/networkproxydetails.h b/src/librssguard/gui/networkproxydetails.h new file mode 100755 index 000000000..30af98668 --- /dev/null +++ b/src/librssguard/gui/networkproxydetails.h @@ -0,0 +1,24 @@ +// For license of this file, see /LICENSE.md. + +#ifndef NETWORKPROXYDETAILS_H +#define NETWORKPROXYDETAILS_H + +#include + +#include "ui_networkproxydetails.h" + +class NetworkProxyDetails : public QWidget { + Q_OBJECT + + public: + explicit NetworkProxyDetails(QWidget* parent = nullptr); + + private slots: + void displayProxyPassword(int state); + void onProxyTypeChanged(int index); + + public: + Ui::NetworkProxyDetails m_ui; +}; + +#endif // NETWORKPROXYDETAILS_H diff --git a/src/librssguard/gui/networkproxydetails.ui b/src/librssguard/gui/networkproxydetails.ui new file mode 100755 index 000000000..2306dc6b0 --- /dev/null +++ b/src/librssguard/gui/networkproxydetails.ui @@ -0,0 +1,194 @@ + + + NetworkProxyDetails + + + + 0 + 0 + 507 + 257 + + + + Form + + + + + + Type + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + m_cmbProxyType + + + + + + + + + + + + + Host + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + m_txtProxyHost + + + + + + + + + true + + + Hostname or IP of your proxy server + + + + + + + Port + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + m_spinProxyPort + + + + + + + true + + + 65535 + + + 80 + + + + + + + + + Username + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + m_txtProxyUsername + + + + + + + true + + + Your username for proxy server authentication + + + + + + + Password + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + m_txtProxyPassword + + + + + + + true + + + QLineEdit::PasswordEchoOnEdit + + + Your password for proxy server authentication + + + + + + + true + + + Display password + + + + + + + Note that these settings are applied only on newly established connections. + + + Qt::AlignCenter + + + true + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + diff --git a/src/librssguard/gui/settings/settingsbrowsermail.cpp b/src/librssguard/gui/settings/settingsbrowsermail.cpp index 63e88cd15..fb73b6bc2 100644 --- a/src/librssguard/gui/settings/settingsbrowsermail.cpp +++ b/src/librssguard/gui/settings/settingsbrowsermail.cpp @@ -3,6 +3,7 @@ #include "gui/settings/settingsbrowsermail.h" #include "gui/guiutilities.h" +#include "gui/networkproxydetails.h" #include "miscellaneous/application.h" #include "miscellaneous/externaltool.h" #include "network-web/silentnetworkaccessmanager.h" @@ -13,12 +14,13 @@ #include SettingsBrowserMail::SettingsBrowserMail(Settings* settings, QWidget* parent) - : SettingsPanel(settings, parent), m_ui(new Ui::SettingsBrowserMail) { + : SettingsPanel(settings, parent), m_proxyDetails(new NetworkProxyDetails(this)), m_ui(new Ui::SettingsBrowserMail) { m_ui->setupUi(this); + m_ui->m_tabBrowserProxy->addTab(m_proxyDetails, tr("Network proxy")); + GuiUtilities::setLabelAsNotice(*m_ui->label, false); GuiUtilities::setLabelAsNotice(*m_ui->m_lblExternalEmailInfo, false); - GuiUtilities::setLabelAsNotice(*m_ui->m_lblProxyInfo, false); GuiUtilities::setLabelAsNotice(*m_ui->m_lblToolInfo, false); #if defined(USE_WEBENGINE) @@ -30,12 +32,12 @@ SettingsBrowserMail::SettingsBrowserMail(Settings* settings, QWidget* parent) m_ui->m_listTools->setHeaderLabels(QStringList() << tr("Executable") << tr("Parameters")); m_ui->m_listTools->header()->setSectionResizeMode(0, QHeaderView::ResizeToContents); - connect(m_ui->m_cmbProxyType, static_cast(&QComboBox::currentIndexChanged), this, + connect(m_proxyDetails->m_ui.m_cmbProxyType, static_cast(&QComboBox::currentIndexChanged), this, &SettingsBrowserMail::dirtifySettings); - connect(m_ui->m_txtProxyHost, &QLineEdit::textChanged, this, &SettingsBrowserMail::dirtifySettings); - connect(m_ui->m_txtProxyPassword, &QLineEdit::textChanged, this, &SettingsBrowserMail::dirtifySettings); - connect(m_ui->m_txtProxyUsername, &QLineEdit::textChanged, this, &SettingsBrowserMail::dirtifySettings); - connect(m_ui->m_spinProxyPort, static_cast(&QSpinBox::valueChanged), this, + connect(m_proxyDetails->m_ui.m_txtProxyHost, &QLineEdit::textChanged, this, &SettingsBrowserMail::dirtifySettings); + connect(m_proxyDetails->m_ui.m_txtProxyPassword, &QLineEdit::textChanged, this, &SettingsBrowserMail::dirtifySettings); + connect(m_proxyDetails->m_ui.m_txtProxyUsername, &QLineEdit::textChanged, this, &SettingsBrowserMail::dirtifySettings); + connect(m_proxyDetails->m_ui.m_spinProxyPort, static_cast(&QSpinBox::valueChanged), this, &SettingsBrowserMail::dirtifySettings); connect(m_ui->m_grpCustomExternalBrowser, &QGroupBox::toggled, this, &SettingsBrowserMail::dirtifySettings); connect(m_ui->m_grpCustomExternalEmail, &QGroupBox::toggled, this, &SettingsBrowserMail::dirtifySettings); @@ -43,9 +45,6 @@ SettingsBrowserMail::SettingsBrowserMail(Settings* settings, QWidget* parent) connect(m_ui->m_txtExternalBrowserExecutable, &QLineEdit::textChanged, this, &SettingsBrowserMail::dirtifySettings); connect(m_ui->m_txtExternalEmailArguments, &QLineEdit::textChanged, this, &SettingsBrowserMail::dirtifySettings); connect(m_ui->m_txtExternalEmailExecutable, &QLineEdit::textChanged, this, &SettingsBrowserMail::dirtifySettings); - connect(m_ui->m_cmbProxyType, static_cast(&QComboBox::currentIndexChanged), this, - &SettingsBrowserMail::onProxyTypeChanged); - connect(m_ui->m_checkShowPassword, &QCheckBox::stateChanged, this, &SettingsBrowserMail::displayProxyPassword); connect(m_ui->m_cmbExternalBrowserPreset, static_cast(&QComboBox::currentIndexChanged), this, &SettingsBrowserMail::changeDefaultBrowserArguments); connect(m_ui->m_btnExternalBrowserExecutable, &QPushButton::clicked, this, &SettingsBrowserMail::selectBrowserExecutable); @@ -90,31 +89,6 @@ void SettingsBrowserMail::selectBrowserExecutable() { } } -void SettingsBrowserMail::displayProxyPassword(int state) { - if (state == Qt::Checked) { - m_ui->m_txtProxyPassword->setEchoMode(QLineEdit::Normal); - } - else { - m_ui->m_txtProxyPassword->setEchoMode(QLineEdit::PasswordEchoOnEdit); - } -} - -void SettingsBrowserMail::onProxyTypeChanged(int index) { - const QNetworkProxy::ProxyType selected_type = static_cast(m_ui->m_cmbProxyType->itemData(index).toInt()); - const bool is_proxy_selected = selected_type != QNetworkProxy::NoProxy && selected_type != QNetworkProxy::DefaultProxy; - - m_ui->m_txtProxyHost->setEnabled(is_proxy_selected); - m_ui->m_txtProxyPassword->setEnabled(is_proxy_selected); - m_ui->m_txtProxyUsername->setEnabled(is_proxy_selected); - m_ui->m_spinProxyPort->setEnabled(is_proxy_selected); - m_ui->m_checkShowPassword->setEnabled(is_proxy_selected); - m_ui->m_lblProxyHost->setEnabled(is_proxy_selected); - m_ui->m_lblProxyInfo->setEnabled(is_proxy_selected); - m_ui->m_lblProxyPassword->setEnabled(is_proxy_selected); - m_ui->m_lblProxyPort->setEnabled(is_proxy_selected); - m_ui->m_lblProxyUsername->setEnabled(is_proxy_selected); -} - QList SettingsBrowserMail::externalTools() const { QList list; @@ -181,19 +155,15 @@ void SettingsBrowserMail::loadSettings() { SETTING(Browser::CustomExternalEmailExecutable)).toString()); m_ui->m_txtExternalEmailArguments->setText(settings()->value(GROUP(Browser), SETTING(Browser::CustomExternalEmailArguments)).toString()); m_ui->m_grpCustomExternalEmail->setChecked(settings()->value(GROUP(Browser), SETTING(Browser::CustomExternalEmailEnabled)).toBool()); - m_ui->m_cmbProxyType->addItem(tr("No proxy"), QNetworkProxy::NoProxy); - m_ui->m_cmbProxyType->addItem(tr("System proxy"), QNetworkProxy::DefaultProxy); - m_ui->m_cmbProxyType->addItem(tr("Socks5"), QNetworkProxy::Socks5Proxy); - m_ui->m_cmbProxyType->addItem(tr("Http"), QNetworkProxy::HttpProxy); // Load the settings. QNetworkProxy::ProxyType selected_proxy_type = static_cast(settings()->value(GROUP(Proxy), SETTING(Proxy::Type)).toInt()); - m_ui->m_cmbProxyType->setCurrentIndex(m_ui->m_cmbProxyType->findData(selected_proxy_type)); - m_ui->m_txtProxyHost->setText(settings()->value(GROUP(Proxy), SETTING(Proxy::Host)).toString()); - m_ui->m_txtProxyUsername->setText(settings()->value(GROUP(Proxy), SETTING(Proxy::Username)).toString()); - m_ui->m_txtProxyPassword->setText(settings()->password(GROUP(Proxy), SETTING(Proxy::Password)).toString()); - m_ui->m_spinProxyPort->setValue(settings()->value(GROUP(Proxy), SETTING(Proxy::Port)).toInt()); + m_proxyDetails->m_ui.m_cmbProxyType->setCurrentIndex(m_proxyDetails->m_ui.m_cmbProxyType->findData(selected_proxy_type)); + m_proxyDetails->m_ui.m_txtProxyHost->setText(settings()->value(GROUP(Proxy), SETTING(Proxy::Host)).toString()); + m_proxyDetails->m_ui.m_txtProxyUsername->setText(settings()->value(GROUP(Proxy), SETTING(Proxy::Username)).toString()); + m_proxyDetails->m_ui.m_txtProxyPassword->setText(settings()->password(GROUP(Proxy), SETTING(Proxy::Password)).toString()); + m_proxyDetails->m_ui.m_spinProxyPort->setValue(settings()->value(GROUP(Proxy), SETTING(Proxy::Port)).toInt()); setExternalTools(ExternalTool::toolsFromSettings()); onEndLoadSettings(); @@ -215,11 +185,11 @@ void SettingsBrowserMail::saveSettings() { settings()->setValue(GROUP(Browser), Browser::CustomExternalEmailExecutable, m_ui->m_txtExternalEmailExecutable->text()); settings()->setValue(GROUP(Browser), Browser::CustomExternalEmailArguments, m_ui->m_txtExternalEmailArguments->text()); settings()->setValue(GROUP(Browser), Browser::CustomExternalEmailEnabled, m_ui->m_grpCustomExternalEmail->isChecked()); - settings()->setValue(GROUP(Proxy), Proxy::Type, m_ui->m_cmbProxyType->itemData(m_ui->m_cmbProxyType->currentIndex())); - settings()->setValue(GROUP(Proxy), Proxy::Host, m_ui->m_txtProxyHost->text()); - settings()->setValue(GROUP(Proxy), Proxy::Username, m_ui->m_txtProxyUsername->text()); - settings()->setPassword(GROUP(Proxy), Proxy::Password, m_ui->m_txtProxyPassword->text()); - settings()->setValue(GROUP(Proxy), Proxy::Port, m_ui->m_spinProxyPort->value()); + settings()->setValue(GROUP(Proxy), Proxy::Type, m_proxyDetails->m_ui.m_cmbProxyType->itemData(m_proxyDetails->m_ui.m_cmbProxyType->currentIndex())); + settings()->setValue(GROUP(Proxy), Proxy::Host, m_proxyDetails->m_ui.m_txtProxyHost->text()); + settings()->setValue(GROUP(Proxy), Proxy::Username, m_proxyDetails->m_ui.m_txtProxyUsername->text()); + settings()->setPassword(GROUP(Proxy), Proxy::Password, m_proxyDetails->m_ui.m_txtProxyPassword->text()); + settings()->setValue(GROUP(Proxy), Proxy::Port, m_proxyDetails->m_ui.m_spinProxyPort->value()); auto tools = externalTools(); diff --git a/src/librssguard/gui/settings/settingsbrowsermail.h b/src/librssguard/gui/settings/settingsbrowsermail.h index 3203b03a2..6a80aeca5 100644 --- a/src/librssguard/gui/settings/settingsbrowsermail.h +++ b/src/librssguard/gui/settings/settingsbrowsermail.h @@ -6,8 +6,11 @@ #include "gui/settings/settingspanel.h" #include "miscellaneous/externaltool.h" + #include "ui_settingsbrowsermail.h" +class NetworkProxyDetails; + class SettingsBrowserMail : public SettingsPanel { Q_OBJECT @@ -26,13 +29,12 @@ class SettingsBrowserMail : public SettingsPanel { void selectBrowserExecutable(); void changeDefaultEmailArguments(int index); void selectEmailExecutable(); - void displayProxyPassword(int state); - void onProxyTypeChanged(int index); private: QList externalTools() const; void setExternalTools(const QList& list); + NetworkProxyDetails* m_proxyDetails; Ui::SettingsBrowserMail* m_ui; }; diff --git a/src/librssguard/gui/settings/settingsbrowsermail.ui b/src/librssguard/gui/settings/settingsbrowsermail.ui index 7ae07bf5b..49b103571 100644 --- a/src/librssguard/gui/settings/settingsbrowsermail.ui +++ b/src/librssguard/gui/settings/settingsbrowsermail.ui @@ -335,167 +335,6 @@ - - - Proxy - - - - - - Type - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - m_cmbProxyType - - - - - - - - - - Host - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - m_txtProxyHost - - - - - - - - - true - - - Hostname or IP of your proxy server - - - - - - - Port - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - m_spinProxyPort - - - - - - - true - - - 65535 - - - 80 - - - - - - - - - Username - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - m_txtProxyUsername - - - - - - - true - - - Your username for proxy server authentication - - - - - - - Password - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - m_txtProxyPassword - - - - - - - true - - - QLineEdit::PasswordEchoOnEdit - - - Your password for proxy server authentication - - - - - - - true - - - Display password - - - - - - - Note that these settings are applied only on newly established connections. - - - Qt::AlignCenter - - - true - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - @@ -516,12 +355,6 @@ m_listTools m_btnAddTool m_btnDeleteTool - m_cmbProxyType - m_txtProxyHost - m_spinProxyPort - m_txtProxyUsername - m_txtProxyPassword - m_checkShowPassword diff --git a/src/librssguard/librssguard.pro b/src/librssguard/librssguard.pro index daafbd2e4..dfb602b1e 100644 --- a/src/librssguard/librssguard.pro +++ b/src/librssguard/librssguard.pro @@ -98,6 +98,7 @@ HEADERS += core/feeddownloader.h \ gui/toolbareditor.h \ gui/treeviewcolumnsmenu.h \ gui/widgetwithstatus.h \ + gui/networkproxydetails.h \ miscellaneous/application.h \ miscellaneous/autosaver.h \ miscellaneous/databasecleaner.h \ @@ -166,6 +167,7 @@ HEADERS += core/feeddownloader.h \ services/standard/atomparser.h \ services/standard/feedparser.h \ services/abstract/gui/authenticationdetails.h \ + services/standard/gui/formeditstandardaccount.h \ services/standard/gui/formstandardcategorydetails.h \ services/standard/gui/formstandardfeeddetails.h \ services/standard/gui/formstandardimportexport.h \ @@ -260,6 +262,7 @@ SOURCES += core/feeddownloader.cpp \ gui/toolbareditor.cpp \ gui/treeviewcolumnsmenu.cpp \ gui/widgetwithstatus.cpp \ + gui/networkproxydetails.cpp \ miscellaneous/application.cpp \ miscellaneous/autosaver.cpp \ miscellaneous/databasecleaner.cpp \ @@ -322,6 +325,7 @@ SOURCES += core/feeddownloader.cpp \ services/standard/atomparser.cpp \ services/standard/feedparser.cpp \ services/abstract/gui/authenticationdetails.cpp \ + services/standard/gui/formeditstandardaccount.cpp \ services/standard/gui/formstandardcategorydetails.cpp \ services/standard/gui/formstandardfeeddetails.cpp \ services/standard/gui/formstandardimportexport.cpp \ @@ -373,6 +377,7 @@ FORMS += gui/dialogs/formabout.ui \ gui/settings/settingslocalization.ui \ gui/settings/settingsshortcuts.ui \ gui/toolbareditor.ui \ + gui/networkproxydetails.ui \ network-web/downloaditem.ui \ network-web/downloadmanager.ui \ services/abstract/gui/formaccountdetails.ui \ diff --git a/src/librssguard/miscellaneous/databasequeries.cpp b/src/librssguard/miscellaneous/databasequeries.cpp index 61f3055dc..6b887f440 100755 --- a/src/librssguard/miscellaneous/databasequeries.cpp +++ b/src/librssguard/miscellaneous/databasequeries.cpp @@ -1841,6 +1841,7 @@ int DatabaseQueries::createBaseAccount(const QSqlDatabase& db, const QString& co void DatabaseQueries::editBaseAccount(const QSqlDatabase& db, ServiceRoot* account, bool* ok) { Q_UNUSED(account) Q_UNUSED(ok) + Q_UNUSED(db) // TODO: edit proxy etc } @@ -2406,7 +2407,7 @@ QList DatabaseQueries::getGmailAccounts(const QSqlDatabase& db, bo if (query.exec("SELECT * FROM GmailAccounts;")) { while (query.next()) { - auto* root = new GmailServiceRoot(nullptr); + auto* root = new GmailServiceRoot(); root->setId(query.value(0).toInt()); root->setAccountId(query.value(0).toInt()); @@ -2504,7 +2505,7 @@ QList DatabaseQueries::getInoreaderAccounts(const QSqlDatabase& db if (query.exec("SELECT * FROM InoreaderAccounts;")) { while (query.next()) { - auto* root = new InoreaderServiceRoot(nullptr); + auto* root = new InoreaderServiceRoot(); root->setId(query.value(0).toInt()); root->setAccountId(query.value(0).toInt()); diff --git a/src/librssguard/services/abstract/gui/formaccountdetails.cpp b/src/librssguard/services/abstract/gui/formaccountdetails.cpp index ddbad6c89..46f7cd0a9 100644 --- a/src/librssguard/services/abstract/gui/formaccountdetails.cpp +++ b/src/librssguard/services/abstract/gui/formaccountdetails.cpp @@ -3,31 +3,22 @@ #include "services/abstract/gui/formaccountdetails.h" #include "gui/guiutilities.h" +#include "gui/networkproxydetails.h" #include "miscellaneous/application.h" #include "miscellaneous/iconfactory.h" #include "services/abstract/serviceroot.h" -FormAccountDetails::FormAccountDetails(const QIcon& icon, QWidget* parent) : QDialog(parent), m_account(nullptr) { +FormAccountDetails::FormAccountDetails(const QIcon& icon, QWidget* parent) + : QDialog(parent), m_proxyDetails(new NetworkProxyDetails(this)), m_account(nullptr) { m_ui.setupUi(this); + insertCustomTab(m_proxyDetails, tr("Network proxy"), 0); GuiUtilities::applyDialogProperties(*this, icon.isNull() ? qApp->icons()->fromTheme(QSL("emblem-system")) : icon); createConnections(); } -void FormAccountDetails::apply() { - if (m_account != nullptr) { - // Perform last-time operations before account is changed. - auto* cached_account = dynamic_cast(m_account); - - if (cached_account != nullptr) { - qWarningNN << LOGSEC_CORE << "Last-time account cache saving before account gets changed."; - cached_account->saveAllCachedData(true); - } - } -} - void FormAccountDetails::insertCustomTab(QWidget* custom_tab, const QString& title, int index) { m_ui.m_tabWidget->insertTab(index, custom_tab, title); } diff --git a/src/librssguard/services/abstract/gui/formaccountdetails.h b/src/librssguard/services/abstract/gui/formaccountdetails.h index 25b26ff4e..13a90efb3 100644 --- a/src/librssguard/services/abstract/gui/formaccountdetails.h +++ b/src/librssguard/services/abstract/gui/formaccountdetails.h @@ -7,7 +7,12 @@ #include "ui_formaccountdetails.h" +#include "miscellaneous/application.h" +#include "miscellaneous/databasefactory.h" +#include "miscellaneous/databasequeries.h" + class ServiceRoot; +class NetworkProxyDetails; class FormAccountDetails : public QDialog { Q_OBJECT @@ -24,11 +29,17 @@ class FormAccountDetails : public QDialog { protected slots: // Applies changes. - // NOTE: This must be reimplemented in subclasses. Also this - // base implementation must be called first. - virtual void apply(); + // NOTE: This must be reimplemented in subclasses. Also, every + // subclass must call applyInternal() method as first statement. + virtual void apply() = 0; protected: + + // Performs some common operations and returns true if creating + // new account or false if editing existing account. + template + bool applyInternal(); + void activateTab(int index); void clearTabs(); void insertCustomTab(QWidget* custom_tab, const QString& title, int index); @@ -43,9 +54,36 @@ class FormAccountDetails : public QDialog { protected: Ui::FormAccountDetails m_ui; + NetworkProxyDetails* m_proxyDetails; ServiceRoot* m_account; }; +template +inline bool FormAccountDetails::applyInternal() { + if (m_account != nullptr) { + // Perform last-time operations before account is changed. + auto* cached_account = dynamic_cast(m_account); + + if (cached_account != nullptr) { + qWarningNN << LOGSEC_CORE << "Last-time account cache saving before account gets changed."; + cached_account->saveAllCachedData(true); + } + } + + QSqlDatabase database = qApp->database()->connection(QSL("FormAccountDetails")); + bool creating = m_account == nullptr; + + if (m_account == nullptr) { + m_account = new T(); + m_account->setAccountId(DatabaseQueries::createBaseAccount(database, m_account->code())); + m_account->setId(m_account->accountId()); + } + + // NOTE: We edit account common attributes here directly. + DatabaseQueries::editBaseAccount(database, m_account); + return creating; +} + template inline T* FormAccountDetails::addEditAccount(T* account_to_edit) { if (account_to_edit == nullptr) { @@ -55,8 +93,12 @@ inline T* FormAccountDetails::addEditAccount(T* account_to_edit) { setEditableAccount(static_cast(account_to_edit)); } - exec(); - return account(); + if (exec() == QDialog::DialogCode::Accepted) { + return account(); + } + else { + return nullptr; + } } template diff --git a/src/librssguard/services/gmail/gmailserviceroot.cpp b/src/librssguard/services/gmail/gmailserviceroot.cpp index 69e84a711..c260f5013 100644 --- a/src/librssguard/services/gmail/gmailserviceroot.cpp +++ b/src/librssguard/services/gmail/gmailserviceroot.cpp @@ -18,15 +18,8 @@ #include -GmailServiceRoot::GmailServiceRoot(GmailNetworkFactory* network, RootItem* parent) - : ServiceRoot(parent), m_network(network), m_actionReply(nullptr) { - if (network == nullptr) { - m_network = new GmailNetworkFactory(this); - } - else { - m_network->setParent(this); - } - +GmailServiceRoot::GmailServiceRoot(RootItem* parent) + : ServiceRoot(parent), m_network(new GmailNetworkFactory(this)), m_actionReply(nullptr) { m_network->setService(this); setIcon(GmailEntryPoint().icon()); } @@ -74,10 +67,10 @@ void GmailServiceRoot::loadFromDatabase() { } } -void GmailServiceRoot::saveAccountDataToDatabase() { +void GmailServiceRoot::saveAccountDataToDatabase(bool creating_new) { QSqlDatabase database = qApp->database()->connection(metaObject()->className()); - if (accountId() != NO_PARENT_CATEGORY) { + if (!creating_new) { if (DatabaseQueries::overwriteGmailAccount(database, m_network->username(), m_network->oauth()->clientId(), m_network->oauth()->clientSecret(), @@ -90,21 +83,15 @@ void GmailServiceRoot::saveAccountDataToDatabase() { } } else { - bool saved; - int id_to_assign = DatabaseQueries::createBaseAccount(database, code(), &saved); - - if (saved) { - if (DatabaseQueries::createGmailAccount(database, id_to_assign, - m_network->username(), - m_network->oauth()->clientId(), - m_network->oauth()->clientSecret(), - m_network->oauth()->redirectUrl(), - m_network->oauth()->refreshToken(), - m_network->batchSize())) { - setId(id_to_assign); - setAccountId(id_to_assign); - updateTitle(); - } + if (DatabaseQueries::createGmailAccount(database, + accountId(), + m_network->username(), + m_network->oauth()->clientId(), + m_network->oauth()->clientSecret(), + m_network->oauth()->redirectUrl(), + m_network->oauth()->refreshToken(), + m_network->batchSize())) { + updateTitle(); } } } diff --git a/src/librssguard/services/gmail/gmailserviceroot.h b/src/librssguard/services/gmail/gmailserviceroot.h index b3b4e4cb6..6c6588a87 100644 --- a/src/librssguard/services/gmail/gmailserviceroot.h +++ b/src/librssguard/services/gmail/gmailserviceroot.h @@ -12,10 +12,10 @@ class GmailServiceRoot : public ServiceRoot, public CacheForServiceRoot { Q_OBJECT public: - explicit GmailServiceRoot(GmailNetworkFactory* network, RootItem* parent = nullptr); + explicit GmailServiceRoot(RootItem* parent = nullptr); virtual ~GmailServiceRoot(); - void saveAccountDataToDatabase(); + void saveAccountDataToDatabase(bool creating_new); void setNetwork(GmailNetworkFactory* network); GmailNetworkFactory* network() const; diff --git a/src/librssguard/services/gmail/gui/formeditgmailaccount.cpp b/src/librssguard/services/gmail/gui/formeditgmailaccount.cpp index 70199cda0..de03a2496 100644 --- a/src/librssguard/services/gmail/gui/formeditgmailaccount.cpp +++ b/src/librssguard/services/gmail/gui/formeditgmailaccount.cpp @@ -20,16 +20,7 @@ FormEditGmailAccount::FormEditGmailAccount(QWidget* parent) } void FormEditGmailAccount::apply() { - FormAccountDetails::apply(); - - bool editing_account = true; - - if (m_account == nullptr) { - // We want to confirm newly created account. - // So save new account into DB, setup its properties. - m_account = new GmailServiceRoot(nullptr); - editing_account = false; - } + bool editing_account = !applyInternal(); // We copy credentials from testing OAuth to live OAuth. account()->network()->oauth()->setAccessToken(m_details->m_oauth->accessToken()); @@ -42,7 +33,8 @@ void FormEditGmailAccount::apply() { account()->network()->setUsername(m_details->m_ui.m_txtUsername->lineEdit()->text()); account()->network()->setBatchSize(m_details->m_ui.m_spinLimitMessages->value()); - account()->saveAccountDataToDatabase(); + + account()->saveAccountDataToDatabase(!editing_account); accept(); if (editing_account) { diff --git a/src/librssguard/services/inoreader/gui/formeditinoreaderaccount.cpp b/src/librssguard/services/inoreader/gui/formeditinoreaderaccount.cpp index 19b41b6c7..0e0a58c07 100644 --- a/src/librssguard/services/inoreader/gui/formeditinoreaderaccount.cpp +++ b/src/librssguard/services/inoreader/gui/formeditinoreaderaccount.cpp @@ -21,16 +21,7 @@ FormEditInoreaderAccount::FormEditInoreaderAccount(QWidget* parent) } void FormEditInoreaderAccount::apply() { - FormAccountDetails::apply(); - - bool editing_account = true; - - if (m_account == nullptr) { - // We want to confirm newly created account. - // So save new account into DB, setup its properties. - m_account = new InoreaderServiceRoot(nullptr); - editing_account = false; - } + bool editing_account = !applyInternal(); // We copy credentials from testing OAuth to live OAuth. account()->network()->oauth()->setAccessToken(m_details->m_oauth->accessToken()); @@ -43,7 +34,8 @@ void FormEditInoreaderAccount::apply() { account()->network()->setUsername(m_details->m_ui.m_txtUsername->lineEdit()->text()); account()->network()->setBatchSize(m_details->m_ui.m_spinLimitMessages->value()); - account()->saveAccountDataToDatabase(); + + account()->saveAccountDataToDatabase(!editing_account); accept(); if (editing_account) { diff --git a/src/librssguard/services/inoreader/inoreaderserviceroot.cpp b/src/librssguard/services/inoreader/inoreaderserviceroot.cpp index 5e2baacdd..bcbaa3a25 100644 --- a/src/librssguard/services/inoreader/inoreaderserviceroot.cpp +++ b/src/librssguard/services/inoreader/inoreaderserviceroot.cpp @@ -16,15 +16,8 @@ #include -InoreaderServiceRoot::InoreaderServiceRoot(InoreaderNetworkFactory* network, RootItem* parent) - : ServiceRoot(parent), m_network(network) { - if (network == nullptr) { - m_network = new InoreaderNetworkFactory(this); - } - else { - m_network->setParent(this); - } - +InoreaderServiceRoot::InoreaderServiceRoot(RootItem* parent) + : ServiceRoot(parent), m_network(new InoreaderNetworkFactory(this)) { m_network->setService(this); setIcon(InoreaderEntryPoint().icon()); } @@ -44,10 +37,10 @@ void InoreaderServiceRoot::loadFromDatabase() { performInitialAssembly(categories, feeds, labels); } -void InoreaderServiceRoot::saveAccountDataToDatabase() { +void InoreaderServiceRoot::saveAccountDataToDatabase(bool creating_new) { QSqlDatabase database = qApp->database()->connection(metaObject()->className()); - if (accountId() != NO_PARENT_CATEGORY) { + if (!creating_new) { if (DatabaseQueries::overwriteInoreaderAccount(database, m_network->userName(), m_network->oauth()->clientId(), m_network->oauth()->clientSecret(), @@ -60,21 +53,15 @@ void InoreaderServiceRoot::saveAccountDataToDatabase() { } } else { - bool saved; - int id_to_assign = DatabaseQueries::createBaseAccount(database, code(), &saved); - - if (saved) { - if (DatabaseQueries::createInoreaderAccount(database, id_to_assign, - m_network->userName(), - m_network->oauth()->clientId(), - m_network->oauth()->clientSecret(), - m_network->oauth()->redirectUrl(), - m_network->oauth()->refreshToken(), - m_network->batchSize())) { - setId(id_to_assign); - setAccountId(id_to_assign); - updateTitle(); - } + if (DatabaseQueries::createInoreaderAccount(database, + accountId(), + m_network->userName(), + m_network->oauth()->clientId(), + m_network->oauth()->clientSecret(), + m_network->oauth()->redirectUrl(), + m_network->oauth()->refreshToken(), + m_network->batchSize())) { + updateTitle(); } } } diff --git a/src/librssguard/services/inoreader/inoreaderserviceroot.h b/src/librssguard/services/inoreader/inoreaderserviceroot.h index cbdd997c6..7fda0f1d0 100644 --- a/src/librssguard/services/inoreader/inoreaderserviceroot.h +++ b/src/librssguard/services/inoreader/inoreaderserviceroot.h @@ -12,10 +12,10 @@ class InoreaderServiceRoot : public ServiceRoot, public CacheForServiceRoot { Q_OBJECT public: - explicit InoreaderServiceRoot(InoreaderNetworkFactory* network, RootItem* parent = nullptr); + explicit InoreaderServiceRoot(RootItem* parent = nullptr); virtual ~InoreaderServiceRoot(); - void saveAccountDataToDatabase(); + void saveAccountDataToDatabase(bool creating_new); void setNetwork(InoreaderNetworkFactory* network); InoreaderNetworkFactory* network() const; diff --git a/src/librssguard/services/owncloud/gui/formeditowncloudaccount.cpp b/src/librssguard/services/owncloud/gui/formeditowncloudaccount.cpp index 23e64a8d1..027570ff7 100644 --- a/src/librssguard/services/owncloud/gui/formeditowncloudaccount.cpp +++ b/src/librssguard/services/owncloud/gui/formeditowncloudaccount.cpp @@ -19,16 +19,7 @@ FormEditOwnCloudAccount::FormEditOwnCloudAccount(QWidget* parent) } void FormEditOwnCloudAccount::apply() { - FormAccountDetails::apply(); - - bool editing_account = true; - - if (m_account == nullptr) { - // We want to confirm newly created account. - // So save new account into DB, setup its properties. - m_account = new OwnCloudServiceRoot(); - editing_account = false; - } + bool editing_account = !applyInternal(); account()->network()->setUrl(m_details->m_ui.m_txtUrl->lineEdit()->text()); account()->network()->setAuthUsername(m_details->m_ui.m_txtUsername->lineEdit()->text()); @@ -37,7 +28,7 @@ void FormEditOwnCloudAccount::apply() { account()->network()->setBatchSize(m_details->m_ui.m_spinLimitMessages->value()); account()->network()->setDownloadOnlyUnreadMessages(m_details->m_ui.m_checkDownloadOnlyUnreadMessages->isChecked()); - account()->saveAccountDataToDatabase(); + account()->saveAccountDataToDatabase(!editing_account); accept(); if (editing_account) { diff --git a/src/librssguard/services/owncloud/owncloudserviceroot.cpp b/src/librssguard/services/owncloud/owncloudserviceroot.cpp index 2768b8605..6f4b53d11 100644 --- a/src/librssguard/services/owncloud/owncloudserviceroot.cpp +++ b/src/librssguard/services/owncloud/owncloudserviceroot.cpp @@ -128,10 +128,10 @@ void OwnCloudServiceRoot::updateTitle() { setTitle(m_network->authUsername() + QSL(" (Nextcloud News)")); } -void OwnCloudServiceRoot::saveAccountDataToDatabase() { +void OwnCloudServiceRoot::saveAccountDataToDatabase(bool creating_new) { QSqlDatabase database = qApp->database()->connection(metaObject()->className()); - if (accountId() != NO_PARENT_CATEGORY) { + if (!creating_new) { if (DatabaseQueries::overwriteOwnCloudAccount(database, m_network->authUsername(), m_network->authPassword(), m_network->url(), m_network->forceServerSideUpdate(), m_network->batchSize(), @@ -141,19 +141,12 @@ void OwnCloudServiceRoot::saveAccountDataToDatabase() { } } else { - bool saved; - int id_to_assign = DatabaseQueries::createBaseAccount(database, code(), &saved); - - if (saved) { - if (DatabaseQueries::createOwnCloudAccount(database, id_to_assign, m_network->authUsername(), - m_network->authPassword(), m_network->url(), - m_network->forceServerSideUpdate(), - m_network->downloadOnlyUnreadMessages(), - m_network->batchSize())) { - setId(id_to_assign); - setAccountId(id_to_assign); - updateTitle(); - } + if (DatabaseQueries::createOwnCloudAccount(database, accountId(), m_network->authUsername(), + m_network->authPassword(), m_network->url(), + m_network->forceServerSideUpdate(), + m_network->downloadOnlyUnreadMessages(), + m_network->batchSize())) { + updateTitle(); } } } diff --git a/src/librssguard/services/owncloud/owncloudserviceroot.h b/src/librssguard/services/owncloud/owncloudserviceroot.h index 4d539b7a6..ac689e6e9 100644 --- a/src/librssguard/services/owncloud/owncloudserviceroot.h +++ b/src/librssguard/services/owncloud/owncloudserviceroot.h @@ -32,7 +32,7 @@ class OwnCloudServiceRoot : public ServiceRoot, public CacheForServiceRoot { OwnCloudNetworkFactory* network() const; void updateTitle(); - void saveAccountDataToDatabase(); + void saveAccountDataToDatabase(bool creating_new); protected: virtual RootItem* obtainNewTreeForSyncIn() const; diff --git a/src/librssguard/services/standard/gui/formeditstandardaccount.cpp b/src/librssguard/services/standard/gui/formeditstandardaccount.cpp new file mode 100755 index 000000000..674cc31e9 --- /dev/null +++ b/src/librssguard/services/standard/gui/formeditstandardaccount.cpp @@ -0,0 +1,21 @@ +// For license of this file, see /LICENSE.md. + +#include "services/standard/gui/formeditstandardaccount.h" + +#include "miscellaneous/application.h" +#include "miscellaneous/databasefactory.h" +#include "miscellaneous/databasequeries.h" +#include "miscellaneous/iconfactory.h" +#include "services/standard/standardserviceroot.h" + +FormEditStandardAccount::FormEditStandardAccount(QWidget* parent) + : FormAccountDetails(qApp->icons()->fromTheme(QSL("rssguard")), parent) {} + +void FormEditStandardAccount::apply() { + applyInternal(); + accept(); +} + +void FormEditStandardAccount::setEditableAccount(ServiceRoot* editable_account) { + FormAccountDetails::setEditableAccount(editable_account); +} diff --git a/src/librssguard/services/standard/gui/formeditstandardaccount.h b/src/librssguard/services/standard/gui/formeditstandardaccount.h new file mode 100755 index 000000000..0587c453c --- /dev/null +++ b/src/librssguard/services/standard/gui/formeditstandardaccount.h @@ -0,0 +1,19 @@ +// For license of this file, see /LICENSE.md. + +#ifndef FORMEDITSTANDARDACCOUNT_H +#define FORMEDITSTANDARDACCOUNT_H + +#include "services/abstract/gui/formaccountdetails.h" + +class FormEditStandardAccount : public FormAccountDetails { + public: + explicit FormEditStandardAccount(QWidget* parent = nullptr); + + protected slots: + virtual void apply(); + + protected: + virtual void setEditableAccount(ServiceRoot* editable_account); +}; + +#endif // FORMEDITSTANDARDACCOUNT_H diff --git a/src/librssguard/services/standard/standardserviceentrypoint.cpp b/src/librssguard/services/standard/standardserviceentrypoint.cpp index 9cce4d49a..b5e134a1f 100644 --- a/src/librssguard/services/standard/standardserviceentrypoint.cpp +++ b/src/librssguard/services/standard/standardserviceentrypoint.cpp @@ -5,6 +5,7 @@ #include "definitions/definitions.h" #include "miscellaneous/application.h" #include "miscellaneous/databasequeries.h" +#include "services/standard/gui/formeditstandardaccount.h" #include "services/standard/standardserviceroot.h" QString StandardServiceEntryPoint::name() const { @@ -28,20 +29,9 @@ QString StandardServiceEntryPoint::code() const { } ServiceRoot* StandardServiceEntryPoint::createNewRoot() const { - // Switch DB. - QSqlDatabase database = qApp->database()->connection(QSL("StandardServiceEntryPoint")); - bool ok; - int new_id = DatabaseQueries::createBaseAccount(database, code(), &ok); + FormEditStandardAccount form_acc(qApp->mainFormWidget()); - if (ok) { - auto* root = new StandardServiceRoot(); - - root->setAccountId(new_id); - return root; - } - else { - return nullptr; - } + return form_acc.addEditAccount(); } QList StandardServiceEntryPoint::initializeSubtree() const { diff --git a/src/librssguard/services/standard/standardserviceroot.cpp b/src/librssguard/services/standard/standardserviceroot.cpp index 709b848ee..85c30e38d 100644 --- a/src/librssguard/services/standard/standardserviceroot.cpp +++ b/src/librssguard/services/standard/standardserviceroot.cpp @@ -14,6 +14,7 @@ #include "services/abstract/importantnode.h" #include "services/abstract/labelsnode.h" #include "services/abstract/recyclebin.h" +#include "services/standard/gui/formeditstandardaccount.h" #include "services/standard/gui/formstandardcategorydetails.h" #include "services/standard/gui/formstandardfeeddetails.h" #include "services/standard/gui/formstandardimportexport.h" @@ -87,13 +88,20 @@ QString StandardServiceRoot::code() const { } bool StandardServiceRoot::canBeEdited() const { - return false; + return true; } bool StandardServiceRoot::canBeDeleted() const { return true; } +bool StandardServiceRoot::editViaGui() { + FormEditStandardAccount form_pointer(qApp->mainFormWidget()); + + form_pointer.addEditAccount(this); + return true; +} + bool StandardServiceRoot::deleteViaGui() { return ServiceRoot::deleteViaGui(); } diff --git a/src/librssguard/services/standard/standardserviceroot.h b/src/librssguard/services/standard/standardserviceroot.h index d40e262d3..fa43cbdf3 100644 --- a/src/librssguard/services/standard/standardserviceroot.h +++ b/src/librssguard/services/standard/standardserviceroot.h @@ -29,6 +29,7 @@ class StandardServiceRoot : public ServiceRoot { bool canBeEdited() const; bool canBeDeleted() const; + bool editViaGui(); bool deleteViaGui(); bool supportsFeedAdding() const; bool supportsCategoryAdding() const; diff --git a/src/librssguard/services/tt-rss/gui/formeditttrssaccount.cpp b/src/librssguard/services/tt-rss/gui/formeditttrssaccount.cpp index 6bc2f8332..a7145d514 100644 --- a/src/librssguard/services/tt-rss/gui/formeditttrssaccount.cpp +++ b/src/librssguard/services/tt-rss/gui/formeditttrssaccount.cpp @@ -17,16 +17,7 @@ FormEditTtRssAccount::FormEditTtRssAccount(QWidget* parent) } void FormEditTtRssAccount::apply() { - FormAccountDetails::apply(); - - bool editing_account = true; - - if (m_account == nullptr) { - // We want to confirm newly created account. - // So save new account into DB, setup its properties. - m_account = new TtRssServiceRoot(); - editing_account = false; - } + bool editing_account = !applyInternal(); account()->network()->setUrl(m_details->m_ui.m_txtUrl->lineEdit()->text()); account()->network()->setUsername(m_details->m_ui.m_txtUsername->lineEdit()->text()); @@ -37,7 +28,7 @@ void FormEditTtRssAccount::apply() { account()->network()->setForceServerSideUpdate(m_details->m_ui.m_checkServerSideUpdate->isChecked()); account()->network()->setDownloadOnlyUnreadMessages(m_details->m_ui.m_checkDownloadOnlyUnreadMessages->isChecked()); - account()->saveAccountDataToDatabase(); + account()->saveAccountDataToDatabase(!editing_account); accept(); if (editing_account) { diff --git a/src/librssguard/services/tt-rss/gui/ttrssaccountdetails.cpp b/src/librssguard/services/tt-rss/gui/ttrssaccountdetails.cpp index aaa960ede..bd49202ff 100644 --- a/src/librssguard/services/tt-rss/gui/ttrssaccountdetails.cpp +++ b/src/librssguard/services/tt-rss/gui/ttrssaccountdetails.cpp @@ -13,7 +13,6 @@ TtRssAccountDetails::TtRssAccountDetails(QWidget* parent) : QWidget(parent) { m_ui.m_lblTestResult->label()->setWordWrap(true); m_ui.m_lblServerSideUpdateInformation->setText(tr("Leaving this option on causes that updates " "of feeds will be probably much slower and may time-out often.")); - m_ui.m_lblDescription->setText(tr("Note that at least API level %1 is required.").arg(TTRSS_MINIMAL_API_LEVEL)); m_ui.m_txtHttpUsername->lineEdit()->setPlaceholderText(tr("HTTP authentication username")); m_ui.m_txtHttpPassword->lineEdit()->setPlaceholderText(tr("HTTP authentication password")); m_ui.m_txtPassword->lineEdit()->setPlaceholderText(tr("Password for your TT-RSS account")); @@ -23,7 +22,6 @@ TtRssAccountDetails::TtRssAccountDetails(QWidget* parent) : QWidget(parent) { tr("No test done yet."), tr("Here, results of connection test are shown.")); - GuiUtilities::setLabelAsNotice(*m_ui.m_lblDescription, true); GuiUtilities::setLabelAsNotice(*m_ui.m_lblServerSideUpdateInformation, true); setTabOrder(m_ui.m_txtUrl->lineEdit(), m_ui.m_checkDownloadOnlyUnreadMessages); diff --git a/src/librssguard/services/tt-rss/gui/ttrssaccountdetails.ui b/src/librssguard/services/tt-rss/gui/ttrssaccountdetails.ui index 6ec555311..d014020e6 100644 --- a/src/librssguard/services/tt-rss/gui/ttrssaccountdetails.ui +++ b/src/librssguard/services/tt-rss/gui/ttrssaccountdetails.ui @@ -11,21 +11,48 @@ - + + + + + + URL + + + m_txtUrl + + + + + + + + + Download only unread messages - + Force execution of server-side update when updating feeds from RSS Guard - + + + + + + + true + + + + Some feeds require authentication, including GMail feeds. BASIC, NTLM-2 and DIGEST-MD5 authentication schemes are supported. @@ -76,7 +103,7 @@ - + Some feeds require authentication, including GMail feeds. BASIC, NTLM-2 and DIGEST-MD5 authentication schemes are supported. @@ -130,14 +157,14 @@ - + &Test setup - + @@ -150,7 +177,7 @@ - + Qt::Vertical @@ -163,43 +190,6 @@ - - - - - - URL - - - m_txtUrl - - - - - - - - - - - - - - - true - - - - - - - - - - true - - - diff --git a/src/librssguard/services/tt-rss/ttrssserviceroot.cpp b/src/librssguard/services/tt-rss/ttrssserviceroot.cpp index 2ca8ae308..8124a205b 100644 --- a/src/librssguard/services/tt-rss/ttrssserviceroot.cpp +++ b/src/librssguard/services/tt-rss/ttrssserviceroot.cpp @@ -211,10 +211,10 @@ TtRssNetworkFactory* TtRssServiceRoot::network() const { return m_network; } -void TtRssServiceRoot::saveAccountDataToDatabase() { +void TtRssServiceRoot::saveAccountDataToDatabase(bool creating_new) { QSqlDatabase database = qApp->database()->connection(metaObject()->className()); - if (accountId() != NO_PARENT_CATEGORY) { + if (!creating_new) { // We are overwritting previously saved data. if (DatabaseQueries::overwriteTtRssAccount(database, m_network->username(), m_network->password(), m_network->authIsUsed(), m_network->authUsername(), @@ -226,19 +226,12 @@ void TtRssServiceRoot::saveAccountDataToDatabase() { } } else { - bool saved; - int id_to_assign = DatabaseQueries::createBaseAccount(database, code(), &saved); - - if (saved) { - if (DatabaseQueries::createTtRssAccount(database, id_to_assign, m_network->username(), - m_network->password(), m_network->authIsUsed(), - m_network->authUsername(), m_network->authPassword(), - m_network->url(), m_network->forceServerSideUpdate(), - m_network->downloadOnlyUnreadMessages())) { - setId(id_to_assign); - setAccountId(id_to_assign); - updateTitle(); - } + if (DatabaseQueries::createTtRssAccount(database, accountId(), m_network->username(), + m_network->password(), m_network->authIsUsed(), + m_network->authUsername(), m_network->authPassword(), + m_network->url(), m_network->forceServerSideUpdate(), + m_network->downloadOnlyUnreadMessages())) { + updateTitle(); } } } diff --git a/src/librssguard/services/tt-rss/ttrssserviceroot.h b/src/librssguard/services/tt-rss/ttrssserviceroot.h index 2792c7886..8448efb9f 100644 --- a/src/librssguard/services/tt-rss/ttrssserviceroot.h +++ b/src/librssguard/services/tt-rss/ttrssserviceroot.h @@ -37,7 +37,7 @@ class TtRssServiceRoot : public ServiceRoot, public CacheForServiceRoot { // Access to network. TtRssNetworkFactory* network() const; - void saveAccountDataToDatabase(); + void saveAccountDataToDatabase(bool creating_new); void updateTitle(); protected: