Skip to content

Commit 0c9722a

Browse files
qml, proxy: Persist proxy settings
Addding the logic to persist the ip address and port values of both the default proxy and the tor proxy configuration into settings.js.
1 parent 4dea7c9 commit 0c9722a

File tree

3 files changed

+134
-4
lines changed

3 files changed

+134
-4
lines changed

Diff for: src/qml/components/ProxySettings.qml

+12-4
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,9 @@ ColumnLayout {
3535
} else {
3636
defaultProxy.state = "FILLED"
3737
}
38+
optionsModel.setIsProxySet(checked)
3839
}
40+
checked: optionsModel.isProxySet
3941
}
4042
onClicked: {
4143
loadedItem.toggle()
@@ -52,10 +54,12 @@ ColumnLayout {
5254
showErrorText: !defaultProxy.loadedItem.validInput && defaultProxyEnable.loadedItem.checked
5355
actionItem: IPAddressValueInput {
5456
parentState: defaultProxy.state
55-
description: nodeModel.defaultProxyAddress()
57+
text: optionsModel.proxyAddress
5658
activeFocusOnTab: true
5759
onTextChanged: {
58-
validInput = nodeModel.validateProxyAddress(text);
60+
if (validInput = nodeModel.validateProxyAddress(text)) {
61+
optionsModel.setProxyAddress(text);
62+
}
5963
}
6064
}
6165
onClicked: {
@@ -86,7 +90,9 @@ ColumnLayout {
8690
} else {
8791
torProxy.state = "FILLED"
8892
}
93+
optionsModel.setIsTorProxySet(checked)
8994
}
95+
checked: optionsModel.isTorProxySet
9096
}
9197
onClicked: {
9298
loadedItem.toggle()
@@ -103,10 +109,12 @@ ColumnLayout {
103109
showErrorText: !torProxy.loadedItem.validInput && torProxyEnable.loadedItem.checked
104110
actionItem: IPAddressValueInput {
105111
parentState: torProxy.state
106-
description: nodeModel.defaultProxyAddress()
112+
text: optionsModel.torProxyAddress
107113
activeFocusOnTab: true
108114
onTextChanged: {
109-
validInput = nodeModel.validateProxyAddress(text);
115+
if (validInput = nodeModel.validateProxyAddress(text)) {
116+
optionsModel.setTorProxyAddress(text);
117+
}
110118
}
111119
}
112120
onClicked: {

Diff for: src/qml/models/options_model.cpp

+98
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,14 @@ OptionsQmlModel::OptionsQmlModel(interfaces::Node& node, bool is_onboarded)
4545
m_upnp = SettingToBool(m_node.getPersistentSetting("upnp"), DEFAULT_UPNP);
4646

4747
m_dataDir = getDefaultDataDirString();
48+
49+
m_proxy_address = QString::fromStdString(SettingToString(m_node.getPersistentSetting("proxy"), ""));
50+
51+
m_is_proxy_set = evaluateIfProxyIsSet();
52+
53+
m_tor_proxy_address = QString::fromStdString(SettingToString(m_node.getPersistentSetting("onion"), ""));
54+
55+
m_is_tor_proxy_set = evaluateIfTorProxyIsSet();
4856
}
4957

5058
void OptionsQmlModel::setDbcacheSizeMiB(int new_dbcache_size_mib)
@@ -225,5 +233,95 @@ void OptionsQmlModel::onboard()
225233
if (m_upnp) {
226234
m_node.updateRwSetting("upnp", m_upnp);
227235
}
236+
if (m_is_proxy_set && !m_proxy_address.isEmpty() && m_node.validateProxyAddress(m_proxy_address.toStdString())) {
237+
m_node.updateRwSetting("proxy", m_proxy_address.toStdString());
238+
}
239+
if (m_is_tor_proxy_set && !m_tor_proxy_address.isEmpty() && m_node.validateProxyAddress(m_tor_proxy_address.toStdString())) {
240+
m_node.updateRwSetting("onion", m_tor_proxy_address.toStdString());
241+
}
228242
m_onboarded = true;
229243
}
244+
245+
void OptionsQmlModel::setProxyAddress(QString new_proxy_address)
246+
{
247+
if (new_proxy_address != m_proxy_address) {
248+
m_proxy_address = new_proxy_address;
249+
if (m_onboarded && m_node.validateProxyAddress(new_proxy_address.toStdString())) {
250+
m_node.updateRwSetting("proxy", new_proxy_address.toStdString());
251+
}
252+
Q_EMIT proxyAddressChanged(new_proxy_address);
253+
}
254+
}
255+
256+
void OptionsQmlModel::setIsProxySet(bool is_set)
257+
{
258+
if (is_set != m_is_proxy_set) {
259+
m_is_proxy_set = is_set;
260+
if (m_onboarded && m_is_proxy_set && m_node.validateProxyAddress(m_proxy_address.toStdString())) {
261+
m_node.updateRwSetting("proxy", m_proxy_address.toStdString());
262+
}
263+
if (!m_is_proxy_set) {
264+
m_node.updateRwSetting("proxy", {});
265+
}
266+
Q_EMIT isProxySetChanged(is_set);
267+
}
268+
}
269+
270+
bool OptionsQmlModel::evaluateIfProxyIsSet()
271+
{
272+
bool proxyHasBeenSet;
273+
274+
if (!m_proxy_address.isEmpty()) {
275+
if (!m_node.validateProxyAddress(m_proxy_address.toStdString())) {
276+
m_proxy_address = "";
277+
}
278+
}
279+
280+
proxyHasBeenSet = !m_proxy_address.isEmpty();
281+
if (!proxyHasBeenSet) {
282+
m_proxy_address = QString::fromStdString(m_node.defaultProxyAddress());
283+
}
284+
return proxyHasBeenSet;
285+
}
286+
287+
void OptionsQmlModel::setTorProxyAddress(QString new_proxy_address)
288+
{
289+
if (new_proxy_address != m_tor_proxy_address) {
290+
m_tor_proxy_address = new_proxy_address;
291+
if (m_onboarded && m_node.validateProxyAddress(new_proxy_address.toStdString())) {
292+
m_node.updateRwSetting("onion", new_proxy_address.toStdString());
293+
}
294+
Q_EMIT torProxyAddressChanged(new_proxy_address);
295+
}
296+
}
297+
298+
void OptionsQmlModel::setIsTorProxySet(bool is_set)
299+
{
300+
if (is_set != m_is_tor_proxy_set) {
301+
m_is_tor_proxy_set = is_set;
302+
if (m_onboarded && m_is_proxy_set && m_node.validateProxyAddress(m_tor_proxy_address.toStdString())) {
303+
m_node.updateRwSetting("onion", m_tor_proxy_address.toStdString());
304+
}
305+
if (!m_is_proxy_set) {
306+
m_node.updateRwSetting("onion", {});
307+
}
308+
Q_EMIT isTorProxySetChanged(is_set);
309+
}
310+
}
311+
312+
bool OptionsQmlModel::evaluateIfTorProxyIsSet()
313+
{
314+
bool proxyHasBeenSet;
315+
316+
if (!m_tor_proxy_address.isEmpty()) {
317+
if (!m_node.validateProxyAddress(m_tor_proxy_address.toStdString())) {
318+
m_tor_proxy_address = "";
319+
}
320+
}
321+
322+
proxyHasBeenSet = !m_tor_proxy_address.isEmpty();
323+
if (!proxyHasBeenSet) {
324+
m_tor_proxy_address = QString::fromStdString(m_node.defaultProxyAddress());
325+
}
326+
return proxyHasBeenSet;
327+
}

Diff for: src/qml/models/options_model.h

+24
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,14 @@ class OptionsQmlModel : public QObject
3737
Q_PROPERTY(QString dataDir READ dataDir WRITE setDataDir NOTIFY dataDirChanged)
3838
Q_PROPERTY(QString getDefaultDataDirString READ getDefaultDataDirString CONSTANT)
3939
Q_PROPERTY(QUrl getDefaultDataDirectory READ getDefaultDataDirectory CONSTANT)
40+
Q_PROPERTY(QString proxyAddress READ proxyAddress WRITE setProxyAddress NOTIFY proxyAddressChanged)
41+
Q_PROPERTY(bool isProxySet READ isProxySet WRITE setIsProxySet NOTIFY isProxySetChanged)
42+
Q_PROPERTY(QString torProxyAddress READ torProxyAddress WRITE setTorProxyAddress NOTIFY proxyAddressChanged)
43+
Q_PROPERTY(bool isTorProxySet READ isTorProxySet WRITE setIsTorProxySet NOTIFY isTorProxySetChanged)
44+
45+
protected:
46+
bool evaluateIfProxyIsSet();
47+
bool evaluateIfTorProxyIsSet();
4048

4149
public:
4250
explicit OptionsQmlModel(interfaces::Node& node, bool is_onboarded);
@@ -67,6 +75,14 @@ class OptionsQmlModel : public QObject
6775
QUrl getDefaultDataDirectory();
6876
Q_INVOKABLE bool setCustomDataDirArgs(QString path);
6977
Q_INVOKABLE QString getCustomDataDirString();
78+
QString proxyAddress() const { return m_proxy_address; }
79+
Q_INVOKABLE void setProxyAddress(QString new_proxy_address);
80+
bool isProxySet() const { return m_is_proxy_set; }
81+
Q_INVOKABLE void setIsProxySet(bool is_set);
82+
QString torProxyAddress() const { return m_tor_proxy_address; }
83+
Q_INVOKABLE void setTorProxyAddress(QString new_proxy_address);
84+
bool isTorProxySet() const { return m_is_tor_proxy_set; }
85+
Q_INVOKABLE void setIsTorProxySet(bool is_set);
7086

7187
public Q_SLOTS:
7288
void setCustomDataDirString(const QString &new_custom_datadir_string) {
@@ -85,6 +101,10 @@ public Q_SLOTS:
85101
void upnpChanged(bool new_upnp);
86102
void customDataDirStringChanged(QString new_custom_datadir_string);
87103
void dataDirChanged(QString new_data_dir);
104+
void proxyAddressChanged(QString new_proxy_address);
105+
void isProxySetChanged(bool is_set);
106+
void torProxyAddressChanged(QString new_proxy_address);
107+
void isTorProxySetChanged(bool is_set);
88108

89109
private:
90110
interfaces::Node& m_node;
@@ -105,6 +125,10 @@ public Q_SLOTS:
105125
bool m_upnp;
106126
QString m_custom_datadir_string;
107127
QString m_dataDir;
128+
QString m_proxy_address;
129+
bool m_is_proxy_set;
130+
QString m_tor_proxy_address;
131+
bool m_is_tor_proxy_set;
108132

109133
common::SettingsValue pruneSetting() const;
110134
};

0 commit comments

Comments
 (0)