diff --git a/src/calibre/constants.py b/src/calibre/constants.py index dc1fa8cf9b..75e6b28095 100644 --- a/src/calibre/constants.py +++ b/src/calibre/constants.py @@ -254,8 +254,8 @@ class ExtensionsImporter: if iswindows: extra = ('winutil', 'wpd', 'winfonts') elif ismacos: - extra = ('usbobserver', 'cocoa') - elif isfreebsd or ishaiku or islinux or ismacos: + extra = ('usbobserver', 'cocoa', 'libusb', 'libmtp') + elif isfreebsd or ishaiku or islinux: extra = ('libusb', 'libmtp') else: extra = () diff --git a/src/calibre/devices/mtp/unix/driver.py b/src/calibre/devices/mtp/unix/driver.py index 9ab7502041..460ad2d92d 100644 --- a/src/calibre/devices/mtp/unix/driver.py +++ b/src/calibre/devices/mtp/unix/driver.py @@ -11,7 +11,7 @@ from collections import namedtuple from functools import partial from calibre import prints, as_unicode, force_unicode -from calibre.constants import plugins, islinux, ismacos +from calibre.constants import islinux, ismacos from calibre.ptempfile import SpooledTemporaryFile from calibre.devices.errors import OpenFailed, DeviceError, BlacklistedDevice, OpenActionNeeded from calibre.devices.mtp.base import MTPDeviceBase, synchronous, debug @@ -52,9 +52,8 @@ class MTP_DEVICE(MTPDeviceBase): from calibre.devices.mtp.unix.sysfs import MTPDetect self._is_device_mtp = MTPDetect() if ismacos and 'osx' in self.supported_platforms: - self.usbobserver, err = plugins['usbobserver'] - if err: - raise RuntimeError(err) + from calibre_extensions import usbobserver + self.usbobserver = usbobserver self._is_device_mtp = self.osx_is_device_mtp def is_device_mtp(self, d, debug=None): @@ -128,9 +127,7 @@ class MTP_DEVICE(MTPDeviceBase): return True p = partial(prints, file=output) if self.libmtp is None: - err = plugins['libmtp'][1] - if not err: - err = 'startup() not called on this device driver' + err = 'startup() not called on this device driver' p(err) return False devs = [d for d in devices_on_system if @@ -190,12 +187,14 @@ class MTP_DEVICE(MTPDeviceBase): @synchronous def startup(self): - p = plugins['libmtp'] - self.libmtp = p[0] - if self.libmtp is None: + try: + from calibre_extensions import libmtp + except Exception as err: print('Failed to load libmtp, MTP device detection disabled') - print(p[1]) + print(err) + self.libmtp = None else: + self.libmtp = libmtp self.known_devices = frozenset(self.libmtp.known_devices()) for x in vars(self.libmtp): diff --git a/src/calibre/gui2/__init__.py b/src/calibre/gui2/__init__.py index f75cf04fd1..25daf9862c 100644 --- a/src/calibre/gui2/__init__.py +++ b/src/calibre/gui2/__init__.py @@ -26,7 +26,7 @@ from calibre import as_unicode, prints from calibre.constants import ( DEBUG, __appname__ as APP_UID, __version__, config_dir, filesystem_encoding, is_running_from_develop, isbsd, isfrozen, islinux, ismacos, iswindows, isxp, - plugins, plugins_loc + plugins_loc ) from calibre.ebooks.metadata import MetaInformation from calibre.gui2.linux_file_dialogs import ( @@ -881,9 +881,8 @@ class Application(QApplication): args.extend(['-platformpluginpath', plugins_loc, '-platform', 'headless']) self.headless = headless qargs = [i.encode('utf-8') if isinstance(i, unicode_type) else i for i in args] - self.pi, pi_err = plugins['progress_indicator'] - if pi_err: - raise RuntimeError('Failed to load the progress_indicator C extension, with error: {}'.format(pi_err)) + from calibre_extensions import progress_indicator + self.pi = progress_indicator if not ismacos and not headless: # On OS X high dpi scaling is turned on automatically by the OS, so we dont need to set it explicitly setup_hidpi() @@ -899,7 +898,8 @@ class Application(QApplication): if hasattr(sh, 'setShowShortcutsInContextMenus'): sh.setShowShortcutsInContextMenus(True) if ismacos: - plugins['cocoa'][0].disable_cocoa_ui_elements() + from calibre_extensions.cocoa import disable_cocoa_ui_elements + disable_cocoa_ui_elements() self.setAttribute(Qt.AA_UseHighDpiPixmaps) self.setAttribute(Qt.AA_SynthesizeTouchForUnhandledMouseEvents, False) try: @@ -977,10 +977,8 @@ class Application(QApplication): self.aboutToQuit.connect(self.flush_clipboard) if ismacos: - cocoa, err = plugins['cocoa'] - if err: - raise RuntimeError('Failed to load cocoa plugin with error: {}'.format(err)) - cft = cocoa.cursor_blink_time() + from calibre_extensions.cocoa import cursor_blink_time + cft = cursor_blink_time() if cft >= 0: self.setCursorFlashTime(int(cft)) @@ -1134,7 +1132,8 @@ class Application(QApplication): icon_map[getattr(QStyle, 'SP_'+k)] = v transient_scroller = 0 if ismacos: - transient_scroller = plugins['cocoa'][0].transient_scroller() + from calibre_extensions.cocoa import transient_scroller + transient_scroller = transient_scroller() icon_map[QStyle.SP_CustomBase + 1] = I('close-for-light-theme.png') icon_map[QStyle.SP_CustomBase + 2] = I('close-for-dark-theme.png') self.pi.load_style(icon_map, transient_scroller) @@ -1491,8 +1490,9 @@ def set_app_uid(val): def add_to_recent_docs(path): + from calibre_extensions import winutil app = QApplication.instance() - plugins['winutil'][0].add_to_recent_docs(unicode_type(path), app.windows_app_uid) + winutil.add_to_recent_docs(unicode_type(path), app.windows_app_uid) def windows_is_system_dark_mode_enabled():