|
|
@ -45,6 +45,10 @@ |
|
|
|
#include <QCoreApplication> |
|
|
|
#include <QCoreApplication> |
|
|
|
#endif |
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef Q_OS_WIN |
|
|
|
|
|
|
|
#include <ShlObj.h> |
|
|
|
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
|
|
#include "misc.h" |
|
|
|
#include "misc.h" |
|
|
|
#include "fs_utils.h" |
|
|
|
#include "fs_utils.h" |
|
|
|
#include "qinisettings.h" |
|
|
|
#include "qinisettings.h" |
|
|
@ -1204,35 +1208,21 @@ public: |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
static bool isTorrentFileAssocSet() { |
|
|
|
static bool isTorrentFileAssocSet() { |
|
|
|
QSettings settings("HKEY_CLASSES_ROOT", QIniSettings::NativeFormat); |
|
|
|
QSettings settings("HKEY_CURRENT_USER\\Software\\Classes", QSettings::NativeFormat); |
|
|
|
if (settings.value(".torrent/Default").toString() != "qBittorrent") { |
|
|
|
if (settings.value(".torrent/Default").toString() != "qBittorrent") { |
|
|
|
qDebug(".torrent != qBittorrent"); |
|
|
|
qDebug(".torrent != qBittorrent"); |
|
|
|
return false; |
|
|
|
return false; |
|
|
|
} |
|
|
|
} |
|
|
|
qDebug("Checking shell command"); |
|
|
|
|
|
|
|
QString shell_command = fsutils::toNativePath(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) |
|
|
|
|
|
|
|
return false; |
|
|
|
|
|
|
|
QString assoc_exe = exe_reg.cap(1); |
|
|
|
|
|
|
|
qDebug("exe: %s", qPrintable(assoc_exe)); |
|
|
|
|
|
|
|
if (assoc_exe.compare(fsutils::toNativePath(qApp->applicationFilePath()), Qt::CaseInsensitive) != 0) |
|
|
|
|
|
|
|
return false; |
|
|
|
|
|
|
|
// Icon
|
|
|
|
|
|
|
|
const QString icon_str = "\""+fsutils::toNativePath(qApp->applicationFilePath())+"\",1"; |
|
|
|
|
|
|
|
if (settings.value("qBittorrent/DefaultIcon/Default", icon_str).toString().compare(icon_str, Qt::CaseInsensitive) != 0) |
|
|
|
|
|
|
|
return false; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return true; |
|
|
|
return true; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
static bool isMagnetLinkAssocSet() { |
|
|
|
static bool isMagnetLinkAssocSet() { |
|
|
|
QSettings settings("HKEY_CLASSES_ROOT", QIniSettings::NativeFormat); |
|
|
|
QSettings settings("HKEY_CURRENT_USER\\Software\\Classes", QSettings::NativeFormat); |
|
|
|
|
|
|
|
|
|
|
|
// Check magnet link assoc
|
|
|
|
// Check magnet link assoc
|
|
|
|
QRegExp exe_reg("\"([^\"]+)\".*"); |
|
|
|
QRegExp exe_reg("\"([^\"]+)\".*"); |
|
|
|
QString shell_command = fsutils::toNativePath(settings.value("Magnet/shell/open/command/Default", "").toString()); |
|
|
|
QString shell_command = fsutils::toNativePath(settings.value("magnet/shell/open/command/Default", "").toString()); |
|
|
|
if (exe_reg.indexIn(shell_command) < 0) |
|
|
|
if (exe_reg.indexIn(shell_command) < 0) |
|
|
|
return false; |
|
|
|
return false; |
|
|
|
QString assoc_exe = exe_reg.cap(1); |
|
|
|
QString assoc_exe = exe_reg.cap(1); |
|
|
@ -1243,51 +1233,40 @@ public: |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
static void setTorrentFileAssoc(bool set) { |
|
|
|
static void setTorrentFileAssoc(bool set) { |
|
|
|
QSettings settings("HKEY_CLASSES_ROOT", QSettings::NativeFormat); |
|
|
|
QSettings settings("HKEY_CURRENT_USER\\Software\\Classes", QSettings::NativeFormat); |
|
|
|
|
|
|
|
|
|
|
|
// .Torrent association
|
|
|
|
// .Torrent association
|
|
|
|
if (set) { |
|
|
|
if (set) { |
|
|
|
const QString command_str = "\""+qApp->applicationFilePath()+"\" \"%1\""; |
|
|
|
QString old_progid = settings.value(".torrent/Default").toString(); |
|
|
|
const QString icon_str = "\""+qApp->applicationFilePath()+"\",1"; |
|
|
|
if (!old_progid.isEmpty() && (old_progid != "qBittorrent")) |
|
|
|
|
|
|
|
settings.setValue(".torrent/OpenWithProgids/" + old_progid, ""); |
|
|
|
settings.setValue(".torrent/Default", "qBittorrent"); |
|
|
|
settings.setValue(".torrent/Default", "qBittorrent"); |
|
|
|
settings.setValue(".torrent/Content Type", "application/x-bittorrent"); |
|
|
|
|
|
|
|
settings.setValue("qBittorrent/shell/Default", "open"); |
|
|
|
|
|
|
|
settings.setValue("qBittorrent/shell/open/command/Default", fsutils::toNativePath(command_str)); |
|
|
|
|
|
|
|
settings.setValue("qBittorrent/Content Type/Default", "application/x-bittorrent"); |
|
|
|
|
|
|
|
settings.setValue("qBittorrent/DefaultIcon/Default", fsutils::toNativePath(icon_str)); |
|
|
|
|
|
|
|
} else if (isTorrentFileAssocSet()) { |
|
|
|
} else if (isTorrentFileAssocSet()) { |
|
|
|
settings.remove(".torrent/Default"); |
|
|
|
settings.setValue(".torrent/Default", ""); |
|
|
|
settings.remove(".torrent/Content Type"); |
|
|
|
|
|
|
|
settings.remove("qBittorrent/shell/Default"); |
|
|
|
|
|
|
|
settings.remove("qBittorrent/shell/open/command/Default"); |
|
|
|
|
|
|
|
settings.remove("qBittorrent/Content Type/Default"); |
|
|
|
|
|
|
|
settings.remove("qBittorrent/DefaultIcon/Default"); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, 0, 0); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
static void setMagnetLinkAssoc(bool set) { |
|
|
|
static void setMagnetLinkAssoc(bool set) { |
|
|
|
QSettings settings("HKEY_CLASSES_ROOT", QSettings::NativeFormat); |
|
|
|
QSettings settings("HKEY_CURRENT_USER\\Software\\Classes", QSettings::NativeFormat); |
|
|
|
|
|
|
|
|
|
|
|
// Magnet association
|
|
|
|
// Magnet association
|
|
|
|
if (set) { |
|
|
|
if (set) { |
|
|
|
const QString command_str = "\""+qApp->applicationFilePath()+"\" \"%1\""; |
|
|
|
const QString command_str = "\""+qApp->applicationFilePath()+"\" \"%1\""; |
|
|
|
const QString icon_str = "\""+qApp->applicationFilePath()+"\",1"; |
|
|
|
const QString icon_str = "\""+qApp->applicationFilePath()+"\",1"; |
|
|
|
|
|
|
|
|
|
|
|
settings.setValue("Magnet/Default", "Magnet URI"); |
|
|
|
settings.setValue("magnet/Default", "URL:Magnet link"); |
|
|
|
settings.setValue("Magnet/Content Type", "application/x-magnet"); |
|
|
|
settings.setValue("magnet/Content Type", "application/x-magnet"); |
|
|
|
settings.setValue("Magnet/URL Protocol", ""); |
|
|
|
settings.setValue("magnet/URL Protocol", ""); |
|
|
|
settings.setValue("Magnet/DefaultIcon/Default", fsutils::toNativePath(icon_str)); |
|
|
|
settings.setValue("magnet/DefaultIcon/Default", fsutils::toNativePath(icon_str)); |
|
|
|
settings.setValue("Magnet/shell/Default", "open"); |
|
|
|
settings.setValue("magnet/shell/Default", "open"); |
|
|
|
settings.setValue("Magnet/shell/open/command/Default", fsutils::toNativePath(command_str)); |
|
|
|
settings.setValue("magnet/shell/open/command/Default", fsutils::toNativePath(command_str)); |
|
|
|
} else if (isMagnetLinkAssocSet()) { |
|
|
|
} else if (isMagnetLinkAssocSet()) { |
|
|
|
settings.remove("Magnet/Default"); |
|
|
|
settings.remove("magnet"); |
|
|
|
settings.remove("Magnet/Content Type"); |
|
|
|
|
|
|
|
settings.remove("Magnet/URL Protocol"); |
|
|
|
|
|
|
|
settings.remove("Magnet/DefaultIcon/Default"); |
|
|
|
|
|
|
|
settings.remove("Magnet/shell/Default"); |
|
|
|
|
|
|
|
settings.remove("Magnet/shell/open/command/Default"); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, 0, 0); |
|
|
|
} |
|
|
|
} |
|
|
|
#endif |
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
|
|