When ejecting a device from the OS fails, do not think that the device

is still connected when performing various GUI actions, such as deleting
books.
This commit is contained in:
Kovid Goyal 2013-09-20 11:37:47 +05:30
parent d8fef25259
commit ab2b4d4abc
3 changed files with 10 additions and 7 deletions

View File

@ -256,7 +256,7 @@ class DeleteAction(InterfaceAction):
self.gui.tags_view.recount()
def remove_matching_books_from_device(self, *args):
if not self.gui.device_manager.is_device_connected:
if not self.gui.device_manager.is_device_present:
d = error_dialog(self.gui, _('Cannot delete books'),
_('No device is connected'))
d.exec_()
@ -264,7 +264,7 @@ class DeleteAction(InterfaceAction):
ids = self._get_selected_ids()
if not ids:
#_get_selected_ids shows a dialog box if nothing is selected, so we
#do not need to show one here
# do not need to show one here
return
to_delete = {}
some_to_delete = False
@ -305,7 +305,6 @@ class DeleteAction(InterfaceAction):
self.gui.library_view.model().current_changed(self.gui.library_view.currentIndex(),
self.gui.library_view.currentIndex())
def library_ids_deleted(self, ids_deleted, current_row=None):
view = self.gui.library_view
for v in (self.gui.memory_view, self.gui.card_a_view, self.gui.card_b_view):
@ -332,7 +331,7 @@ class DeleteAction(InterfaceAction):
def do_library_delete(self, to_delete_ids):
view = self.gui.current_view()
# Ask the user if they want to delete the book from the library or device if it is in both.
if self.gui.device_manager.is_device_connected:
if self.gui.device_manager.is_device_present:
on_device = False
on_device_ids = self._get_selected_ids()
for id in on_device_ids:

View File

@ -166,6 +166,10 @@ class DeviceManager(Thread): # {{{
def is_device_connected(self):
return self.connected_device is not None
@property
def is_device_present(self):
return self.connected_device is not None and self.connected_device not in self.ejected_devices
@property
def device(self):
return self.connected_device

View File

@ -318,7 +318,7 @@ def generate_catalog(parent, dbspec, ids, device_manager, db): # {{{
# Profile the connected device
# Parallel initialization in calibre.library.cli:command_catalog()
connected_device = {
'is_device_connected': device_manager.is_device_connected,
'is_device_connected': device_manager.is_device_present,
'kind': device_manager.connected_device_kind,
'name': None,
'save_template': None,
@ -326,7 +326,7 @@ def generate_catalog(parent, dbspec, ids, device_manager, db): # {{{
'storage': None
}
if device_manager.is_device_connected:
if device_manager.is_device_present:
device = device_manager.device
connected_device['name'] = device.get_gui_name()
try: