Update CMakeLists.txt - play with openssl
[novacoin.git] / src / qt / optionsmodel.cpp
1 #include "optionsmodel.h"
2 #include "bitcoinunits.h"
3 #include <QSettings>
4
5 #include "init.h"
6 #include "walletdb.h"
7 #include "guiutil.h"
8 #include "wallet.h"
9
10 OptionsModel::OptionsModel(QObject *parent) :
11     QAbstractListModel(parent)
12 {
13     Init();
14 }
15
16 bool static ApplyProxySettings()
17 {
18     QSettings settings;
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();
23         nSocksVersion = 0;
24         return false;
25     }
26     if (nSocksVersion && !addrProxy.IsValid())
27         return false;
28
29     if (!IsLimited(NET_IPV4))
30         SetProxy(NET_IPV4, addrProxy, nSocksVersion);
31     if (nSocksVersion > 4) {
32 #ifdef USE_IPV6
33         if (!IsLimited(NET_IPV6))
34             SetProxy(NET_IPV6, addrProxy, nSocksVersion);
35 #endif
36     }
37
38     SetNameProxy(addrProxy, nSocksVersion);
39
40     return true;
41 }
42
43 bool static ApplyTorSettings()
44 {
45     QSettings settings;
46     CService addrTor(settings.value("addrTor", "127.0.0.1:9050").toString().toStdString());
47     if (!settings.value("fUseTor", false).toBool()) {
48         addrTor = CService();
49         return false;
50     }
51     if (!addrTor.IsValid())
52         return false;
53
54     SetProxy(NET_TOR, addrTor, 5);
55     SetReachable(NET_TOR);
56
57     return true;
58 }
59
60 void OptionsModel::Init()
61 {
62     QSettings settings;
63
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")) {
68         if(fTestNet)
69             settings.setValue("strThirdPartyTxUrls", "");
70         else
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");
72     }
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();
79
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());
87     }
88
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");
93
94         if (settings.value("TorName").toString().length() == 22) {
95             std::string strTorName = settings.value("TorName").toString().toStdString();
96
97             CService addrTorName(strTorName, GetListenPort());
98             if (addrTorName.IsValid())
99                 SoftSetArg("-torname", strTorName);
100         }
101     }
102
103     if (!fTestNet && settings.contains("externalSeeder") && settings.value("externalSeeder").toString() != "") {
104         SoftSetArg("-peercollector", settings.value("externalSeeder").toString().toStdString());
105     }
106
107     if (!language.isEmpty())
108         SoftSetArg("-lang", language.toStdString());
109 }
110
111 int OptionsModel::rowCount(const QModelIndex & parent) const
112 {
113     return OptionIDRowCount;
114 }
115
116 QVariant OptionsModel::data(const QModelIndex & index, int role) const
117 {
118     if(role == Qt::EditRole)
119     {
120         QSettings settings;
121         switch(index.row())
122         {
123         case StartAtStartup:
124             return QVariant(GUIUtil::GetStartOnSystemStartup());
125         case MinimizeToTray:
126             return QVariant(fMinimizeToTray);
127         case MinimizeOnClose:
128             return QVariant(fMinimizeOnClose);
129         case ProxyUse:
130             return settings.value("fUseProxy", false);
131         case ProxyIP: {
132             proxyType proxy;
133             if (GetProxy(NET_IPV4, proxy))
134                 return QVariant(QString::fromStdString(proxy.first.ToStringIP()));
135             else
136                 return QVariant(QString::fromStdString("127.0.0.1"));
137         }
138         case ProxyPort: {
139             proxyType proxy;
140             if (GetProxy(NET_IPV4, proxy))
141                 return QVariant(proxy.first.GetPort());
142             else
143                 return QVariant(nSocksDefault);
144         }
145         case ProxySocksVersion:
146             return settings.value("nSocksVersion", 5);
147         case TorUse:
148             return settings.value("fUseTor", false);
149         case TorIP: {
150             proxyType proxy;
151             if (GetProxy(NET_TOR, proxy))
152                 return QVariant(QString::fromStdString(proxy.first.ToStringIP()));
153             else
154                 return QVariant(QString::fromStdString("127.0.0.1"));
155         }
156         case TorPort: {
157             proxyType proxy;
158             if (GetProxy(NET_TOR, proxy))
159                 return QVariant(proxy.first.GetPort());
160             else
161                 return QVariant(nSocksDefault);
162         }
163         case TorOnly:
164             return settings.value("fTorOnly", false);
165         case TorName:
166             return settings.value("TorName", "");
167         case ExternalSeeder:
168             return settings.value("externalSeeder", "");
169         case Fee:
170             return QVariant(static_cast<qlonglong>(nTransactionFee));
171         case DisplayUnit:
172             return QVariant(nDisplayUnit);
173         case DisplayAddresses:
174             return QVariant(bDisplayAddresses);
175         case ThirdPartyTxUrls:
176             return QVariant(strThirdPartyTxUrls);
177         case Language:
178             return settings.value("language", "");
179         case CoinControlFeatures:
180             return QVariant(fCoinControlFeatures);
181         default:
182             return QVariant();
183         }
184     }
185     return QVariant();
186 }
187
188 bool OptionsModel::setData(const QModelIndex & index, const QVariant & value, int role)
189 {
190     bool successful = true; /* set to false on parse error */
191     if(role == Qt::EditRole)
192     {
193         QSettings settings;
194         switch(index.row())
195         {
196         case StartAtStartup:
197             successful = GUIUtil::SetStartOnSystemStartup(value.toBool());
198             break;
199         case MinimizeToTray:
200             fMinimizeToTray = value.toBool();
201             settings.setValue("fMinimizeToTray", fMinimizeToTray);
202             break;
203         case MinimizeOnClose:
204             fMinimizeOnClose = value.toBool();
205             settings.setValue("fMinimizeOnClose", fMinimizeOnClose);
206             break;
207         case ProxyUse:
208             settings.setValue("fUseProxy", value.toBool());
209             ApplyProxySettings();
210             break;
211         case ProxyIP: {
212             proxyType proxy;
213             proxy.first = CService("127.0.0.1", nSocksDefault);
214             GetProxy(NET_IPV4, proxy);
215
216             CNetAddr addr(value.toString().toStdString());
217             proxy.first.SetIP(addr);
218             settings.setValue("addrProxy", proxy.first.ToStringIPPort().c_str());
219             successful = ApplyProxySettings();
220         }
221         break;
222         case ProxyPort: {
223             proxyType proxy;
224             proxy.first = CService("127.0.0.1", nSocksDefault);
225             GetProxy(NET_IPV4, proxy);
226
227             proxy.first.SetPort(value.toInt());
228             settings.setValue("addrProxy", proxy.first.ToStringIPPort().c_str());
229             successful = ApplyProxySettings();
230         }
231         break;
232         case ProxySocksVersion: {
233             proxyType proxy;
234             proxy.second = 5;
235             GetProxy(NET_IPV4, proxy);
236
237             proxy.second = value.toInt();
238             settings.setValue("nSocksVersion", proxy.second);
239             successful = ApplyProxySettings();
240         }
241         break;
242         case TorUse: {
243             settings.setValue("fUseTor", value.toBool());
244             ApplyTorSettings();
245         }
246         break;
247         case TorIP: {
248             proxyType proxy;
249             proxy.first = CService("127.0.0.1", nSocksDefault);
250             GetProxy(NET_TOR, proxy);
251
252             CNetAddr addr(value.toString().toStdString());
253             proxy.first.SetIP(addr);
254             settings.setValue("addrTor", proxy.first.ToStringIPPort().c_str());
255             successful = ApplyTorSettings();
256         }
257         break;
258         case TorPort: {
259             proxyType proxy;
260             proxy.first = CService("127.0.0.1", nSocksDefault);
261             GetProxy(NET_TOR, proxy);
262
263             proxy.first.SetPort((uint16_t)value.toUInt());
264             settings.setValue("addrTor", proxy.first.ToStringIPPort().c_str());
265             successful = ApplyTorSettings();
266         }
267         break;
268         case TorOnly: {
269             settings.setValue("fTorOnly", value.toBool());
270             ApplyTorSettings();
271         }
272         case TorName: {
273             settings.setValue("TorName", value.toString());
274         }
275         break;
276         case ExternalSeeder:
277             settings.setValue("externalSeeder", value.toString());
278         break;
279         case Fee:
280             nTransactionFee = value.toLongLong();
281             settings.setValue("nTransactionFee", static_cast<qlonglong>(nTransactionFee));
282             emit transactionFeeChanged(nTransactionFee);
283             break;
284         case DisplayUnit:
285             nDisplayUnit = value.toInt();
286             settings.setValue("nDisplayUnit", nDisplayUnit);
287             emit displayUnitChanged(nDisplayUnit);
288             break;
289         case DisplayAddresses:
290             bDisplayAddresses = value.toBool();
291             settings.setValue("bDisplayAddresses", bDisplayAddresses);
292             break;
293         case ThirdPartyTxUrls:
294             if (strThirdPartyTxUrls != value.toString()) {
295                 strThirdPartyTxUrls = value.toString();
296                 settings.setValue("strThirdPartyTxUrls", strThirdPartyTxUrls);
297             }
298             break;
299         case Language:
300             settings.setValue("language", value);
301             break;
302         case CoinControlFeatures: {
303             fCoinControlFeatures = value.toBool();
304             settings.setValue("fCoinControlFeatures", fCoinControlFeatures);
305             emit coinControlFeaturesChanged(fCoinControlFeatures);
306             }
307             break;
308         default:
309             break;
310         }
311     }
312     emit dataChanged(index, index);
313
314     return successful;
315 }
316
317 qint64 OptionsModel::getTransactionFee()
318 {
319     return nTransactionFee;
320 }
321
322 bool OptionsModel::getCoinControlFeatures()
323 {
324     return fCoinControlFeatures;
325 }
326
327 bool OptionsModel::getMinimizeToTray()
328 {
329     return fMinimizeToTray;
330 }
331
332 bool OptionsModel::getMinimizeOnClose()
333 {
334     return fMinimizeOnClose;
335 }
336
337 int OptionsModel::getDisplayUnit()
338 {
339     return nDisplayUnit;
340 }
341
342 bool OptionsModel::getDisplayAddresses()
343 {
344     return bDisplayAddresses;
345 }