From ab2b4d4abc6accd6057cf76f14c13ccdecb90636 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Fri, 20 Sep 2013 11:37:47 +0530 Subject: [PATCH] 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. --- src/calibre/gui2/actions/delete.py | 9 ++++----- src/calibre/gui2/device.py | 4 ++++ src/calibre/gui2/tools.py | 4 ++-- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/src/calibre/gui2/actions/delete.py b/src/calibre/gui2/actions/delete.py index 178d94a477..ab5e52d69c 100644 --- a/src/calibre/gui2/actions/delete.py +++ b/src/calibre/gui2/actions/delete.py @@ -19,7 +19,7 @@ from calibre.utils.recycle_bin import can_recycle single_shot = partial(QTimer.singleShot, 10) -class MultiDeleter(QObject): # {{{ +class MultiDeleter(QObject): # {{{ def __init__(self, gui, ids, callback): from calibre.gui2.dialogs.progress import ProgressDialog @@ -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: diff --git a/src/calibre/gui2/device.py b/src/calibre/gui2/device.py index d97d44381e..ef7e3665de 100644 --- a/src/calibre/gui2/device.py +++ b/src/calibre/gui2/device.py @@ -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 diff --git a/src/calibre/gui2/tools.py b/src/calibre/gui2/tools.py index 25a925ffbb..021891b7ac 100644 --- a/src/calibre/gui2/tools.py +++ b/src/calibre/gui2/tools.py @@ -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: