Working on per acc proxy.

This commit is contained in:
Martin Rotter 2021-01-20 14:23:58 +01:00
parent 18a1d0e595
commit ff969016db
29 changed files with 484 additions and 430 deletions

View File

@ -0,0 +1,39 @@
// For license of this file, see <project-root-folder>/LICENSE.md.
#include "gui/networkproxydetails.h"
#include "gui/guiutilities.h"
#include <QNetworkProxy>
NetworkProxyDetails::NetworkProxyDetails(QWidget* parent) : QWidget(parent) {
m_ui.setupUi(this);
GuiUtilities::setLabelAsNotice(*m_ui.m_lblProxyInfo, false);
connect(m_ui.m_cmbProxyType, static_cast<void (QComboBox::*)(int)>(&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<QNetworkProxy::ProxyType>(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);
}

View File

@ -0,0 +1,24 @@
// For license of this file, see <project-root-folder>/LICENSE.md.
#ifndef NETWORKPROXYDETAILS_H
#define NETWORKPROXYDETAILS_H
#include <QWidget>
#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

View File

@ -0,0 +1,194 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>NetworkProxyDetails</class>
<widget class="QWidget" name="NetworkProxyDetails">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>507</width>
<height>257</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QFormLayout" name="formLayout_2">
<item row="0" column="0">
<widget class="QLabel" name="m_lblProxyType">
<property name="text">
<string extracomment="Proxy server type.">Type</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<property name="buddy">
<cstring>m_cmbProxyType</cstring>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QComboBox" name="m_cmbProxyType"/>
</item>
<item row="1" column="0" colspan="2">
<widget class="QWidget" name="m_proxyDetails" native="true">
<layout class="QFormLayout" name="formLayout">
<item row="0" column="0">
<widget class="QLabel" name="m_lblProxyHost">
<property name="text">
<string>Host</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<property name="buddy">
<cstring>m_txtProxyHost</cstring>
</property>
</widget>
</item>
<item row="0" column="1">
<layout class="QHBoxLayout" name="horizontalLayout_7">
<item>
<widget class="QLineEdit" name="m_txtProxyHost">
<property name="enabled">
<bool>true</bool>
</property>
<property name="placeholderText">
<string>Hostname or IP of your proxy server</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="m_lblProxyPort">
<property name="text">
<string>Port</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<property name="buddy">
<cstring>m_spinProxyPort</cstring>
</property>
</widget>
</item>
<item>
<widget class="QSpinBox" name="m_spinProxyPort">
<property name="enabled">
<bool>true</bool>
</property>
<property name="maximum">
<number>65535</number>
</property>
<property name="value">
<number>80</number>
</property>
</widget>
</item>
</layout>
</item>
<item row="1" column="0">
<widget class="QLabel" name="m_lblProxyUsername">
<property name="text">
<string>Username</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<property name="buddy">
<cstring>m_txtProxyUsername</cstring>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLineEdit" name="m_txtProxyUsername">
<property name="enabled">
<bool>true</bool>
</property>
<property name="placeholderText">
<string>Your username for proxy server authentication</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="m_lblProxyPassword">
<property name="text">
<string>Password</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<property name="buddy">
<cstring>m_txtProxyPassword</cstring>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QLineEdit" name="m_txtProxyPassword">
<property name="enabled">
<bool>true</bool>
</property>
<property name="echoMode">
<enum>QLineEdit::PasswordEchoOnEdit</enum>
</property>
<property name="placeholderText">
<string>Your password for proxy server authentication</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QCheckBox" name="m_checkShowPassword">
<property name="enabled">
<bool>true</bool>
</property>
<property name="text">
<string>Display password</string>
</property>
</widget>
</item>
<item row="4" column="0" colspan="2">
<widget class="QLabel" name="m_lblProxyInfo">
<property name="text">
<string>Note that these settings are applied only on newly established connections.</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item row="5" column="0" colspan="2">
<spacer name="verticalSpacer_2">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</item>
<item row="2" column="0" colspan="2">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>

View File

@ -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 <QNetworkProxy>
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<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), this,
connect(m_proxyDetails->m_ui.m_cmbProxyType, static_cast<void (QComboBox::*)(int)>(&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<void (QSpinBox::*)(int)>(&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<void (QSpinBox::*)(int)>(&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<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), this,
&SettingsBrowserMail::onProxyTypeChanged);
connect(m_ui->m_checkShowPassword, &QCheckBox::stateChanged, this, &SettingsBrowserMail::displayProxyPassword);
connect(m_ui->m_cmbExternalBrowserPreset, static_cast<void (QComboBox::*)(int)>(&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<QNetworkProxy::ProxyType>(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<ExternalTool> SettingsBrowserMail::externalTools() const {
QList<ExternalTool> 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<QNetworkProxy::ProxyType>(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();

View File

@ -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<ExternalTool> externalTools() const;
void setExternalTools(const QList<ExternalTool>& list);
NetworkProxyDetails* m_proxyDetails;
Ui::SettingsBrowserMail* m_ui;
};

View File

@ -335,167 +335,6 @@
</item>
</layout>
</widget>
<widget class="QWidget" name="m_tabProxy">
<attribute name="title">
<string>Proxy</string>
</attribute>
<layout class="QFormLayout" name="formLayout_6">
<item row="0" column="0">
<widget class="QLabel" name="m_lblProxyType">
<property name="text">
<string extracomment="Proxy server type.">Type</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<property name="buddy">
<cstring>m_cmbProxyType</cstring>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QComboBox" name="m_cmbProxyType"/>
</item>
<item row="1" column="0">
<widget class="QLabel" name="m_lblProxyHost">
<property name="text">
<string>Host</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<property name="buddy">
<cstring>m_txtProxyHost</cstring>
</property>
</widget>
</item>
<item row="1" column="1">
<layout class="QHBoxLayout" name="horizontalLayout_7">
<item>
<widget class="QLineEdit" name="m_txtProxyHost">
<property name="enabled">
<bool>true</bool>
</property>
<property name="placeholderText">
<string>Hostname or IP of your proxy server</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="m_lblProxyPort">
<property name="text">
<string>Port</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<property name="buddy">
<cstring>m_spinProxyPort</cstring>
</property>
</widget>
</item>
<item>
<widget class="QSpinBox" name="m_spinProxyPort">
<property name="enabled">
<bool>true</bool>
</property>
<property name="maximum">
<number>65535</number>
</property>
<property name="value">
<number>80</number>
</property>
</widget>
</item>
</layout>
</item>
<item row="2" column="0">
<widget class="QLabel" name="m_lblProxyUsername">
<property name="text">
<string>Username</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<property name="buddy">
<cstring>m_txtProxyUsername</cstring>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QLineEdit" name="m_txtProxyUsername">
<property name="enabled">
<bool>true</bool>
</property>
<property name="placeholderText">
<string>Your username for proxy server authentication</string>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="m_lblProxyPassword">
<property name="text">
<string>Password</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<property name="buddy">
<cstring>m_txtProxyPassword</cstring>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QLineEdit" name="m_txtProxyPassword">
<property name="enabled">
<bool>true</bool>
</property>
<property name="echoMode">
<enum>QLineEdit::PasswordEchoOnEdit</enum>
</property>
<property name="placeholderText">
<string>Your password for proxy server authentication</string>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QCheckBox" name="m_checkShowPassword">
<property name="enabled">
<bool>true</bool>
</property>
<property name="text">
<string>Display password</string>
</property>
</widget>
</item>
<item row="5" column="0" colspan="2">
<widget class="QLabel" name="m_lblProxyInfo">
<property name="text">
<string>Note that these settings are applied only on newly established connections.</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item row="6" column="0" colspan="2">
<spacer name="verticalSpacer_3">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</widget>
</item>
</layout>
@ -516,12 +355,6 @@
<tabstop>m_listTools</tabstop>
<tabstop>m_btnAddTool</tabstop>
<tabstop>m_btnDeleteTool</tabstop>
<tabstop>m_cmbProxyType</tabstop>
<tabstop>m_txtProxyHost</tabstop>
<tabstop>m_spinProxyPort</tabstop>
<tabstop>m_txtProxyUsername</tabstop>
<tabstop>m_txtProxyPassword</tabstop>
<tabstop>m_checkShowPassword</tabstop>
</tabstops>
<resources/>
<connections/>

View File

@ -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 \

View File

@ -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<ServiceRoot*> 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<ServiceRoot*> 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());

View File

@ -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<CacheForServiceRoot*>(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);
}

View File

@ -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<class T>
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<class T>
inline bool FormAccountDetails::applyInternal() {
if (m_account != nullptr) {
// Perform last-time operations before account is changed.
auto* cached_account = dynamic_cast<CacheForServiceRoot*>(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<class T>
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<ServiceRoot*>(account_to_edit));
}
exec();
return account<T>();
if (exec() == QDialog::DialogCode::Accepted) {
return account<T>();
}
else {
return nullptr;
}
}
template<class T>

View File

@ -18,15 +18,8 @@
#include <QFileDialog>
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();
}
}
}

View File

@ -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;

View File

@ -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<GmailServiceRoot>();
// We copy credentials from testing OAuth to live OAuth.
account<GmailServiceRoot>()->network()->oauth()->setAccessToken(m_details->m_oauth->accessToken());
@ -42,7 +33,8 @@ void FormEditGmailAccount::apply() {
account<GmailServiceRoot>()->network()->setUsername(m_details->m_ui.m_txtUsername->lineEdit()->text());
account<GmailServiceRoot>()->network()->setBatchSize(m_details->m_ui.m_spinLimitMessages->value());
account<GmailServiceRoot>()->saveAccountDataToDatabase();
account<GmailServiceRoot>()->saveAccountDataToDatabase(!editing_account);
accept();
if (editing_account) {

View File

@ -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<InoreaderServiceRoot>();
// We copy credentials from testing OAuth to live OAuth.
account<InoreaderServiceRoot>()->network()->oauth()->setAccessToken(m_details->m_oauth->accessToken());
@ -43,7 +34,8 @@ void FormEditInoreaderAccount::apply() {
account<InoreaderServiceRoot>()->network()->setUsername(m_details->m_ui.m_txtUsername->lineEdit()->text());
account<InoreaderServiceRoot>()->network()->setBatchSize(m_details->m_ui.m_spinLimitMessages->value());
account<InoreaderServiceRoot>()->saveAccountDataToDatabase();
account<InoreaderServiceRoot>()->saveAccountDataToDatabase(!editing_account);
accept();
if (editing_account) {

View File

@ -16,15 +16,8 @@
#include <QThread>
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();
}
}
}

View File

@ -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;

View File

@ -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<OwnCloudServiceRoot>();
account<OwnCloudServiceRoot>()->network()->setUrl(m_details->m_ui.m_txtUrl->lineEdit()->text());
account<OwnCloudServiceRoot>()->network()->setAuthUsername(m_details->m_ui.m_txtUsername->lineEdit()->text());
@ -37,7 +28,7 @@ void FormEditOwnCloudAccount::apply() {
account<OwnCloudServiceRoot>()->network()->setBatchSize(m_details->m_ui.m_spinLimitMessages->value());
account<OwnCloudServiceRoot>()->network()->setDownloadOnlyUnreadMessages(m_details->m_ui.m_checkDownloadOnlyUnreadMessages->isChecked());
account<OwnCloudServiceRoot>()->saveAccountDataToDatabase();
account<OwnCloudServiceRoot>()->saveAccountDataToDatabase(!editing_account);
accept();
if (editing_account) {

View File

@ -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();
}
}
}

View File

@ -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;

View File

@ -0,0 +1,21 @@
// For license of this file, see <project-root-folder>/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<StandardServiceRoot>();
accept();
}
void FormEditStandardAccount::setEditableAccount(ServiceRoot* editable_account) {
FormAccountDetails::setEditableAccount(editable_account);
}

View File

@ -0,0 +1,19 @@
// For license of this file, see <project-root-folder>/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

View File

@ -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<StandardServiceRoot>();
}
QList<ServiceRoot*> StandardServiceEntryPoint::initializeSubtree() const {

View File

@ -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();
}

View File

@ -29,6 +29,7 @@ class StandardServiceRoot : public ServiceRoot {
bool canBeEdited() const;
bool canBeDeleted() const;
bool editViaGui();
bool deleteViaGui();
bool supportsFeedAdding() const;
bool supportsCategoryAdding() const;

View File

@ -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<TtRssServiceRoot>();
account<TtRssServiceRoot>()->network()->setUrl(m_details->m_ui.m_txtUrl->lineEdit()->text());
account<TtRssServiceRoot>()->network()->setUsername(m_details->m_ui.m_txtUsername->lineEdit()->text());
@ -37,7 +28,7 @@ void FormEditTtRssAccount::apply() {
account<TtRssServiceRoot>()->network()->setForceServerSideUpdate(m_details->m_ui.m_checkServerSideUpdate->isChecked());
account<TtRssServiceRoot>()->network()->setDownloadOnlyUnreadMessages(m_details->m_ui.m_checkDownloadOnlyUnreadMessages->isChecked());
account<TtRssServiceRoot>()->saveAccountDataToDatabase();
account<TtRssServiceRoot>()->saveAccountDataToDatabase(!editing_account);
accept();
if (editing_account) {

View File

@ -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);

View File

@ -11,21 +11,48 @@
</rect>
</property>
<layout class="QFormLayout" name="formLayout">
<item row="2" column="0" colspan="2">
<item row="0" column="0" colspan="2">
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLabel" name="m_lblTitle">
<property name="text">
<string>URL</string>
</property>
<property name="buddy">
<cstring>m_txtUrl</cstring>
</property>
</widget>
</item>
<item>
<widget class="LineEditWithStatus" name="m_txtUrl" native="true"/>
</item>
</layout>
</item>
<item row="1" column="0" colspan="2">
<widget class="QCheckBox" name="m_checkDownloadOnlyUnreadMessages">
<property name="text">
<string>Download only unread messages</string>
</property>
</widget>
</item>
<item row="3" column="0" colspan="2">
<item row="2" column="0" colspan="2">
<widget class="QCheckBox" name="m_checkServerSideUpdate">
<property name="text">
<string>Force execution of server-side update when updating feeds from RSS Guard</string>
</property>
</widget>
</item>
<item row="5" column="0" colspan="2">
<item row="3" column="0" colspan="2">
<widget class="QLabel" name="m_lblServerSideUpdateInformation">
<property name="text">
<string/>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item row="4" column="0" colspan="2">
<widget class="QGroupBox" name="m_gbAuthentication">
<property name="toolTip">
<string>Some feeds require authentication, including GMail feeds. BASIC, NTLM-2 and DIGEST-MD5 authentication schemes are supported.</string>
@ -76,7 +103,7 @@
</layout>
</widget>
</item>
<item row="6" column="0" colspan="2">
<item row="5" column="0" colspan="2">
<widget class="QGroupBox" name="m_gbHttpAuthentication">
<property name="toolTip">
<string>Some feeds require authentication, including GMail feeds. BASIC, NTLM-2 and DIGEST-MD5 authentication schemes are supported.</string>
@ -130,14 +157,14 @@
</layout>
</widget>
</item>
<item row="7" column="0">
<item row="6" column="0">
<widget class="QPushButton" name="m_btnTestSetup">
<property name="text">
<string>&amp;Test setup</string>
</property>
</widget>
</item>
<item row="7" column="1">
<item row="6" column="1">
<widget class="LabelWithStatus" name="m_lblTestResult" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
@ -150,7 +177,7 @@
</property>
</widget>
</item>
<item row="8" column="0" colspan="2">
<item row="7" column="0" colspan="2">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
@ -163,43 +190,6 @@
</property>
</spacer>
</item>
<item row="0" column="0" colspan="2">
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLabel" name="m_lblTitle">
<property name="text">
<string>URL</string>
</property>
<property name="buddy">
<cstring>m_txtUrl</cstring>
</property>
</widget>
</item>
<item>
<widget class="LineEditWithStatus" name="m_txtUrl" native="true"/>
</item>
</layout>
</item>
<item row="1" column="0" colspan="2">
<widget class="QLabel" name="m_lblDescription">
<property name="text">
<string/>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item row="4" column="0" colspan="2">
<widget class="QLabel" name="m_lblServerSideUpdateInformation">
<property name="text">
<string/>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</widget>
<customwidgets>

View File

@ -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();
}
}
}

View File

@ -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: