diff --git a/src/calibre/devices/mtp/unix/driver.py b/src/calibre/devices/mtp/unix/driver.py index c763da3a45..71914cddc0 100644 --- a/src/calibre/devices/mtp/unix/driver.py +++ b/src/calibre/devices/mtp/unix/driver.py @@ -25,6 +25,8 @@ def fingerprint(d): return MTPDevice(d.busnum, d.devnum, d.vendor_id, d.product_id, d.bcd, d.serial, d.manufacturer, d.product) +APPLE = 0x05ac + class MTP_DEVICE(MTPDeviceBase): # libusb(x) does not work on OS X. So no MTP support for OS X @@ -53,7 +55,8 @@ class MTP_DEVICE(MTPDeviceBase): devs = set() for d in devices_on_system: fp = fingerprint(d) - if fp not in self.blacklisted_devices: + if fp not in self.blacklisted_devices and fp.vendor_id != APPLE: + # Do not try to open Apple devices devs.add(fp) # Clean up ejected devices @@ -93,7 +96,7 @@ class MTP_DEVICE(MTPDeviceBase): p(err) return False devs = [d for d in devices_on_system if (d.vendor_id, d.product_id) - in self.known_devices] + in self.known_devices and d.vendor_id != APPLE] if not devs: p('No known MTP devices connected to system') return False diff --git a/src/calibre/ebooks/mobi/reader/markup.py b/src/calibre/ebooks/mobi/reader/markup.py index 161a76f284..73ba09a189 100644 --- a/src/calibre/ebooks/mobi/reader/markup.py +++ b/src/calibre/ebooks/mobi/reader/markup.py @@ -42,8 +42,8 @@ def update_internal_links(mobi8_reader): mr.header.codec) + suffix tag = posfid_index_pattern.sub(replacement, tag, 1) srcpieces[j] = tag - part = ''.join([x.decode(mr.header.codec) for x in srcpieces]) - parts.append(part) + raw = b''.join(srcpieces) + parts.append(raw.decode(mr.header.codec)) # All parts are now unicode and have no internal links return parts diff --git a/src/calibre/ebooks/mobi/writer8/skeleton.py b/src/calibre/ebooks/mobi/writer8/skeleton.py index 2c3562e87b..c22d8342a6 100644 --- a/src/calibre/ebooks/mobi/writer8/skeleton.py +++ b/src/calibre/ebooks/mobi/writer8/skeleton.py @@ -305,7 +305,7 @@ class Chunker(object): ans.append(start) while rest: start, rest = split_multibyte_text(rest) - ans.append(b'' + start + '') + ans.append(b'' + start + b'') return [Chunk(x, self.chunk_selector) for x in ans] def merge_small_chunks(self, chunks):