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.