diff --git a/src/calibre/devices/interface.py b/src/calibre/devices/interface.py index f4ade8d02e..11011bcadf 100644 --- a/src/calibre/devices/interface.py +++ b/src/calibre/devices/interface.py @@ -79,7 +79,7 @@ class DevicePlugin(Plugin): are pending GUI jobs that need to communicate with the device. ''' raise NotImplementedError() - + def set_progress_reporter(self, report_progress): ''' @param report_progress: Function that is called with a % progress diff --git a/src/calibre/gui2/device.py b/src/calibre/gui2/device.py index 1205aabf66..517f23fa72 100644 --- a/src/calibre/gui2/device.py +++ b/src/calibre/gui2/device.py @@ -77,7 +77,8 @@ class DeviceManager(Thread): ''' Thread.__init__(self) self.setDaemon(True) - self.devices = [[d, False] for d in device_plugins()] + # [Device driver, Showing in GUI, Ejected] + self.devices = [[d, False, False] for d in device_plugins()] self.device = None self.device_class = None self.sleep_time = sleep_time @@ -93,6 +94,8 @@ class DeviceManager(Thread): for device in self.devices: connected = self.scanner.is_device_connected(device[0]) if connected and not device[1]: + if device[2]: + continue try: dev = device[0] dev.reset() @@ -119,13 +122,23 @@ class DeviceManager(Thread): job.abort(Exception(_('Device no longer connected.'))) except Queue.Empty: break + device[2] = False self.device = None self.connected_slot(False) device[1] ^= True def umount_device(self): - self.device.eject() - self.device = None + if self.device is not None: + self.device.eject() + dev = None + for x in self.devices: + if x[0] is self.device: + dev = x + break + if dev is not None: + dev[2] = True + self.connected_slot(False) + def next(self): if not self.jobs.empty():