5 #if defined(HAVE_CONFIG_H) 15 #include <validation.h> 21 #include <QNetworkProxy> 23 #include <QStringList> 27 static const QString GetDefaultProxyAddress();
30 QAbstractListModel(parent), m_node(node)
56 if (!settings.contains(
"fHideTrayIcon"))
57 settings.setValue(
"fHideTrayIcon",
false);
61 if (!settings.contains(
"fMinimizeToTray"))
62 settings.setValue(
"fMinimizeToTray",
false);
65 if (!settings.contains(
"fMinimizeOnClose"))
66 settings.setValue(
"fMinimizeOnClose",
false);
70 if (!settings.contains(
"nDisplayUnit"))
74 if (!settings.contains(
"strThirdPartyTxUrls"))
75 settings.setValue(
"strThirdPartyTxUrls",
"");
78 if (!settings.contains(
"fCoinControlFeatures"))
79 settings.setValue(
"fCoinControlFeatures",
false);
91 if (!settings.contains(
"bPrune"))
92 settings.setValue(
"bPrune",
false);
93 if (!settings.contains(
"nPruneSize"))
94 settings.setValue(
"nPruneSize", 2);
96 const uint64_t nPruneSizeMB = settings.value(
"nPruneSize").toInt() * 1000;
97 if (!
m_node.
softSetArg(
"-prune", settings.value(
"bPrune").toBool() ? std::to_string(nPruneSizeMB) :
"0")) {
101 if (!settings.contains(
"nDatabaseCache"))
102 settings.setValue(
"nDatabaseCache", (qint64)nDefaultDbCache);
103 if (!
m_node.
softSetArg(
"-dbcache", settings.value(
"nDatabaseCache").toString().toStdString()))
106 if (!settings.contains(
"nThreadsScriptVerif"))
107 settings.setValue(
"nThreadsScriptVerif", DEFAULT_SCRIPTCHECK_THREADS);
108 if (!
m_node.
softSetArg(
"-par", settings.value(
"nThreadsScriptVerif").toString().toStdString()))
111 if (!settings.contains(
"strDataDir"))
116 if (!settings.contains(
"bSpendZeroConfChange"))
117 settings.setValue(
"bSpendZeroConfChange",
true);
118 if (!
m_node.
softSetBoolArg(
"-spendzeroconfchange", settings.value(
"bSpendZeroConfChange").toBool()))
123 if (!settings.contains(
"fUseUPnP"))
124 settings.setValue(
"fUseUPnP", DEFAULT_UPNP);
128 if (!settings.contains(
"fListen"))
129 settings.setValue(
"fListen", DEFAULT_LISTEN);
133 if (!settings.contains(
"fUseProxy"))
134 settings.setValue(
"fUseProxy",
false);
135 if (!settings.contains(
"addrProxy"))
136 settings.setValue(
"addrProxy", GetDefaultProxyAddress());
138 if (settings.value(
"fUseProxy").toBool() && !
m_node.
softSetArg(
"-proxy", settings.value(
"addrProxy").toString().toStdString()))
140 else if(!settings.value(
"fUseProxy").toBool() && !
gArgs.
GetArg(
"-proxy",
"").empty())
143 if (!settings.contains(
"fUseSeparateProxyTor"))
144 settings.setValue(
"fUseSeparateProxyTor",
false);
145 if (!settings.contains(
"addrSeparateProxyTor"))
146 settings.setValue(
"addrSeparateProxyTor", GetDefaultProxyAddress());
148 if (settings.value(
"fUseSeparateProxyTor").toBool() && !
m_node.
softSetArg(
"-onion", settings.value(
"addrSeparateProxyTor").toString().toStdString()))
150 else if(!settings.value(
"fUseSeparateProxyTor").toBool() && !
gArgs.
GetArg(
"-onion",
"").empty())
154 if (!settings.contains(
"language"))
155 settings.setValue(
"language",
"");
156 if (!
m_node.
softSetArg(
"-lang", settings.value(
"language").toString().toStdString()))
159 language = settings.value(
"language").toString();
165 static void CopySettings(QSettings& dst,
const QSettings& src)
167 for (
const QString& key : src.allKeys()) {
168 dst.setValue(key, src.value(key));
173 static void BackupSettings(
const fs::path& filename,
const QSettings& src)
178 CopySettings(dst, src);
186 BackupSettings(
GetDataDir(
true) /
"guisettings.ini.bak", settings);
190 dataDir = settings.value(
"strDataDir", dataDir).toString();
196 settings.setValue(
"strDataDir", dataDir);
199 settings.setValue(
"fReset",
true);
217 static ProxySetting GetProxySetting(QSettings &settings,
const QString &
name)
221 if (!settings.contains(
name)) {
225 QStringList ip_port = settings.value(
name).toString().split(
":", QString::SkipEmptyParts);
226 if (ip_port.size() == 2) {
227 return {
true, ip_port.at(0), ip_port.at(1)};
233 static void SetProxySetting(QSettings &settings,
const QString &
name,
const ProxySetting &ip_port)
235 settings.setValue(
name, ip_port.
ip +
":" + ip_port.
port);
238 static const QString GetDefaultProxyAddress()
246 if(role == Qt::EditRole)
259 return settings.value(
"fUseUPnP");
268 return settings.value(
"fUseProxy",
false);
270 return GetProxySetting(settings,
"addrProxy").
ip;
272 return GetProxySetting(settings,
"addrProxy").
port;
276 return settings.value(
"fUseSeparateProxyTor",
false);
278 return GetProxySetting(settings,
"addrSeparateProxyTor").
ip;
280 return GetProxySetting(settings,
"addrSeparateProxyTor").
port;
284 return settings.value(
"bSpendZeroConfChange");
291 return settings.value(
"language");
295 return settings.value(
"bPrune");
297 return settings.value(
"nPruneSize");
299 return settings.value(
"nDatabaseCache");
301 return settings.value(
"nThreadsScriptVerif");
303 return settings.value(
"fListen");
314 bool successful =
true;
315 if(role == Qt::EditRole)
333 settings.setValue(
"fUseUPnP", value.toBool());
343 if (settings.value(
"fUseProxy") != value) {
344 settings.setValue(
"fUseProxy", value.toBool());
349 auto ip_port = GetProxySetting(settings,
"addrProxy");
350 if (!ip_port.
is_set || ip_port.
ip != value.toString()) {
351 ip_port.
ip = value.toString();
352 SetProxySetting(settings,
"addrProxy", ip_port);
358 auto ip_port = GetProxySetting(settings,
"addrProxy");
359 if (!ip_port.
is_set || ip_port.
port != value.toString()) {
360 ip_port.
port = value.toString();
361 SetProxySetting(settings,
"addrProxy", ip_port);
369 if (settings.value(
"fUseSeparateProxyTor") != value) {
370 settings.setValue(
"fUseSeparateProxyTor", value.toBool());
375 auto ip_port = GetProxySetting(settings,
"addrSeparateProxyTor");
376 if (!ip_port.
is_set || ip_port.
ip != value.toString()) {
377 ip_port.
ip = value.toString();
378 SetProxySetting(settings,
"addrSeparateProxyTor", ip_port);
384 auto ip_port = GetProxySetting(settings,
"addrSeparateProxyTor");
385 if (!ip_port.
is_set || ip_port.
port != value.toString()) {
386 ip_port.
port = value.toString();
387 SetProxySetting(settings,
"addrSeparateProxyTor", ip_port);
395 if (settings.value(
"bSpendZeroConfChange") != value) {
396 settings.setValue(
"bSpendZeroConfChange", value);
412 if (settings.value(
"language") != value) {
413 settings.setValue(
"language", value);
423 if (settings.value(
"bPrune") != value) {
424 settings.setValue(
"bPrune", value);
429 if (settings.value(
"nPruneSize") != value) {
430 settings.setValue(
"nPruneSize", value);
435 if (settings.value(
"nDatabaseCache") != value) {
436 settings.setValue(
"nDatabaseCache", value);
441 if (settings.value(
"nThreadsScriptVerif") != value) {
442 settings.setValue(
"nThreadsScriptVerif", value);
447 if (settings.value(
"fListen") != value) {
448 settings.setValue(
"fListen", value);
457 Q_EMIT dataChanged(index, index);
480 proxy.setType(QNetworkProxy::Socks5Proxy);
481 proxy.setHostName(QString::fromStdString(curProxy.
proxy.
ToStringIP()));
487 proxy.setType(QNetworkProxy::NoProxy);
495 return settings.setValue(
"fRestartRequired", fRequired);
501 return settings.value(
"fRestartRequired",
false).toBool();
509 static const char strSettingsVersionKey[] =
"nSettingsVersion";
510 int settingsVersion = settings.contains(strSettingsVersionKey) ? settings.value(strSettingsVersionKey).toInt() : 0;
511 if (settingsVersion < CLIENT_VERSION)
516 if (settingsVersion < 130000 && settings.contains(
"nDatabaseCache") && settings.value(
"nDatabaseCache").toLongLong() == 100)
517 settings.setValue(
"nDatabaseCache", (qint64)nDefaultDbCache);
519 settings.setValue(strSettingsVersionKey, CLIENT_VERSION);
524 if (settings.contains(
"addrProxy") && settings.value(
"addrProxy").toString().endsWith(
"%2")) {
525 settings.setValue(
"addrProxy", GetDefaultProxyAddress());
530 if (settings.contains(
"addrSeparateProxyTor") && settings.value(
"addrSeparateProxyTor").toString().endsWith(
"%2")) {
531 settings.setValue(
"addrSeparateProxyTor", GetDefaultProxyAddress());
OptionsModel(interfaces::Node &node, QObject *parent=0, bool resetSettings=false)
unsigned short GetPort() const
bool setData(const QModelIndex &index, const QVariant &value, int role=Qt::EditRole)
void addOverriddenOption(const std::string &option)
void hideTrayIconChanged(bool)
bool getProxySettings(QNetworkProxy &proxy) const
virtual bool getProxy(Network net, proxyType &proxy_info)=0
Get proxy.
bool GetStartOnSystemStartup()
void coinControlFeaturesChanged(bool)
bool isRestartRequired() const
static QString getDefaultDataDirectory()
Determine default data directory for operating system.
interfaces::Node & m_node
void setDisplayUnit(const QVariant &value)
Updates current unit in memory, settings and emits displayUnitChanged(newUnit) signal.
std::string ToStringIP() const
const char * DEFAULT_GUI_PROXY_HOST
void Init(bool resetSettings=false)
void displayUnitChanged(int unit)
bool fCoinControlFeatures
virtual void mapPort(bool use_upnp)=0
Map port.
void setRestartRequired(bool fRequired)
QString strThirdPartyTxUrls
QVariant data(const QModelIndex &index, int role=Qt::DisplayRole) const
std::string GetArg(const std::string &strArg, const std::string &strDefault) const
Return string argument or default value.
bool SetStartOnSystemStartup(bool fAutoStart)
const fs::path & GetDataDir(bool fNetSpecific)
virtual bool softSetArg(const std::string &arg, const std::string &value)=0
Set a command line argument if it doesn't already have a value.
QString boostPathToQString(const fs::path &path)
int rowCount(const QModelIndex &parent=QModelIndex()) const
Top-level interface for a bitcoin node (bsha3d process).
QString strOverriddenByCommandLine
virtual bool softSetBoolArg(const std::string &arg, bool value)=0
Set a command line boolean argument if it doesn't already have a value.