#include "optionsmodel.h"
#include "bitcoinunits.h"
+#include <QSettings>
-#include "headers.h"
+#include "init.h"
+#include "walletdb.h"
+#include "guiutil.h"
-OptionsModel::OptionsModel(CWallet *wallet, QObject *parent) :
- QAbstractListModel(parent),
- wallet(wallet),
- nDisplayUnit(BitcoinUnits::BTC),
- bDisplayAddresses(false)
+OptionsModel::OptionsModel(QObject *parent) :
+ QAbstractListModel(parent)
{
- // Read our specific settings from the wallet db
- CWalletDB walletdb(wallet->strWalletFile);
- walletdb.ReadSetting("nDisplayUnit", nDisplayUnit);
- walletdb.ReadSetting("bDisplayAddresses", bDisplayAddresses);
+ Init();
+}
+
+bool static ApplyProxySettings()
+{
+ QSettings settings;
+ CService addrProxy(settings.value("addrProxy", "127.0.0.1:9050").toString().toStdString());
+ int nSocksVersion(settings.value("nSocksVersion", 5).toInt());
+ if (!settings.value("fUseProxy", false).toBool()) {
+ addrProxy = CService();
+ nSocksVersion = 0;
+ return false;
+ }
+ if (nSocksVersion && !addrProxy.IsValid())
+ return false;
+
+ if (!IsLimited(NET_IPV4))
+ SetProxy(NET_IPV4, addrProxy, nSocksVersion);
+ if (nSocksVersion > 4) {
+#ifdef USE_IPV6
+ if (!IsLimited(NET_IPV6))
+ SetProxy(NET_IPV6, addrProxy, nSocksVersion);
+#endif
+ }
+
+ SetNameProxy(addrProxy, nSocksVersion);
+
+ return true;
+}
+
+bool static ApplyTorSettings()
+{
+ QSettings settings;
+ CService addrTor(settings.value("addrTor", "127.0.0.1:9050").toString().toStdString());
+ if (!settings.value("fUseTor", false).toBool()) {
+ addrTor = CService();
+ return false;
+ }
+ if (!addrTor.IsValid())
+ return false;
+
+ SetProxy(NET_TOR, addrTor, 5);
+ SetReachable(NET_TOR);
+
+ return true;
+}
+
+void OptionsModel::Init()
+{
+ QSettings settings;
+
+ // These are Qt-only settings:
+ nDisplayUnit = settings.value("nDisplayUnit", BitcoinUnits::BTC).toInt();
+ bDisplayAddresses = settings.value("bDisplayAddresses", false).toBool();
+ if (!settings.contains("strThirdPartyTxUrls")) {
+ if(fTestNet)
+ settings.setValue("strThirdPartyTxUrls", "");
+ else
+ settings.setValue("strThirdPartyTxUrls", "https://bitinfocharts.com/novacoin/tx/%s|https://coinplorer.com/NVC/Transactions/%s|https://explorer.novaco.in/tx/%s|https://bchain.info/NVC/tx/%s");
+ }
+ strThirdPartyTxUrls = settings.value("strThirdPartyTxUrls", "https://bitinfocharts.com/novacoin/tx/%s|https://coinplorer.com/NVC/Transactions/%s|https://explorer.novaco.in/tx/%s|https://bchain.info/NVC/tx/%s").toString();
+ fMinimizeToTray = settings.value("fMinimizeToTray", false).toBool();
+ fMinimizeOnClose = settings.value("fMinimizeOnClose", false).toBool();
+ fCoinControlFeatures = settings.value("fCoinControlFeatures", false).toBool();
+ nTransactionFee = settings.value("nTransactionFee").toLongLong();
+ language = settings.value("language", "").toString();
+
+ // These are shared with core Bitcoin; we want
+ // command-line options to override the GUI settings:
+ if ( !(settings.value("fTorOnly").toBool() && settings.contains("addrTor")) ) {
+ if (settings.contains("addrProxy") && settings.value("fUseProxy").toBool())
+ SoftSetArg("-proxy", settings.value("addrProxy").toString().toStdString());
+ if (settings.contains("nSocksVersion") && settings.value("fUseProxy").toBool())
+ SoftSetArg("-socks", settings.value("nSocksVersion").toString().toStdString());
+ }
+
+ if (settings.contains("addrTor") && settings.value("fUseTor").toBool()) {
+ SoftSetArg("-tor", settings.value("addrTor").toString().toStdString());
+ if (settings.value("fTorOnly").toBool())
+ SoftSetArg("-onlynet", "tor");
+
+ if (settings.value("TorName").toString().length() == 22) {
+ std::string strTorName = settings.value("TorName").toString().toStdString();
+
+ CService addrTorName(strTorName, GetListenPort());
+ if (addrTorName.IsValid())
+ SoftSetArg("-torname", strTorName);
+ }
+ }
+
+ if (settings.contains("detachDB"))
+ SoftSetBoolArg("-detachdb", settings.value("detachDB").toBool());
+ if (!language.isEmpty())
+ SoftSetArg("-lang", language.toStdString());
}
int OptionsModel::rowCount(const QModelIndex & parent) const
{
if(role == Qt::EditRole)
{
+ QSettings settings;
switch(index.row())
{
case StartAtStartup:
- return QVariant();
+ return QVariant(GUIUtil::GetStartOnSystemStartup());
case MinimizeToTray:
return QVariant(fMinimizeToTray);
- case MapPortUPnP:
- return QVariant(fUseUPnP);
case MinimizeOnClose:
return QVariant(fMinimizeOnClose);
- case ConnectSOCKS4:
- return QVariant(fUseProxy);
- case ProxyIP:
- return QVariant(QString::fromStdString(addrProxy.ToStringIP()));
- case ProxyPort:
- return QVariant(QString::fromStdString(addrProxy.ToStringPort()));
+ case ProxyUse:
+ return settings.value("fUseProxy", false);
+ case ProxyIP: {
+ proxyType proxy;
+ if (GetProxy(NET_IPV4, proxy))
+ return QVariant(QString::fromStdString(proxy.first.ToStringIP()));
+ else
+ return QVariant(QString::fromStdString("127.0.0.1"));
+ }
+ case ProxyPort: {
+ proxyType proxy;
+ if (GetProxy(NET_IPV4, proxy))
+ return QVariant(proxy.first.GetPort());
+ else
+ return QVariant(nSocksDefault);
+ }
+ case ProxySocksVersion:
+ return settings.value("nSocksVersion", 5);
+ case TorUse:
+ return settings.value("fUseTor", false);
+ case TorIP: {
+ proxyType proxy;
+ if (GetProxy(NET_TOR, proxy))
+ return QVariant(QString::fromStdString(proxy.first.ToStringIP()));
+ else
+ return QVariant(QString::fromStdString("127.0.0.1"));
+ }
+ case TorPort: {
+ proxyType proxy;
+ if (GetProxy(NET_TOR, proxy))
+ return QVariant(proxy.first.GetPort());
+ else
+ return QVariant(nSocksDefault);
+ }
+ case TorOnly:
+ return settings.value("fTorOnly", false);
+ case TorName:
+ return settings.value("TorName", "");
case Fee:
- return QVariant(nTransactionFee);
+ return QVariant(static_cast<qlonglong>(nTransactionFee));
case DisplayUnit:
return QVariant(nDisplayUnit);
case DisplayAddresses:
return QVariant(bDisplayAddresses);
+ case ThirdPartyTxUrls:
+ return QVariant(strThirdPartyTxUrls);
+ case DetachDatabases:
+ return QVariant(bitdb.GetDetach());
+ case Language:
+ return settings.value("language", "");
+ case CoinControlFeatures:
+ return QVariant(fCoinControlFeatures);
default:
return QVariant();
}
bool successful = true; /* set to false on parse error */
if(role == Qt::EditRole)
{
- CWalletDB walletdb(wallet->strWalletFile);
+ QSettings settings;
switch(index.row())
{
case StartAtStartup:
- successful = false; /*TODO*/
+ successful = GUIUtil::SetStartOnSystemStartup(value.toBool());
break;
case MinimizeToTray:
fMinimizeToTray = value.toBool();
- walletdb.WriteSetting("fMinimizeToTray", fMinimizeToTray);
- break;
- case MapPortUPnP:
- fUseUPnP = value.toBool();
- walletdb.WriteSetting("fUseUPnP", fUseUPnP);
-#ifdef USE_UPNP
- MapPort(fUseUPnP);
-#endif
+ settings.setValue("fMinimizeToTray", fMinimizeToTray);
break;
case MinimizeOnClose:
fMinimizeOnClose = value.toBool();
- walletdb.WriteSetting("fMinimizeOnClose", fMinimizeOnClose);
+ settings.setValue("fMinimizeOnClose", fMinimizeOnClose);
break;
- case ConnectSOCKS4:
- fUseProxy = value.toBool();
- walletdb.WriteSetting("fUseProxy", fUseProxy);
+ case ProxyUse:
+ settings.setValue("fUseProxy", value.toBool());
+ ApplyProxySettings();
break;
- case ProxyIP:
- {
- // Use CAddress to parse and check IP
- CAddress addr(value.toString().toStdString() + ":1");
- if (addr.ip != INADDR_NONE)
- {
- addrProxy.ip = addr.ip;
- walletdb.WriteSetting("addrProxy", addrProxy);
- }
- else
- {
- successful = false;
- }
- }
+ case ProxyIP: {
+ proxyType proxy;
+ proxy.first = CService("127.0.0.1", nSocksDefault);
+ GetProxy(NET_IPV4, proxy);
+
+ CNetAddr addr(value.toString().toStdString());
+ proxy.first.SetIP(addr);
+ settings.setValue("addrProxy", proxy.first.ToStringIPPort().c_str());
+ successful = ApplyProxySettings();
+ }
+ break;
+ case ProxyPort: {
+ proxyType proxy;
+ proxy.first = CService("127.0.0.1", nSocksDefault);
+ GetProxy(NET_IPV4, proxy);
+
+ proxy.first.SetPort(value.toInt());
+ settings.setValue("addrProxy", proxy.first.ToStringIPPort().c_str());
+ successful = ApplyProxySettings();
+ }
+ break;
+ case ProxySocksVersion: {
+ proxyType proxy;
+ proxy.second = 5;
+ GetProxy(NET_IPV4, proxy);
+
+ proxy.second = value.toInt();
+ settings.setValue("nSocksVersion", proxy.second);
+ successful = ApplyProxySettings();
+ }
+ break;
+ case TorUse: {
+ settings.setValue("fUseTor", value.toBool());
+ ApplyTorSettings();
+ }
+ break;
+ case TorIP: {
+ proxyType proxy;
+ proxy.first = CService("127.0.0.1", nSocksDefault);
+ GetProxy(NET_TOR, proxy);
+
+ CNetAddr addr(value.toString().toStdString());
+ proxy.first.SetIP(addr);
+ settings.setValue("addrTor", proxy.first.ToStringIPPort().c_str());
+ successful = ApplyTorSettings();
+ }
+ break;
+ case TorPort: {
+ proxyType proxy;
+ proxy.first = CService("127.0.0.1", nSocksDefault);
+ GetProxy(NET_TOR, proxy);
+
+ proxy.first.SetPort((uint16_t)value.toUInt());
+ settings.setValue("addrTor", proxy.first.ToStringIPPort().c_str());
+ successful = ApplyTorSettings();
+ }
+ break;
+ case TorOnly: {
+ settings.setValue("fTorOnly", value.toBool());
+ ApplyTorSettings();
+ }
+ case TorName: {
+ settings.setValue("TorName", value.toString());
+ }
+ break;
+ case Fee:
+ nTransactionFee = value.toLongLong();
+ settings.setValue("nTransactionFee", static_cast<qlonglong>(nTransactionFee));
+ emit transactionFeeChanged(nTransactionFee);
break;
- case ProxyPort:
- {
- int nPort = atoi(value.toString().toAscii().data());
- if (nPort > 0 && nPort < std::numeric_limits<unsigned short>::max())
- {
- addrProxy.port = htons(nPort);
- walletdb.WriteSetting("addrProxy", addrProxy);
- }
- else
- {
- successful = false;
- }
- }
+ case DisplayUnit:
+ nDisplayUnit = value.toInt();
+ settings.setValue("nDisplayUnit", nDisplayUnit);
+ emit displayUnitChanged(nDisplayUnit);
break;
- case Fee: {
- nTransactionFee = value.toLongLong();
- walletdb.WriteSetting("nTransactionFee", nTransactionFee);
+ case DisplayAddresses:
+ bDisplayAddresses = value.toBool();
+ settings.setValue("bDisplayAddresses", bDisplayAddresses);
+ break;
+ case DetachDatabases: {
+ bool fDetachDB = value.toBool();
+ bitdb.SetDetach(fDetachDB);
+ settings.setValue("detachDB", fDetachDB);
}
break;
- case DisplayUnit: {
- int unit = value.toInt();
- nDisplayUnit = unit;
- walletdb.WriteSetting("nDisplayUnit", nDisplayUnit);
- emit displayUnitChanged(unit);
+ case ThirdPartyTxUrls:
+ if (strThirdPartyTxUrls != value.toString()) {
+ strThirdPartyTxUrls = value.toString();
+ settings.setValue("strThirdPartyTxUrls", strThirdPartyTxUrls);
}
- case DisplayAddresses: {
- bDisplayAddresses = value.toBool();
- walletdb.WriteSetting("bDisplayAddresses", bDisplayAddresses);
+ break;
+ case Language:
+ settings.setValue("language", value);
+ break;
+ case CoinControlFeatures: {
+ fCoinControlFeatures = value.toBool();
+ settings.setValue("fCoinControlFeatures", fCoinControlFeatures);
+ emit coinControlFeaturesChanged(fCoinControlFeatures);
}
+ break;
default:
break;
}
return nTransactionFee;
}
+bool OptionsModel::getCoinControlFeatures()
+{
+ return fCoinControlFeatures;
+}
+
bool OptionsModel::getMinimizeToTray()
{
return fMinimizeToTray;