diff --git a/src/calibre/devices/apple/driver.py b/src/calibre/devices/apple/driver.py index 0cfa8f1ab2..4174de3ac7 100644 --- a/src/calibre/devices/apple/driver.py +++ b/src/calibre/devices/apple/driver.py @@ -24,6 +24,29 @@ from calibre.utils.logging import Log from calibre.utils.zipfile import ZipFile + +class AppleOpenFeedback(OpenFeedback): + + def __init__(self): + OpenFeedback.__init__(self, u'') + + def custom_dialog(self, parent): + from PyQt4.Qt import (QDialog, QVBoxLayout, QLabel, QDialogButtonBox) + + class Dialog(QDialog): + + def __init__(self, p): + QDialog.__init__(self, p) + self.l = l = QVBoxLayout() + self.setLayout(l) + l.addWidget(QLabel('test')) + self.bb = QDialogButtonBox(QDialogButtonBox.OK) + l.addWidget(self.bb) + self.bb.accepted.connect(self.accept) + self.bb.rejected.connect(self.reject) + + return Dialog(parent) + from PIL import Image as PILImage from lxml import etree @@ -744,13 +767,7 @@ class ITUNES(DriverBase): # Display a dialog recommending using 'Connect to iTunes' if False and not self.settings().extra_customization[self.SKIP_CONNECT_TO_ITUNES_DIALOG]: - raise OpenFeedback('

' + ('Click the "Connect/Share" button and choose' - ' "Connect to iTunes" to send books from your calibre library' - ' to your Apple iDevice.

For more information, see ' - '' - 'Calibre + Apple iDevices FAQ.

' - 'After following the Quick Start steps outlined in the FAQ, ' - 'restart calibre.')) + raise AppleOpenFeedback() if DEBUG: self.log.info(" advanced user mode, directly connecting to iDevice") diff --git a/src/calibre/devices/errors.py b/src/calibre/devices/errors.py index 3d88eb741f..7b11b6933f 100644 --- a/src/calibre/devices/errors.py +++ b/src/calibre/devices/errors.py @@ -41,6 +41,13 @@ class OpenFeedback(DeviceError): self.feedback_msg = msg DeviceError.__init__(self, msg) + def custom_dialog(self, parent): + ''' + If you need to show the user a custom dialog, instead if just + displaying the feedback_msg, create and return it here. + ''' + raise NotImplementedError + class DeviceBusy(ProtocolError): """ Raised when device is busy """ def __init__(self, uerr=""): diff --git a/src/calibre/gui2/device.py b/src/calibre/gui2/device.py index ab2177cef1..6163c01d27 100644 --- a/src/calibre/gui2/device.py +++ b/src/calibre/gui2/device.py @@ -164,7 +164,7 @@ class DeviceManager(Thread): # {{{ dev.open(self.current_library_uuid) except OpenFeedback as e: if dev not in self.ejected_devices: - self.open_feedback_msg(dev.get_gui_name(), e.feedback_msg) + self.open_feedback_msg(dev.get_gui_name(), e) self.ejected_devices.add(dev) continue except: @@ -618,8 +618,11 @@ class DeviceMixin(object): # {{{ if tweaks['auto_connect_to_folder']: self.connect_to_folder_named(tweaks['auto_connect_to_folder']) - def show_open_feedback(self, devname, msg): - self.__of_dev_mem__ = d = info_dialog(self, devname, msg) + def show_open_feedback(self, devname, e): + try: + self.__of_dev_mem__ = d = e.custom_dialog(self) + except NotImplementedError: + self.__of_dev_mem__ = d = info_dialog(self, devname, e.feedback_msg) d.show() def auto_convert_question(self, msg, autos):