mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-08-11 09:13:57 -04:00
Add support for MTP devices on OS X
This commit is contained in:
parent
38a777e2fc
commit
2aed6ba715
@ -374,9 +374,9 @@ single android device out there, so if your device is not automatically
|
|||||||
detected, follow the instructions at :ref:`devsupport` to get your device
|
detected, follow the instructions at :ref:`devsupport` to get your device
|
||||||
supported in |app|.
|
supported in |app|.
|
||||||
|
|
||||||
.. note:: With newer Android devices, the USB connection is only supported on
|
.. note:: With newer Android devices, the USB connection is not supported on
|
||||||
Windows Vista and newer and Linux. If you are on Windows XP or OS X,
|
Windows XP. If you are on Windows XP, you should use one of the
|
||||||
you should use one of the wireless connection methods.
|
wireless connection methods.
|
||||||
|
|
||||||
Over the air
|
Over the air
|
||||||
^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^
|
||||||
|
@ -13,7 +13,7 @@ from collections import namedtuple
|
|||||||
from functools import partial
|
from functools import partial
|
||||||
|
|
||||||
from calibre import prints, as_unicode
|
from calibre import prints, as_unicode
|
||||||
from calibre.constants import plugins, islinux
|
from calibre.constants import plugins, islinux, isosx
|
||||||
from calibre.ptempfile import SpooledTemporaryFile
|
from calibre.ptempfile import SpooledTemporaryFile
|
||||||
from calibre.devices.errors import OpenFailed, DeviceError, BlacklistedDevice
|
from calibre.devices.errors import OpenFailed, DeviceError, BlacklistedDevice
|
||||||
from calibre.devices.mtp.base import MTPDeviceBase, synchronous, debug
|
from calibre.devices.mtp.base import MTPDeviceBase, synchronous, debug
|
||||||
@ -31,7 +31,7 @@ APPLE = 0x05ac
|
|||||||
class MTP_DEVICE(MTPDeviceBase):
|
class MTP_DEVICE(MTPDeviceBase):
|
||||||
|
|
||||||
# libusb(x) does not work on OS X. So no MTP support for OS X
|
# libusb(x) does not work on OS X. So no MTP support for OS X
|
||||||
supported_platforms = ['linux']
|
supported_platforms = ['linux', 'osx']
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
MTPDeviceBase.__init__(self, *args, **kwargs)
|
MTPDeviceBase.__init__(self, *args, **kwargs)
|
||||||
@ -49,6 +49,11 @@ class MTP_DEVICE(MTPDeviceBase):
|
|||||||
if islinux:
|
if islinux:
|
||||||
from calibre.devices.mtp.unix.sysfs import MTPDetect
|
from calibre.devices.mtp.unix.sysfs import MTPDetect
|
||||||
self._is_device_mtp = MTPDetect()
|
self._is_device_mtp = MTPDetect()
|
||||||
|
if isosx and 'osx' in self.supported_platforms:
|
||||||
|
self.usbobserver, err = plugins['usbobserver']
|
||||||
|
if err:
|
||||||
|
raise RuntimeError(err)
|
||||||
|
self._is_device_mtp = self.osx_is_device_mtp
|
||||||
|
|
||||||
def is_device_mtp(self, d, debug=None):
|
def is_device_mtp(self, d, debug=None):
|
||||||
''' Returns True iff the _is_device_mtp check returns True and libmtp
|
''' Returns True iff the _is_device_mtp check returns True and libmtp
|
||||||
@ -58,6 +63,21 @@ class MTP_DEVICE(MTPDeviceBase):
|
|||||||
return (self._is_device_mtp(d, debug=debug) and
|
return (self._is_device_mtp(d, debug=debug) and
|
||||||
self.libmtp.is_mtp_device(d.busnum, d.devnum))
|
self.libmtp.is_mtp_device(d.busnum, d.devnum))
|
||||||
|
|
||||||
|
def osx_is_device_mtp(self, d, debug=None):
|
||||||
|
if not d.serial:
|
||||||
|
ans = False
|
||||||
|
else:
|
||||||
|
try:
|
||||||
|
ans = self.usbobserver.is_mtp_device(d.vendor_id, d.product_id, d.bcd, d.serial)
|
||||||
|
except Exception:
|
||||||
|
if debug is not None:
|
||||||
|
import traceback
|
||||||
|
traceback.print_stack()
|
||||||
|
return False
|
||||||
|
if debug is not None and ans:
|
||||||
|
debug('Device {0} claims to be an MTP device in the IOKit registry'.format(d))
|
||||||
|
return bool(ans)
|
||||||
|
|
||||||
def set_debug_level(self, lvl):
|
def set_debug_level(self, lvl):
|
||||||
self.libmtp.set_debug_level(lvl)
|
self.libmtp.set_debug_level(lvl)
|
||||||
|
|
||||||
|
@ -291,7 +291,7 @@ if islinux:
|
|||||||
linux_scanner = LinuxScanner()
|
linux_scanner = LinuxScanner()
|
||||||
|
|
||||||
libusb_scanner = LibUSBScanner()
|
libusb_scanner = LibUSBScanner()
|
||||||
if isosx:
|
if False and isosx:
|
||||||
# Apparently libusb causes mem leaks on some Macs and hangs on others and
|
# Apparently libusb causes mem leaks on some Macs and hangs on others and
|
||||||
# works on a few. OS X users will just have to live without MTP support.
|
# works on a few. OS X users will just have to live without MTP support.
|
||||||
# See https://bugs.launchpad.net/calibre/+bug/1044706
|
# See https://bugs.launchpad.net/calibre/+bug/1044706
|
||||||
|
Loading…
x
Reference in New Issue
Block a user