1 /***************************************************************************
2 *                                                                         *
3 *   This program is free software; you can redistribute it and/or modify  *
4 *   it under the terms of the GNU General Public License as published by  *
5 *   the Free Software Foundation; either version 3 of the License, or     *
6 *   (at your option) any later version.                                   *
7 *                                                                         *
8 ***************************************************************************/
9 
10 #include "WulforSettings.h"
11 #include "WulforUtil.h"
12 
13 #include "dcpp/stdinc.h"
14 #include "dcpp/File.h"
15 #include "dcpp/Util.h"
16 #include "dcpp/SimpleXML.h"
17 
18 #include <QApplication>
19 #include <QFile>
20 #include <QTextCodec>
21 #include <QLocale>
22 #include <QFile>
23 #include <QDir>
24 #include <QTranslator>
25 #include <QLibraryInfo>
26 #include <QPalette>
27 #include <QColor>
28 #include <QFont>
29 #include <QStyle>
30 #include <QBrush>
31 #include <QUrl>
32 
33 #include <QtDebug>
34 
35 #ifndef CLIENT_TRANSLATIONS_DIR
36 #define CLIENT_TRANSLATIONS_DIR ""
37 #endif
38 
39 using namespace dcpp;
40 
41 
42 
WulforSettings()43 WulforSettings::WulforSettings():
44         settings(_q(Util::getPath(Util::PATH_USER_CONFIG)) + "EiskaltDC++_Qt.conf", QSettings::IniFormat),
45         tor(0)
46 {
47     configFileOld = _q(Util::getPath(Util::PATH_USER_CONFIG)) + "EiskaltDC++.xml";
48 
49     QStringList idns = QUrl::idnWhitelist();
50     idns.push_back("рф");
51     QUrl::setIdnWhitelist(idns);
52 
53     qtTranslator.load("qt_" + QLocale::system().name(), QLibraryInfo::location(QLibraryInfo::TranslationsPath));
54     qApp->installTranslator(&qtTranslator);
55 
56     connect(this, SIGNAL(fontChanged(QString,QString)), this, SLOT(slotFontChanged(QString,QString)));
57     connect(this, SIGNAL(fontChanged(QString,QString)), this, SIGNAL(strValueChanged(QString,QString)));
58 }
59 
~WulforSettings()60 WulforSettings::~WulforSettings(){
61 }
62 
hasKey(const QString & key) const63 bool WulforSettings::hasKey(const QString &key) const{
64     return (intmap.keys().contains(key) || strmap.keys().contains(key));
65 }
66 
load()67 void WulforSettings::load(){
68 #ifdef _DEBUG_MODEL_
69     qDebug() << settings.fileName();
70 #endif
71     if (QFile::exists(configFileOld) && settings.value("app/firstrun", true).toBool()){
72         loadOldConfig();
73 
74         //And load old config into QSettings
75         auto it = strmap.begin();
76 
77         for (; it != strmap.end(); ++it)
78             settings.setValue(it.key(), it.value());
79 
80         auto iit = intmap.begin();
81 
82         for (; iit != intmap.end(); ++iit)
83             settings.setValue(iit.key(), iit.value());
84 
85         // QFile(configFileOld).remove();
86 
87         intmap.clear();
88         strmap.clear();
89 
90         settings.setValue("app/firstrun", false);
91     }
92 
93     if (settings.value("app/firstrun", true).toBool()){
94         settings.setValue("app/firstrun", false);
95         //Load default values
96         {
97             settings.setValue(WS_CHAT_LOCAL_COLOR,      "#078010");
98             settings.setValue(WS_CHAT_OP_COLOR,         "#000000");
99             settings.setValue(WS_CHAT_BOT_COLOR,        "#838383");
100             settings.setValue(WS_CHAT_FIND_COLOR,       "#FFFF00");
101             settings.setValue(WS_CHAT_PRIV_LOCAL_COLOR, "#078010");
102             settings.setValue(WS_CHAT_PRIV_USER_COLOR,  "#ac0000");
103             settings.setValue(WS_CHAT_SAY_NICK,         "#2344e7");
104             settings.setValue(WS_CHAT_CORE_COLOR,       "#ff0000");
105             settings.setValue(WS_CHAT_STAT_COLOR,       "#ac0000");
106             settings.setValue(WS_CHAT_USER_COLOR,       "#ac0000");
107             settings.setValue(WS_CHAT_FAVUSER_COLOR,    "#00ff7f");
108             settings.setValue(WS_CHAT_TIME_COLOR,       qApp->palette().text().color().name());
109             settings.setValue(WS_CHAT_MSG_COLOR,        qApp->palette().text().color().name());
110             settings.setValue(WS_CHAT_USERLIST_STATE,   "");
111             settings.setValue(WS_CHAT_CMD_ALIASES,      "");
112             settings.setValue(WS_CHAT_FONT,             "");
113             settings.setValue(WS_CHAT_ULIST_FONT,       "");
114             settings.setValue(WS_CHAT_PM_FONT,          "");
115             settings.setValue(WS_CHAT_SEPARATOR,        ":");
116             settings.setValue(WS_CHAT_TIMESTAMP,        "hh:mm:ss");
117             settings.setValue(WS_QCONNECT_HISTORY,      "");
118             settings.setValue(WS_DEFAULT_LOCALE,        "UTF-8");
119             settings.setValue(WS_DOWNLOAD_DIR_HISTORY,  "");
120             settings.setValue(WS_DQUEUE_STATE,          "");
121             settings.setValue(WS_SEARCH_STATE,          "");
122             settings.setValue(WS_SEARCH_HISTORY,        "");
123             settings.setValue(WS_TRANSLATION_FILE,      "");
124             settings.setValue(WS_TRANSFERS_STATE,       "");
125             settings.setValue(WS_SHARE_LPANE_STATE,     "");
126             settings.setValue(WS_SHARE_RPANE_STATE,     "");
127             settings.setValue(WS_MAINWINDOW_STATE,      "");
128             settings.setValue(WS_MAINWINDOW_TOOLBAR_ACTS,"");
129             settings.setValue(WS_FTRANSFERS_FILES_STATE,"");
130             settings.setValue(WS_FTRANSFERS_USERS_STATE,"");
131             settings.setValue(WS_FAV_HUBS_STATE,        "");
132             settings.setValue(WS_ADLS_STATE,            "");
133             settings.setValue(WS_APP_THEME,             "");
134             settings.setValue(WS_APP_FONT,              "");
135             settings.setValue(WS_APP_ICONTHEME,         "default");
136             settings.setValue(WS_APP_USERTHEME,         "default");
137             settings.setValue(WS_APP_SHARED_FILES_COLOR,"#1f8f1f");
138             settings.setValue(WS_NOTIFY_SOUNDS,         "");
139             settings.setValue(WS_NOTIFY_SND_CMD,        "");
140             settings.setValue(WS_FAVUSERS_STATE,        "");
141             settings.setValue(WS_SHAREHEADER_STATE,     "");
142             settings.setValue(WS_DOWNLOADTO_ALIASES,    "");
143             settings.setValue(WS_DOWNLOADTO_PATHS,      "");
144             settings.setValue(WS_APP_EMOTICON_THEME,    "default");
145             settings.setValue(WS_APP_ASPELL_LANG,       "");
146             settings.setValue(WS_APP_ENABLED_SCRIPTS,   "");
147             settings.setValue(WS_PUBLICHUBS_STATE,      "");
148             settings.setValue(WS_SETTINGS_GUI_FONTS_STATE, "");
149 
150             settings.setValue(WB_APP_AUTOAWAY_BY_TIMER, static_cast<int>(false));
151             settings.setValue(WB_CHAT_SHOW_TIMESTAMP,   static_cast<int>(true));
152             settings.setValue(WB_SHOW_FREE_SPACE,       static_cast<int>(true));
153             settings.setValue(WB_LAST_STATUS,           static_cast<int>(true));
154             settings.setValue(WB_USERS_STATISTICS,      static_cast<int>(true));
155             settings.setValue(WB_CHAT_SHOW_JOINS,       static_cast<int>(false));
156             settings.setValue(WB_CHAT_REDIRECT_BOT_PMS, static_cast<int>(true));
157             settings.setValue(WB_CHAT_KEEPFOCUS,        static_cast<int>(true));
158             settings.setValue(WB_CHAT_SHOW_JOINS_FAV,   static_cast<int>(true));
159             settings.setValue(WB_CHAT_HIGHLIGHT_FAVS,   static_cast<int>(true));
160             settings.setValue(WB_CHAT_ROTATING_MSGS,    static_cast<int>(true));
161             settings.setValue(WB_CHAT_USE_SMILE_PANEL,  static_cast<int>(false));
162             settings.setValue(WB_CHAT_HIDE_SMILE_PANEL, static_cast<bool>(true));
163             settings.setValue(WB_MAINWINDOW_MAXIMIZED,  static_cast<int>(true));
164             settings.setValue(WB_MAINWINDOW_HIDE,       static_cast<int>(false));
165             settings.setValue(WB_MAINWINDOW_REMEMBER,   static_cast<int>(false));
166             settings.setValue(WB_MAINWINDOW_USE_M_TABBAR, static_cast<int>(true));
167             settings.setValue(WB_MAINWINDOW_USE_SIDEBAR, static_cast<int>(true));
168             settings.setValue(WB_SEARCHFILTER_NOFREE,   static_cast<int>(false));
169             settings.setValue(WB_SEARCH_DONTHIDEPANEL,  static_cast<int>(false));
170             settings.setValue(WB_ANTISPAM_ENABLED,      static_cast<int>(false));
171             settings.setValue(WB_ANTISPAM_AS_FILTER,    static_cast<int>(false));
172             settings.setValue(WB_ANTISPAM_FILTER_OPS,   static_cast<int>(false));
173             settings.setValue(WB_IPFILTER_ENABLED,      static_cast<int>(false));
174             settings.setValue(WB_TRAY_ENABLED,          static_cast<int>(true));
175             settings.setValue(WB_EXIT_CONFIRM,          static_cast<int>(false));
176             settings.setValue(WB_SHOW_IP_IN_CHAT,       static_cast<int>(false));
177             settings.setValue(WB_SHOW_HIDDEN_USERS,     static_cast<int>(false));
178             settings.setValue(WB_SHOW_JOINS,            static_cast<int>(false));
179             settings.setValue(WB_NOTIFY_ENABLED,        static_cast<int>(true));
180             settings.setValue(WB_NOTIFY_SND_ENABLED,    static_cast<int>(false));
181             settings.setValue(WB_NOTIFY_SND_EXTERNAL,   static_cast<int>(false));
182             settings.setValue(WB_NOTIFY_CH_ICON_ALWAYS, static_cast<int>(false));
183             settings.setValue(WB_NOTIFY_SHOW_ON_ACTIVE, static_cast<int>(false));
184             settings.setValue(WB_NOTIFY_SHOW_ON_VISIBLE, static_cast<int>(false));
185             settings.setValue(WB_FAVUSERS_AUTOGRANT,    static_cast<int>(true));
186             settings.setValue(WB_APP_ENABLE_EMOTICON,   static_cast<int>(true));
187             settings.setValue(WB_APP_FORCE_EMOTICONS,   static_cast<int>(false));
188             settings.setValue(WB_APP_ENABLE_ASPELL,     static_cast<int>(true));
189             settings.setValue(WB_APP_REMOVE_NOT_EX_DIRS,static_cast<int>(false));
190             settings.setValue(WB_APP_AUTO_AWAY,         static_cast<int>(false));
191             settings.setValue(WB_APP_TBAR_SHOW_CL_BTNS, static_cast<int>(true));
192             settings.setValue(WB_WIDGETS_PANEL_VISIBLE, static_cast<int>(true));
193             settings.setValue(WB_TOOLS_PANEL_VISIBLE,   static_cast<int>(true));
194             settings.setValue(WB_SEARCH_PANEL_VISIBLE,  static_cast<int>(false));
195             settings.setValue(WB_MAIN_MENU_VISIBLE,     static_cast<int>(true));
196             settings.setValue(WB_USE_CTRL_ENTER,        static_cast<int>(false));
197             settings.setValue(WB_SIMPLE_SHARE_MODE,     static_cast<int>(true));
198             settings.setValue(WI_APP_UNIT_BASE,         1024);
199             settings.setValue(WI_APP_AUTOAWAY_INTERVAL, 60);
200             settings.setValue(WI_APP_SHARED_FILES_ALPHA, 127);
201             settings.setValue(WI_CHAT_MAXPARAGRAPHS,    1000);
202             settings.setValue(WI_DEF_MAGNET_ACTION,     0);
203             settings.setValue(WI_CHAT_WIDTH,            -1);
204             settings.setValue(WI_CHAT_USERLIST_WIDTH,   -1);
205             settings.setValue(WI_CHAT_SORT_COLUMN,      0);
206             settings.setValue(WI_CHAT_SORT_ORDER,       0);
207             settings.setValue(WI_CHAT_DBLCLICK_ACT,     0);//nick in chat
208             settings.setValue(WI_CHAT_MDLCLICK_ACT,     1);//browse files
209             settings.setValue(WI_CHAT_FIND_COLOR_ALPHA, 127);
210             settings.setValue(WI_CHAT_STATUS_HISTORY_SZ,5);
211             settings.setValue(WI_CHAT_STATUS_MSG_MAX_LEN, 128);
212             settings.setValue(WI_STATUSBAR_HISTORY_SZ,  5);
213             settings.setValue(WI_MAINWINDOW_HEIGHT,     -1);
214             settings.setValue(WI_MAINWINDOW_WIDTH,      -1);
215             settings.setValue(WI_MAINWINDOW_X,          -1);
216             settings.setValue(WI_MAINWINDOW_Y,          -1);
217             settings.setValue(WI_SEARCH_SORT_COLUMN,    1);
218             settings.setValue(WI_SEARCH_SORT_ORDER,     0);
219             settings.setValue(WI_SEARCH_SHARED_ACTION,  0);
220             settings.setValue(WI_SEARCH_LAST_TYPE,      0);
221             settings.setValue(WI_TRANSFER_HEIGHT,       -1);
222             settings.setValue(WI_SHARE_RPANE_WIDTH,     -1);
223             settings.setValue(WI_SHARE_WIDTH,           -1);
224             settings.setValue(WI_NOTIFY_EVENTMAP,       0x0B);// 0b00001011, (transfer done = off)
225             settings.setValue(WI_NOTIFY_MODULE,         1);//default
226             settings.setValue(WI_NOTIFY_SNDMAP,         0x0F);// 0b00001111, all events
227             settings.setValue(WI_OUT_IN_HIST,           50);//number of output messages in history
228         }
229     }
230 }
231 
loadOldConfig()232 void WulforSettings::loadOldConfig(){
233     //Load default values into maps
234     {
235         strmap.insert(WS_CHAT_LOCAL_COLOR,      "#078010");
236         strmap.insert(WS_CHAT_OP_COLOR,         "#000000");
237         strmap.insert(WS_CHAT_BOT_COLOR,        "#838383");
238         strmap.insert(WS_CHAT_FIND_COLOR,       "#FFFF00");
239         strmap.insert(WS_CHAT_PRIV_LOCAL_COLOR, "#078010");
240         strmap.insert(WS_CHAT_PRIV_USER_COLOR,  "#ac0000");
241         strmap.insert(WS_CHAT_SAY_NICK,         "#2344e7");
242         strmap.insert(WS_CHAT_CORE_COLOR,       "#ff0000");
243         strmap.insert(WS_CHAT_STAT_COLOR,       "#ac0000");
244         strmap.insert(WS_CHAT_USER_COLOR,       "#ac0000");
245         strmap.insert(WS_CHAT_FAVUSER_COLOR,    "#00ff7f");
246         strmap.insert(WS_CHAT_TIME_COLOR,       qApp->palette().text().color().name());
247         strmap.insert(WS_CHAT_MSG_COLOR,        qApp->palette().text().color().name());
248         strmap.insert(WS_CHAT_USERLIST_STATE,   "");
249         strmap.insert(WS_CHAT_CMD_ALIASES,      "");
250         strmap.insert(WS_CHAT_FONT,             "");
251         strmap.insert(WS_CHAT_ULIST_FONT,       "");
252         strmap.insert(WS_CHAT_PM_FONT,          "");
253         strmap.insert(WS_CHAT_SEPARATOR,        ":");
254         strmap.insert(WS_CHAT_TIMESTAMP,        "hh:mm:ss");
255         strmap.insert(WS_QCONNECT_HISTORY,      "");
256         strmap.insert(WS_DEFAULT_LOCALE,        "UTF-8");
257         strmap.insert(WS_DOWNLOAD_DIR_HISTORY,  "");
258         strmap.insert(WS_DQUEUE_STATE,          "");
259         strmap.insert(WS_SEARCH_STATE,          "");
260         strmap.insert(WS_SEARCH_HISTORY,        "");
261         strmap.insert(WS_TRANSLATION_FILE,      "");
262         strmap.insert(WS_TRANSFERS_STATE,       "");
263         strmap.insert(WS_SHARE_LPANE_STATE,     "");
264         strmap.insert(WS_SHARE_RPANE_STATE,     "");
265         strmap.insert(WS_MAINWINDOW_STATE,      "");
266         strmap.insert(WS_MAINWINDOW_TOOLBAR_ACTS,"");
267         strmap.insert(WS_FTRANSFERS_FILES_STATE,"");
268         strmap.insert(WS_FTRANSFERS_USERS_STATE,"");
269         strmap.insert(WS_FAV_HUBS_STATE,        "");
270         strmap.insert(WS_ADLS_STATE,            "");
271         strmap.insert(WS_APP_THEME,             "");
272         strmap.insert(WS_APP_FONT,              "");
273         strmap.insert(WS_APP_ICONTHEME,         "default");
274         strmap.insert(WS_APP_USERTHEME,         "default");
275         strmap.insert(WS_APP_SHARED_FILES_COLOR,"#1f8f1f");
276         strmap.insert(WS_NOTIFY_SOUNDS,         "");
277         strmap.insert(WS_NOTIFY_SND_CMD,        "");
278         strmap.insert(WS_FAVUSERS_STATE,        "");
279         strmap.insert(WS_SHAREHEADER_STATE,     "");
280         strmap.insert(WS_DOWNLOADTO_ALIASES,    "");
281         strmap.insert(WS_DOWNLOADTO_PATHS,      "");
282         strmap.insert(WS_APP_EMOTICON_THEME,    "default");
283         strmap.insert(WS_APP_ASPELL_LANG,       "");
284         strmap.insert(WS_APP_ENABLED_SCRIPTS,   "");
285         strmap.insert(WS_PUBLICHUBS_STATE,      "");
286         strmap.insert(WS_SETTINGS_GUI_FONTS_STATE, "");
287 
288         intmap.insert(WB_APP_AUTOAWAY_BY_TIMER, static_cast<int>(false));
289         intmap.insert(WB_CHAT_SHOW_TIMESTAMP,   static_cast<int>(true));
290         intmap.insert(WB_SHOW_FREE_SPACE,       static_cast<int>(true));
291         intmap.insert(WB_LAST_STATUS,           static_cast<int>(true));
292         intmap.insert(WB_USERS_STATISTICS,      static_cast<int>(true));
293         intmap.insert(WB_CHAT_SHOW_JOINS,       static_cast<int>(false));
294         intmap.insert(WB_CHAT_REDIRECT_BOT_PMS, static_cast<int>(true));
295         intmap.insert(WB_CHAT_KEEPFOCUS,        static_cast<int>(true));
296         intmap.insert(WB_CHAT_SHOW_JOINS_FAV,   static_cast<int>(true));
297         intmap.insert(WB_CHAT_HIGHLIGHT_FAVS,   static_cast<int>(true));
298         intmap.insert(WB_CHAT_ROTATING_MSGS,    static_cast<int>(true));
299         intmap.insert(WB_CHAT_USE_SMILE_PANEL,  static_cast<int>(false));
300         intmap.insert(WB_CHAT_HIDE_SMILE_PANEL, static_cast<bool>(true));
301         intmap.insert(WB_MAINWINDOW_MAXIMIZED,  static_cast<int>(true));
302         intmap.insert(WB_MAINWINDOW_HIDE,       static_cast<int>(false));
303         intmap.insert(WB_MAINWINDOW_REMEMBER,   static_cast<int>(false));
304         intmap.insert(WB_MAINWINDOW_USE_M_TABBAR, static_cast<int>(true));
305         intmap.insert(WB_MAINWINDOW_USE_SIDEBAR, static_cast<int>(true));
306         intmap.insert(WB_SEARCHFILTER_NOFREE,   static_cast<int>(false));
307         intmap.insert(WB_SEARCH_DONTHIDEPANEL,  static_cast<int>(false));
308         intmap.insert(WB_ANTISPAM_ENABLED,      static_cast<int>(false));
309         intmap.insert(WB_ANTISPAM_AS_FILTER,    static_cast<int>(false));
310         intmap.insert(WB_ANTISPAM_FILTER_OPS,   static_cast<int>(false));
311         intmap.insert(WB_IPFILTER_ENABLED,      static_cast<int>(false));
312         intmap.insert(WB_TRAY_ENABLED,          static_cast<int>(true));
313         intmap.insert(WB_EXIT_CONFIRM,          static_cast<int>(false));
314         intmap.insert(WB_SHOW_IP_IN_CHAT,       static_cast<int>(false));
315         intmap.insert(WB_SHOW_HIDDEN_USERS,     static_cast<int>(false));
316         intmap.insert(WB_SHOW_JOINS,            static_cast<int>(false));
317         intmap.insert(WB_NOTIFY_ENABLED,        static_cast<int>(true));
318         intmap.insert(WB_NOTIFY_SND_ENABLED,    static_cast<int>(false));
319         intmap.insert(WB_NOTIFY_SND_EXTERNAL,   static_cast<int>(false));
320         intmap.insert(WB_NOTIFY_CH_ICON_ALWAYS, static_cast<int>(false));
321         intmap.insert(WB_NOTIFY_SHOW_ON_ACTIVE, static_cast<int>(false));
322         intmap.insert(WB_NOTIFY_SHOW_ON_VISIBLE, static_cast<int>(false));
323         intmap.insert(WB_FAVUSERS_AUTOGRANT,    static_cast<int>(true));
324         intmap.insert(WB_APP_ENABLE_EMOTICON,   static_cast<int>(true));
325         intmap.insert(WB_APP_FORCE_EMOTICONS,   static_cast<int>(false));
326         intmap.insert(WB_APP_ENABLE_ASPELL,     static_cast<int>(true));
327         intmap.insert(WB_APP_REMOVE_NOT_EX_DIRS,static_cast<int>(false));
328         intmap.insert(WB_APP_AUTO_AWAY,         static_cast<int>(false));
329         intmap.insert(WB_APP_TBAR_SHOW_CL_BTNS, static_cast<int>(true));
330         intmap.insert(WB_WIDGETS_PANEL_VISIBLE, static_cast<int>(true));
331         intmap.insert(WB_TOOLS_PANEL_VISIBLE,   static_cast<int>(true));
332         intmap.insert(WB_SEARCH_PANEL_VISIBLE,  static_cast<int>(false));
333         intmap.insert(WB_MAIN_MENU_VISIBLE,     static_cast<int>(true));
334         intmap.insert(WB_USE_CTRL_ENTER,        static_cast<int>(false));
335         intmap.insert(WB_SIMPLE_SHARE_MODE,     static_cast<int>(false));
336         intmap.insert(WI_APP_UNIT_BASE,         1024);
337         intmap.insert(WI_APP_AUTOAWAY_INTERVAL, 60);
338         intmap.insert(WI_APP_SHARED_FILES_ALPHA, 127);
339         intmap.insert(WI_CHAT_MAXPARAGRAPHS,    1000);
340         intmap.insert(WI_DEF_MAGNET_ACTION,     0);
341         intmap.insert(WI_CHAT_WIDTH,            -1);
342         intmap.insert(WI_CHAT_USERLIST_WIDTH,   -1);
343         intmap.insert(WI_CHAT_SORT_COLUMN,      0);
344         intmap.insert(WI_CHAT_SORT_ORDER,       0);
345         intmap.insert(WI_CHAT_DBLCLICK_ACT,     0);//nick in chat
346         intmap.insert(WI_CHAT_MDLCLICK_ACT,     1);//browse files
347         intmap.insert(WI_CHAT_FIND_COLOR_ALPHA, 127);
348         intmap.insert(WI_CHAT_STATUS_HISTORY_SZ,5);
349         intmap.insert(WI_CHAT_STATUS_MSG_MAX_LEN, 128);
350         intmap.insert(WI_STATUSBAR_HISTORY_SZ,  5);
351         intmap.insert(WI_MAINWINDOW_HEIGHT,     -1);
352         intmap.insert(WI_MAINWINDOW_WIDTH,      -1);
353         intmap.insert(WI_MAINWINDOW_X,          -1);
354         intmap.insert(WI_MAINWINDOW_Y,          -1);
355         intmap.insert(WI_SEARCH_SORT_COLUMN,    1);
356         intmap.insert(WI_SEARCH_SORT_ORDER,     0);
357         intmap.insert(WI_SEARCH_SHARED_ACTION,  0);
358         intmap.insert(WI_SEARCH_LAST_TYPE,      0);
359         intmap.insert(WI_TRANSFER_HEIGHT,       -1);
360         intmap.insert(WI_SHARE_RPANE_WIDTH,     -1);
361         intmap.insert(WI_SHARE_WIDTH,           -1);
362         intmap.insert(WI_NOTIFY_EVENTMAP,       0x0B);// 0b00001011, (transfer done = off)
363         intmap.insert(WI_NOTIFY_MODULE,         1);//default
364         intmap.insert(WI_NOTIFY_SNDMAP,         0x0F);// 0b00001111, all events
365         intmap.insert(WI_OUT_IN_HIST,           50);//number of output messages in history
366     }
367 
368     if (!QFile::exists(configFileOld))
369         return;
370 
371     try{
372         SimpleXML xml;
373         xml.fromXML(File(configFileOld.toStdString(), File::READ, File::OPEN).read());
374         xml.resetCurrentChild();
375         xml.stepIn();
376 
377         if (xml.findChild("Settings")){
378 
379             xml.stepIn();
380 
381             auto it = strmap.begin();
382 
383             for (; it != strmap.end(); ++it){
384                 if (xml.findChild(it.key().toStdString()))
385                         strmap.insert(it.key(), QString::fromStdString(xml.getChildData()));
386 
387                 xml.resetCurrentChild();
388             }
389 
390             auto iit = intmap.begin();
391 
392             for (; iit != intmap.end(); ++iit){
393                 if (xml.findChild(iit.key().toStdString()))
394                     intmap.insert(iit.key(), Util::toInt(xml.getChildData()));
395 
396                 xml.resetCurrentChild();
397             }
398         }
399     }
400     catch (Exception &ex){}
401 }
402 
save()403 void WulforSettings::save(){
404     //Do nothing
405 }
406 
parseCmd(const QString & cmd,QString & res)407 void WulforSettings::parseCmd(const QString &cmd, QString& res) {
408     QStringList args = cmd.split(" ", QString::SkipEmptyParts);
409 
410     if (args.size() == 1) {
411         res = tr("Gui setting %1: %2").arg(args.at(0)).arg(getStr(args.at(0)));
412         return;
413     } else if (args.size() > 2)
414         return;
415 
416     QString sname   = args.at(0);
417     QString svalue  = args.at(1);
418 
419     setStr(sname, svalue);
420     res = tr("Change gui setting %1 to %2").arg(sname).arg(svalue);
421 }
422 
loadTranslation()423 void WulforSettings::loadTranslation(){
424     QString file = getStr(WS_TRANSLATION_FILE);
425 
426     if (file.isEmpty() || !QFile::exists(file)){
427         QString lc_prefix = QLocale::system().name();
428 
429 #if !defined(Q_WS_WIN)
430         file = QString(CLIENT_TRANSLATIONS_DIR) + QDir::separator();
431 #else
432         file = qApp->applicationDirPath()+QDir::separator()+QString(CLIENT_TRANSLATIONS_DIR)+QDir::separator();
433 #endif
434         lc_prefix = lc_prefix.left(lc_prefix.indexOf("_"));
435         file += lc_prefix + ".qm";
436 
437         if (!QFile::exists(file))
438             return;
439     }
440     else if (!file.isEmpty() && (file.size() >= 5) && QFile::exists(file)){
441         QString lc_prefix = file.mid(file.size()-5, 2);
442         dcpp::Util::setLang(lc_prefix.toStdString());
443 #ifdef _DEBUG_MODEL_
444         qDebug() << QString("LANGUAGE=%1").arg(lc_prefix);
445 #endif
446     }
447 
448     if (tor.load(file))
449         qApp->installTranslator(&tor);
450     else
451         WSSET(WS_TRANSLATION_FILE, "");
452 }
453 
loadTheme()454 void WulforSettings::loadTheme(){
455     if (!getStr(WS_APP_THEME).isEmpty())
456         qApp->setStyle(getStr(WS_APP_THEME));
457 
458     if (!getStr(WS_APP_FONT).isEmpty() && f.fromString(getStr(WS_APP_FONT)))
459         qApp->setFont(f);
460 }
461 
getStr(const QString & key,const QString & default_value)462 QString WulforSettings::getStr(const QString & key, const QString &default_value) {
463     return settings.value(key, default_value).toString();
464 }
465 
getInt(const QString & key,const int & default_value)466 int WulforSettings::getInt(const QString & key, const int &default_value) {
467     return settings.value(key, default_value).toInt();
468 }
469 
getBool(const QString & key,const bool & default_value)470 bool WulforSettings::getBool(const QString & key, const bool &default_value) {
471     return (static_cast<bool>(getInt(key, default_value)));
472 }
473 
getVar(const QString & key,const QVariant & default_value)474 QVariant WulforSettings::getVar(const QString &key, const QVariant &default_value){
475     return settings.value(key, default_value);
476 }
477 
setStr(const QString & key,const QString & value)478 void WulforSettings::setStr(const QString & key, const QString &value) {
479     settings.setValue(key, value);
480 
481     emit strValueChanged(key, value);
482 }
483 
setInt(const QString & key,int value)484 void WulforSettings::setInt(const QString & key, int value) {
485     settings.setValue(key, value);
486 
487     emit intValueChanged(key, value);
488 }
489 
setBool(const QString & key,bool value)490 void WulforSettings::setBool(const QString & key, bool value) {
491     setInt(key, static_cast<int>(value));
492 }
493 
setVar(const QString & key,const QVariant & value)494 void WulforSettings::setVar(const QString &key, const QVariant &value){
495     settings.setValue(key, value);
496 
497     emit varValueChanged(key, value);
498 }
499 
slotFontChanged(const QString & key,const QString & value)500 void WulforSettings::slotFontChanged(const QString &key, const QString &value){
501     if (key == WS_APP_FONT){
502         QFont f;
503 
504         if (f.fromString(value))
505             qApp->setFont(f);
506     }
507 }
508