1 #include "optionsmodel.h"
2 #include "bitcoinunits.h"
10 OptionsModel::OptionsModel(QObject *parent) :
11 QAbstractListModel(parent)
16 bool static ApplyProxySettings()
19 CService addrProxy(settings.value("addrProxy", "127.0.0.1:9050").toString().toStdString());
20 int nSocksVersion(settings.value("nSocksVersion", 5).toInt());
21 if (!settings.value("fUseProxy", false).toBool()) {
22 addrProxy = CService();
26 if (nSocksVersion && !addrProxy.IsValid())
29 if (!IsLimited(NET_IPV4))
30 SetProxy(NET_IPV4, addrProxy, nSocksVersion);
31 if (nSocksVersion > 4) {
33 if (!IsLimited(NET_IPV6))
34 SetProxy(NET_IPV6, addrProxy, nSocksVersion);
38 SetNameProxy(addrProxy, nSocksVersion);
43 bool static ApplyTorSettings()
46 CService addrTor(settings.value("addrTor", "127.0.0.1:9050").toString().toStdString());
47 if (!settings.value("fUseTor", false).toBool()) {
51 if (!addrTor.IsValid())
54 SetProxy(NET_TOR, addrTor, 5);
55 SetReachable(NET_TOR);
60 void OptionsModel::Init()
64 // These are Qt-only settings:
65 nDisplayUnit = settings.value("nDisplayUnit", BitcoinUnits::BTC).toInt();
66 bDisplayAddresses = settings.value("bDisplayAddresses", false).toBool();
67 if (!settings.contains("strThirdPartyTxUrls")) {
69 settings.setValue("strThirdPartyTxUrls", "");
71 settings.setValue("strThirdPartyTxUrls", "https://bitinfocharts.com/novacoin/tx/%s|https://explorer.novaco.in/tx/%s|https://novacoin.ru/explorer/tx/%s|https://prohashing.com/explorer/novacoin/%s");
73 strThirdPartyTxUrls = settings.value("strThirdPartyTxUrls", "https://bitinfocharts.com/novacoin/tx/%s|https://explorer.novaco.in/tx/%s|https://novacoin.ru/explorer/tx/%s|https://prohashing.com/explorer/novacoin/%s").toString();
74 fMinimizeToTray = settings.value("fMinimizeToTray", false).toBool();
75 fMinimizeOnClose = settings.value("fMinimizeOnClose", false).toBool();
76 fCoinControlFeatures = settings.value("fCoinControlFeatures", false).toBool();
77 nTransactionFee = settings.value("nTransactionFee").toLongLong();
78 language = settings.value("language", "").toString();
80 // These are shared with core Bitcoin; we want
81 // command-line options to override the GUI settings:
82 if ( !(settings.value("fTorOnly").toBool() && settings.contains("addrTor")) ) {
83 if (settings.contains("addrProxy") && settings.value("fUseProxy").toBool())
84 SoftSetArg("-proxy", settings.value("addrProxy").toString().toStdString());
85 if (settings.contains("nSocksVersion") && settings.value("fUseProxy").toBool())
86 SoftSetArg("-socks", settings.value("nSocksVersion").toString().toStdString());
89 if (settings.contains("addrTor") && settings.value("fUseTor").toBool()) {
90 SoftSetArg("-tor", settings.value("addrTor").toString().toStdString());
91 if (settings.value("fTorOnly").toBool())
92 SoftSetArg("-onlynet", "tor");
94 if (settings.value("TorName").toString().length() == 22) {
95 std::string strTorName = settings.value("TorName").toString().toStdString();
97 CService addrTorName(strTorName, GetListenPort());
98 if (addrTorName.IsValid())
99 SoftSetArg("-torname", strTorName);
103 if (!fTestNet && settings.contains("externalSeeder") && settings.value("externalSeeder").toString() != "") {
104 SoftSetArg("-peercollector", settings.value("externalSeeder").toString().toStdString());
107 if (settings.contains("detachDB"))
108 SoftSetBoolArg("-detachdb", settings.value("detachDB").toBool());
109 if (!language.isEmpty())
110 SoftSetArg("-lang", language.toStdString());
113 int OptionsModel::rowCount(const QModelIndex & parent) const
115 return OptionIDRowCount;
118 QVariant OptionsModel::data(const QModelIndex & index, int role) const
120 if(role == Qt::EditRole)
126 return QVariant(GUIUtil::GetStartOnSystemStartup());
128 return QVariant(fMinimizeToTray);
129 case MinimizeOnClose:
130 return QVariant(fMinimizeOnClose);
132 return settings.value("fUseProxy", false);
135 if (GetProxy(NET_IPV4, proxy))
136 return QVariant(QString::fromStdString(proxy.first.ToStringIP()));
138 return QVariant(QString::fromStdString("127.0.0.1"));
142 if (GetProxy(NET_IPV4, proxy))
143 return QVariant(proxy.first.GetPort());
145 return QVariant(nSocksDefault);
147 case ProxySocksVersion:
148 return settings.value("nSocksVersion", 5);
150 return settings.value("fUseTor", false);
153 if (GetProxy(NET_TOR, proxy))
154 return QVariant(QString::fromStdString(proxy.first.ToStringIP()));
156 return QVariant(QString::fromStdString("127.0.0.1"));
160 if (GetProxy(NET_TOR, proxy))
161 return QVariant(proxy.first.GetPort());
163 return QVariant(nSocksDefault);
166 return settings.value("fTorOnly", false);
168 return settings.value("TorName", "");
170 return settings.value("externalSeeder", "");
172 return QVariant(static_cast<qlonglong>(nTransactionFee));
174 return QVariant(nDisplayUnit);
175 case DisplayAddresses:
176 return QVariant(bDisplayAddresses);
177 case ThirdPartyTxUrls:
178 return QVariant(strThirdPartyTxUrls);
179 case DetachDatabases:
180 return QVariant(bitdb.GetDetach());
182 return settings.value("language", "");
183 case CoinControlFeatures:
184 return QVariant(fCoinControlFeatures);
192 bool OptionsModel::setData(const QModelIndex & index, const QVariant & value, int role)
194 bool successful = true; /* set to false on parse error */
195 if(role == Qt::EditRole)
201 successful = GUIUtil::SetStartOnSystemStartup(value.toBool());
204 fMinimizeToTray = value.toBool();
205 settings.setValue("fMinimizeToTray", fMinimizeToTray);
207 case MinimizeOnClose:
208 fMinimizeOnClose = value.toBool();
209 settings.setValue("fMinimizeOnClose", fMinimizeOnClose);
212 settings.setValue("fUseProxy", value.toBool());
213 ApplyProxySettings();
217 proxy.first = CService("127.0.0.1", nSocksDefault);
218 GetProxy(NET_IPV4, proxy);
220 CNetAddr addr(value.toString().toStdString());
221 proxy.first.SetIP(addr);
222 settings.setValue("addrProxy", proxy.first.ToStringIPPort().c_str());
223 successful = ApplyProxySettings();
228 proxy.first = CService("127.0.0.1", nSocksDefault);
229 GetProxy(NET_IPV4, proxy);
231 proxy.first.SetPort(value.toInt());
232 settings.setValue("addrProxy", proxy.first.ToStringIPPort().c_str());
233 successful = ApplyProxySettings();
236 case ProxySocksVersion: {
239 GetProxy(NET_IPV4, proxy);
241 proxy.second = value.toInt();
242 settings.setValue("nSocksVersion", proxy.second);
243 successful = ApplyProxySettings();
247 settings.setValue("fUseTor", value.toBool());
253 proxy.first = CService("127.0.0.1", nSocksDefault);
254 GetProxy(NET_TOR, proxy);
256 CNetAddr addr(value.toString().toStdString());
257 proxy.first.SetIP(addr);
258 settings.setValue("addrTor", proxy.first.ToStringIPPort().c_str());
259 successful = ApplyTorSettings();
264 proxy.first = CService("127.0.0.1", nSocksDefault);
265 GetProxy(NET_TOR, proxy);
267 proxy.first.SetPort((uint16_t)value.toUInt());
268 settings.setValue("addrTor", proxy.first.ToStringIPPort().c_str());
269 successful = ApplyTorSettings();
273 settings.setValue("fTorOnly", value.toBool());
277 settings.setValue("TorName", value.toString());
281 settings.setValue("externalSeeder", value.toString());
284 nTransactionFee = value.toLongLong();
285 settings.setValue("nTransactionFee", static_cast<qlonglong>(nTransactionFee));
286 emit transactionFeeChanged(nTransactionFee);
289 nDisplayUnit = value.toInt();
290 settings.setValue("nDisplayUnit", nDisplayUnit);
291 emit displayUnitChanged(nDisplayUnit);
293 case DisplayAddresses:
294 bDisplayAddresses = value.toBool();
295 settings.setValue("bDisplayAddresses", bDisplayAddresses);
297 case DetachDatabases: {
298 bool fDetachDB = value.toBool();
299 bitdb.SetDetach(fDetachDB);
300 settings.setValue("detachDB", fDetachDB);
303 case ThirdPartyTxUrls:
304 if (strThirdPartyTxUrls != value.toString()) {
305 strThirdPartyTxUrls = value.toString();
306 settings.setValue("strThirdPartyTxUrls", strThirdPartyTxUrls);
310 settings.setValue("language", value);
312 case CoinControlFeatures: {
313 fCoinControlFeatures = value.toBool();
314 settings.setValue("fCoinControlFeatures", fCoinControlFeatures);
315 emit coinControlFeaturesChanged(fCoinControlFeatures);
322 emit dataChanged(index, index);
327 qint64 OptionsModel::getTransactionFee()
329 return nTransactionFee;
332 bool OptionsModel::getCoinControlFeatures()
334 return fCoinControlFeatures;
337 bool OptionsModel::getMinimizeToTray()
339 return fMinimizeToTray;
342 bool OptionsModel::getMinimizeOnClose()
344 return fMinimizeOnClose;
347 int OptionsModel::getDisplayUnit()
352 bool OptionsModel::getDisplayAddresses()
354 return bDisplayAddresses;