Browse Source

Merge pull request #4436 from GuidC0DE/magnet_handler_osx

Set qBittorrent as default torrent app in Mac OS
adaptive-webui-19844
sledgehammer999 9 years ago
parent
commit
a19e2e48a1
  1. 60
      src/base/preferences.cpp
  2. 6
      src/base/preferences.h
  3. 23
      src/gui/options_imp.cpp

60
src/base/preferences.cpp

@ -51,6 +51,10 @@
#include <winreg.h> #include <winreg.h>
#endif #endif
#ifdef Q_OS_MAC
#include <CoreServices/CoreServices.h>
#endif
#include <cstdlib> #include <cstdlib>
#include "base/utils/fs.h" #include "base/utils/fs.h"
#include "base/utils/misc.h" #include "base/utils/misc.h"
@ -1879,6 +1883,62 @@ void Preferences::setMagnetLinkAssoc(bool set)
} }
#endif #endif
#ifdef Q_OS_MAC
namespace
{
CFStringRef torrentExtension = CFSTR("torrent");
CFStringRef magnetUrlScheme = CFSTR("magnet");
}
bool Preferences::isTorrentFileAssocSet()
{
bool isSet = false;
CFStringRef torrentId = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, torrentExtension, NULL);
if (torrentId != NULL) {
CFStringRef defaultHandlerId = LSCopyDefaultRoleHandlerForContentType(torrentId, kLSRolesViewer);
if (defaultHandlerId != NULL) {
CFStringRef myBundleId = CFBundleGetIdentifier(CFBundleGetMainBundle());
isSet = CFStringCompare(myBundleId, defaultHandlerId, 0) == kCFCompareEqualTo;
CFRelease(defaultHandlerId);
}
CFRelease(torrentId);
}
return isSet;
}
bool Preferences::isMagnetLinkAssocSet()
{
bool isSet = false;
CFStringRef defaultHandlerId = LSCopyDefaultHandlerForURLScheme(magnetUrlScheme);
if (defaultHandlerId != NULL) {
CFStringRef myBundleId = CFBundleGetIdentifier(CFBundleGetMainBundle());
isSet = CFStringCompare(myBundleId, defaultHandlerId, 0) == kCFCompareEqualTo;
CFRelease(defaultHandlerId);
}
return isSet;
}
void Preferences::setTorrentFileAssoc()
{
if (isTorrentFileAssocSet())
return;
CFStringRef torrentId = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, torrentExtension, NULL);
if (torrentId != NULL) {
CFStringRef myBundleId = CFBundleGetIdentifier(CFBundleGetMainBundle());
LSSetDefaultRoleHandlerForContentType(torrentId, kLSRolesViewer, myBundleId);
CFRelease(torrentId);
}
}
void Preferences::setMagnetLinkAssoc()
{
if (isMagnetLinkAssocSet())
return;
CFStringRef myBundleId = CFBundleGetIdentifier(CFBundleGetMainBundle());
LSSetDefaultHandlerForURLScheme(magnetUrlScheme, myBundleId);
}
#endif
bool Preferences::isTrackerEnabled() const bool Preferences::isTrackerEnabled() const
{ {
return value("Preferences/Advanced/trackerEnabled", false).toBool(); return value("Preferences/Advanced/trackerEnabled", false).toBool();

6
src/base/preferences.h

@ -417,6 +417,12 @@ public:
static bool isMagnetLinkAssocSet(); static bool isMagnetLinkAssocSet();
static void setTorrentFileAssoc(bool set); static void setTorrentFileAssoc(bool set);
static void setMagnetLinkAssoc(bool set); static void setMagnetLinkAssoc(bool set);
#endif
#ifdef Q_OS_MAC
static bool isTorrentFileAssocSet();
static bool isMagnetLinkAssocSet();
static void setTorrentFileAssoc();
static void setMagnetLinkAssoc();
#endif #endif
bool isTrackerEnabled() const; bool isTrackerEnabled() const;
void setTrackerEnabled(bool enabled); void setTrackerEnabled(bool enabled);

23
src/gui/options_imp.cpp

@ -126,6 +126,9 @@ options_imp::options_imp(QWidget *parent)
#ifndef Q_OS_WIN #ifndef Q_OS_WIN
checkStartup->setVisible(false); checkStartup->setVisible(false);
#endif
#if !(defined(Q_OS_WIN) || defined(Q_OS_MAC))
groupFileAssociation->setVisible(false); groupFileAssociation->setVisible(false);
#endif #endif
@ -152,7 +155,7 @@ options_imp::options_imp(QWidget *parent)
#if (defined(Q_OS_UNIX) && !defined(Q_OS_MAC)) && !defined(QT_DBUS_LIB) #if (defined(Q_OS_UNIX) && !defined(Q_OS_MAC)) && !defined(QT_DBUS_LIB)
checkPreventFromSuspend->setDisabled(true); checkPreventFromSuspend->setDisabled(true);
#endif #endif
#ifdef Q_OS_WIN #if defined(Q_OS_WIN) || defined(Q_OS_MAC)
connect(checkAssociateTorrents, SIGNAL(toggled(bool)), this, SLOT(enableApplyButton())); connect(checkAssociateTorrents, SIGNAL(toggled(bool)), this, SLOT(enableApplyButton()));
connect(checkAssociateMagnetLinks, SIGNAL(toggled(bool)), this, SLOT(enableApplyButton())); connect(checkAssociateMagnetLinks, SIGNAL(toggled(bool)), this, SLOT(enableApplyButton()));
#endif #endif
@ -406,6 +409,18 @@ void options_imp::saveOptions()
// Windows: file association settings // Windows: file association settings
Preferences::setTorrentFileAssoc(checkAssociateTorrents->isChecked()); Preferences::setTorrentFileAssoc(checkAssociateTorrents->isChecked());
Preferences::setMagnetLinkAssoc(checkAssociateMagnetLinks->isChecked()); Preferences::setMagnetLinkAssoc(checkAssociateMagnetLinks->isChecked());
#endif
#ifdef Q_OS_MAC
if (checkAssociateTorrents->isChecked()) {
Preferences::setTorrentFileAssoc();
checkAssociateTorrents->setChecked(Preferences::isTorrentFileAssocSet());
checkAssociateTorrents->setEnabled(!checkAssociateTorrents->isChecked());
}
if (checkAssociateMagnetLinks->isChecked()) {
Preferences::setMagnetLinkAssoc();
checkAssociateMagnetLinks->setChecked(Preferences::isMagnetLinkAssocSet());
checkAssociateMagnetLinks->setEnabled(!checkAssociateMagnetLinks->isChecked());
}
#endif #endif
// End General preferences // End General preferences
@ -580,6 +595,12 @@ void options_imp::loadOptions()
checkStartup->setChecked(pref->WinStartup()); checkStartup->setChecked(pref->WinStartup());
checkAssociateTorrents->setChecked(Preferences::isTorrentFileAssocSet()); checkAssociateTorrents->setChecked(Preferences::isTorrentFileAssocSet());
checkAssociateMagnetLinks->setChecked(Preferences::isMagnetLinkAssocSet()); checkAssociateMagnetLinks->setChecked(Preferences::isMagnetLinkAssocSet());
#endif
#ifdef Q_OS_MAC
checkAssociateTorrents->setChecked(Preferences::isTorrentFileAssocSet());
checkAssociateTorrents->setEnabled(!checkAssociateTorrents->isChecked());
checkAssociateMagnetLinks->setChecked(Preferences::isMagnetLinkAssocSet());
checkAssociateMagnetLinks->setEnabled(!checkAssociateMagnetLinks->isChecked());
#endif #endif
// End General preferences // End General preferences

Loading…
Cancel
Save