From 6d8acbb5c91f77f43b112030757bd77735d79e95 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Mon, 11 Oct 2010 08:49:59 -0600 Subject: [PATCH] Allow device driver to pass an error message to GUI when they dont support backloading --- src/calibre/devices/interface.py | 4 ++-- src/calibre/devices/usbms/device.py | 2 +- src/calibre/gui2/actions/add.py | 4 ++++ src/calibre/gui2/actions/add_to_library.py | 7 +------ src/calibre/gui2/device.py | 9 ++++++--- 5 files changed, 14 insertions(+), 12 deletions(-) diff --git a/src/calibre/devices/interface.py b/src/calibre/devices/interface.py index 9c10de7d6c..75453c74b9 100644 --- a/src/calibre/devices/interface.py +++ b/src/calibre/devices/interface.py @@ -39,9 +39,9 @@ class DevicePlugin(Plugin): #: Whether the metadata on books can be set via the GUI. CAN_SET_METADATA = ['title', 'authors', 'collections'] - # Set this to True if the books on the device are files that the GUI can + # Set this to None if the books on the device are files that the GUI can # access in order to add the books from the device to the library - SUPPORTS_BACKLOADING = False + BACKLOADING_ERROR_MESSAGE = _('Cannot get files from this device') #: Path separator for paths to books on device path_sep = os.sep diff --git a/src/calibre/devices/usbms/device.py b/src/calibre/devices/usbms/device.py index cb26f6a50c..6fcfb9e7f0 100644 --- a/src/calibre/devices/usbms/device.py +++ b/src/calibre/devices/usbms/device.py @@ -96,7 +96,7 @@ class Device(DeviceConfig, DevicePlugin): # USB disk-based devices can see the book files on the device, so can # copy these back to the library - SUPPORTS_BACKLOADING = True + BACKLOADING_ERROR_MESSAGE = None def reset(self, key='-1', log_packets=False, report_progress=None, detected_device=None): diff --git a/src/calibre/gui2/actions/add.py b/src/calibre/gui2/actions/add.py index be1f8f4eaf..9eb197984e 100644 --- a/src/calibre/gui2/actions/add.py +++ b/src/calibre/gui2/actions/add.py @@ -235,6 +235,10 @@ class AddAction(InterfaceAction): self.gui.refresh_ondevice() def add_books_from_device(self, view, paths=None): + backloading_err = self.gui.device_manager.device.BACKLOADING_ERROR_MESSAGE + if backloading_err is not None: + return error_dialog(self.gui, _('Add to library'), backloading_err, + show=True) if paths is None: rows = view.selectionModel().selectedRows() if not rows or len(rows) == 0: diff --git a/src/calibre/gui2/actions/add_to_library.py b/src/calibre/gui2/actions/add_to_library.py index efdf645acb..05aea8f1dd 100644 --- a/src/calibre/gui2/actions/add_to_library.py +++ b/src/calibre/gui2/actions/add_to_library.py @@ -19,12 +19,7 @@ class AddToLibraryAction(InterfaceAction): self.qaction.triggered.connect(self.add_books_to_library) def location_selected(self, loc): - enabled = False - if loc != 'library': - if self.gui.device_manager.is_device_connected: - device = self.gui.device_manager.connected_device - if device is not None: - enabled = getattr(device, 'SUPPORTS_BACKLOADING', False) + enabled = loc != 'library' self.qaction.setEnabled(enabled) def add_books_to_library(self, *args): diff --git a/src/calibre/gui2/device.py b/src/calibre/gui2/device.py index 49bc5c0016..e662c6a5cc 100644 --- a/src/calibre/gui2/device.py +++ b/src/calibre/gui2/device.py @@ -794,13 +794,16 @@ class DeviceMixin(object): # {{{ mainlist, cardalist, cardblist = job.result self.memory_view.set_database(mainlist) self.memory_view.set_editable(self.device_manager.device.CAN_SET_METADATA, - self.device_manager.device.SUPPORTS_BACKLOADING) + self.device_manager.device.BACKLOADING_ERROR_MESSAGE + is None) self.card_a_view.set_database(cardalist) self.card_a_view.set_editable(self.device_manager.device.CAN_SET_METADATA, - self.device_manager.device.SUPPORTS_BACKLOADING) + self.device_manager.device.BACKLOADING_ERROR_MESSAGE + is None) self.card_b_view.set_database(cardblist) self.card_b_view.set_editable(self.device_manager.device.CAN_SET_METADATA, - self.device_manager.device.SUPPORTS_BACKLOADING) + self.device_manager.device.BACKLOADING_ERROR_MESSAGE + is None) self.sync_news() self.sync_catalogs() self.refresh_ondevice()