diff --git a/src/calibre/devices/mtp/windows/remote.py b/src/calibre/devices/mtp/windows/remote.py index 88c2b566f9..95a1aae15d 100644 --- a/src/calibre/devices/mtp/windows/remote.py +++ b/src/calibre/devices/mtp/windows/remote.py @@ -58,14 +58,14 @@ def main(): # run() # return - from calibre.devices.scanner import win_scanner + from calibre.devices.winusb import get_usb_devices from calibre.devices.mtp.driver import MTP_DEVICE dev = MTP_DEVICE(None) dev.startup() print (dev.wpd, dev.wpd_error) try: - devices = win_scanner() + devices = get_usb_devices() pnp_id = dev.detect_managed_devices(devices) if not pnp_id: raise ValueError('Failed to detect device') diff --git a/src/calibre/devices/scanner.py b/src/calibre/devices/scanner.py index becb2b6aa7..76b3934681 100644 --- a/src/calibre/devices/scanner.py +++ b/src/calibre/devices/scanner.py @@ -6,20 +6,14 @@ manner. ''' import sys, os, re -from threading import RLock +from threading import Lock from collections import namedtuple from calibre import prints, as_unicode from calibre.constants import (iswindows, isosx, plugins, islinux, isfreebsd, isnetbsd) -osx_scanner = win_scanner = linux_scanner = freebsd_scanner = netbsd_scanner = None - -if iswindows: - try: - win_scanner = plugins['winutil'][0].get_usb_devices - except: - raise RuntimeError('Failed to load the winutil plugin: %s'%plugins['winutil'][1]) +osx_scanner = linux_scanner = freebsd_scanner = netbsd_scanner = None class Drive(str): @@ -38,10 +32,15 @@ def drivecmp(a, b): class WinPNPScanner(object): def __init__(self): - self.scanner = None if iswindows: - self.scanner = plugins['winutil'][0].get_removable_drives - self.lock = RLock() + self.lock = Lock() + + @property + def scanner(self): + if iswindows: + from calibre.devices.winusb import get_removable_drives + return get_removable_drives + return None def drive_is_ok(self, letter, debug=False): import win32api, win32file @@ -88,7 +87,7 @@ class WinPNPScanner(object): if debug: import traceback traceback.print_exc() - remove = set([]) + remove = set() for letter in drives: if not self.drive_is_ok(letter, debug=debug): remove.add(letter) @@ -313,6 +312,8 @@ if isnetbsd: class DeviceScanner(object): def __init__(self, *args): + if iswindows: + from calibre.devices.winusb import get_usb_devices as win_scanner self.scanner = (win_scanner if iswindows else osx_scanner if isosx else freebsd_scanner if isfreebsd else netbsd_scanner if isnetbsd else linux_scanner if islinux else libusb_scanner) diff --git a/src/calibre/devices/usbms/device.py b/src/calibre/devices/usbms/device.py index 52e0709cc3..a2f770b929 100644 --- a/src/calibre/devices/usbms/device.py +++ b/src/calibre/devices/usbms/device.py @@ -901,9 +901,8 @@ class Device(DeviceConfig, DevicePlugin): pass def eject_windows(self): - from calibre.constants import plugins + from calibre.devices.winusb import eject_drive from threading import Thread - winutil, winutil_err = plugins['winutil'] drives = [] for x in ('_main_prefix', '_card_a_prefix', '_card_b_prefix'): x = getattr(self, x, None) @@ -913,7 +912,7 @@ class Device(DeviceConfig, DevicePlugin): def do_it(drives): for d in drives: try: - winutil.eject_drive(bytes(d)[0]) + eject_drive(d) except Exception as e: try: prints("Eject failed:", as_unicode(e))