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