From a1157c78b2167ccb8d79bc0cffc817f19569d45c Mon Sep 17 00:00:00 2001 From: Christophe Dumez Date: Fri, 16 Jul 2010 14:39:19 +0000 Subject: [PATCH] BUGFIX: Use an INI file instead of the registry on Windows (More reliable) --- Changelog | 1 + src/preferences.h | 6 ---- src/qinisettings.h | 73 ++++++++++++++++++++++++++++++++++++++++++++++ src/src.pro | 6 +++- 4 files changed, 79 insertions(+), 7 deletions(-) create mode 100644 src/qinisettings.h diff --git a/Changelog b/Changelog index 8a635dc18..da3ac8b8c 100644 --- a/Changelog +++ b/Changelog @@ -18,6 +18,7 @@ - BUGFIX: Hide seeding torrents files priorities in Web UI - BUGFIX: The user can disable permanently recursive torrent download - BUGFIX: Peer Exchange status is now correctly reported + - BUGFIX: Use an INI file instead of the registry on Windows (More reliable) - COSMETIC: Display peers country name in tooltip - COSMETIC: Display number of torrents in transfers tab label - COSMETIC: Simplified program preferences diff --git a/src/preferences.h b/src/preferences.h index abae3f1d9..95575bd04 100644 --- a/src/preferences.h +++ b/src/preferences.h @@ -1081,8 +1081,6 @@ public: const QString version = versions.takeLast(); qDebug("Detected possible Python v%s location", qPrintable(version)); QString path = reg_python.value(version+"\\InstallPath\\Default", "").toString().replace("/", "\\"); - if(path.isEmpty()) - path = reg_python.value(version+"/InstallPath/Default", "").toString().replace("/", "\\"); if(!path.isEmpty() && QDir(path).exists("python.exe")) { qDebug("Found python.exe at %s", qPrintable(path)); return path; @@ -1117,8 +1115,6 @@ public: } qDebug("Checking shell command"); QString shell_command = settings.value("qBittorrent\\shell\\open\\command\\Default", "").toString(); - if(shell_command.isEmpty()) - shell_command = settings.value("qBittorrent/shell/open/command/Default", "").toString(); qDebug("Shell command is: %s", qPrintable(shell_command)); QRegExp exe_reg("\"([^\"]+)\".*"); if(exe_reg.indexIn(shell_command) < 0) @@ -1129,8 +1125,6 @@ public: return false; // Check magnet link assoc shell_command = settings.value("Magnet\\shell\\open\\command\\Default", "").toString(); - if(shell_command.isEmpty()) - shell_command = settings.value("Magnet/shell/open/command/Default", "").toString(); if(exe_reg.indexIn(shell_command) < 0) return false; assoc_exe = exe_reg.cap(1); diff --git a/src/qinisettings.h b/src/qinisettings.h new file mode 100644 index 000000000..20fae97e0 --- /dev/null +++ b/src/qinisettings.h @@ -0,0 +1,73 @@ +/* + * Bittorrent Client using Qt4 and libtorrent. + * Copyright (C) 2006 Christophe Dumez + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * In addition, as a special exception, the copyright holders give permission to + * link this program with the OpenSSL project's "OpenSSL" library (or with + * modified versions of it that use the same license as the "OpenSSL" library), + * and distribute the linked executables. You must obey the GNU General Public + * License in all respects for all of the code used other than "OpenSSL". If you + * modify file(s), you may extend this exception to your version of the file(s), + * but you are not obligated to do so. If you do not wish to do so, delete this + * exception statement from your version. + * + * Contact : chris@qbittorrent.org + */ + +#ifndef QINISETTINGS_H +#define QINISETTINGS_H + +#include + +class QIniSettings : public QSettings { +public: + QIniSettings(const QString &organization, const QString &application = QString(), QObject *parent = 0 ): +#ifdef Q_WS_WIN + QSettings(QSettings::IniFormat, QSettings::UserScope, organization, application, parent) +#else + QSettings(organization, application, parent) +#endif + { + + } + +#ifdef Q_WS_WIN + QVariant value(const QString & key, const QVariant &defaultValue = QVariant()) const { + QVariant ret = QSettings::value(key); + if(format() == QSettings::NativeFormat && ret.isNull()) { + // Fallback on Windows, use \ in key instead of / + if(key.contains("/")) { + ret = QSettings::value(key.replace("/", "\\")); + } else { + if(key.contains("\\")) { + ret = QSettings::value(key.replace("\\", "/")); + } + } + } + if(ret.isNull()) + return defaultValue; + return ret; + } + + void setValue(const QString &key, const QVariant &val) { + key = key.replace("/", "\\"); + QSettings::setValue(key, val); + } +#endif +}; + +#endif // QINISETTINGS_H diff --git a/src/src.pro b/src/src.pro index e5f21cf65..ca2e29907 100644 --- a/src/src.pro +++ b/src/src.pro @@ -21,6 +21,9 @@ DEFINES += VERSION_MINOR=3 DEFINES += VERSION_BUGFIX=0 win32 { + # Don't use the system registry on Windows + DEFINES += QSettings QIniSettings + # Adapt these paths on Windows INCLUDEPATH += $$quote(C:/qbittorrent/msvc/boost_1_42_0) INCLUDEPATH += $$quote(C:/qbittorrent/msvc/libtorrent-rasterbar-0.14.10/include) @@ -287,7 +290,8 @@ HEADERS += misc.h \ filesystemwatcher.h \ preferences.h \ bandwidthscheduler.h \ - scannedfoldersmodel.h + scannedfoldersmodel.h \ + qinisettings.h contains(DEFINES, DISABLE_GUI) { HEADERS += headlessloader.h