mirror of
git://github.com/kovidgoyal/calibre.git
synced 2026-05-03 18:33:33 +02:00
Windows device detection: Don't do expensive polling while waiting for device disconnect
This commit is contained in:
parent
8092fd185a
commit
3240c330c1
3 changed files with 13 additions and 7 deletions
|
|
@ -60,7 +60,8 @@ def print_usb_device_info(self, info):
|
|||
import traceback
|
||||
traceback.print_exc()
|
||||
|
||||
def is_usb_connected_windows(self, devices_on_system, debug=False):
|
||||
def is_usb_connected_windows(self, devices_on_system, debug=False,
|
||||
only_presence=False):
|
||||
|
||||
def id_iterator():
|
||||
if hasattr(self.VENDOR_ID, 'keys'):
|
||||
|
|
@ -85,7 +86,7 @@ def id_iterator():
|
|||
self.test_bcd_windows(device_id, bcd):
|
||||
if debug:
|
||||
self.print_usb_device_info(device_id)
|
||||
if self.can_handle_windows(device_id, debug=debug):
|
||||
if only_presence or self.can_handle_windows(device_id, debug=debug):
|
||||
return True
|
||||
return False
|
||||
|
||||
|
|
@ -97,7 +98,8 @@ def test_bcd(self, bcdDevice, bcd):
|
|||
return True
|
||||
return False
|
||||
|
||||
def is_usb_connected(self, devices_on_system, debug=False):
|
||||
def is_usb_connected(self, devices_on_system, debug=False,
|
||||
only_presence=False):
|
||||
'''
|
||||
Return True, device_info if a device handled by this plugin is currently connected.
|
||||
|
||||
|
|
@ -105,7 +107,7 @@ def is_usb_connected(self, devices_on_system, debug=False):
|
|||
'''
|
||||
if iswindows:
|
||||
return self.is_usb_connected_windows(devices_on_system,
|
||||
debug=debug), None
|
||||
debug=debug, only_presence=only_presence), None
|
||||
|
||||
vendors_on_system = set([x[0] for x in devices_on_system])
|
||||
vendors = self.VENDOR_ID if hasattr(self.VENDOR_ID, '__len__') else [self.VENDOR_ID]
|
||||
|
|
|
|||
|
|
@ -139,8 +139,11 @@ def scan(self):
|
|||
'''Fetch list of connected USB devices from operating system'''
|
||||
self.devices = self.scanner()
|
||||
|
||||
def is_device_connected(self, device, debug=False):
|
||||
return device.is_usb_connected(self.devices, debug=debug)
|
||||
def is_device_connected(self, device, debug=False, only_presence=False):
|
||||
''' If only_presence is True don't perform any expensive checks (used
|
||||
only in windows)'''
|
||||
return device.is_usb_connected(self.devices, debug=debug,
|
||||
only_presence=only_presence)
|
||||
|
||||
|
||||
def main(args=sys.argv):
|
||||
|
|
|
|||
|
|
@ -134,7 +134,8 @@ def detect_device(self):
|
|||
self.scanner.scan()
|
||||
if self.is_device_connected:
|
||||
connected, detected_device = \
|
||||
self.scanner.is_device_connected(self.connected_device)
|
||||
self.scanner.is_device_connected(self.connected_device,
|
||||
only_presence=True)
|
||||
if not connected:
|
||||
self.connected_device_removed()
|
||||
else:
|
||||
|
|
|
|||
Loading…
Reference in a new issue