diff --git a/src/calibre/devices/apple/driver.py b/src/calibre/devices/apple/driver.py index 4174de3ac7..7a9562f136 100644 --- a/src/calibre/devices/apple/driver.py +++ b/src/calibre/devices/apple/driver.py @@ -17,36 +17,79 @@ from calibre.ebooks.metadata import authors_to_string, MetaInformation, \ title_sort from calibre.ebooks.metadata.book.base import Metadata from calibre.ebooks.metadata.epub import set_metadata +from calibre.gui2.dialogs.confirm_delete import config_name from calibre.library.server.utils import strftime -from calibre.utils.config import config_dir, prefs +from calibre.utils.config import config_dir, dynamic, prefs from calibre.utils.date import now, parse_date from calibre.utils.logging import Log from calibre.utils.zipfile import ZipFile - class AppleOpenFeedback(OpenFeedback): - def __init__(self): + def __init__(self, plugin): OpenFeedback.__init__(self, u'') + self.log = plugin.log + self.plugin = plugin def custom_dialog(self, parent): - from PyQt4.Qt import (QDialog, QVBoxLayout, QLabel, QDialogButtonBox) + from PyQt4.Qt import (QDialog, QDialogButtonBox, QIcon, + QLabel, QPushButton, QVBoxLayout) class Dialog(QDialog): - def __init__(self, p): + def __init__(self, p, pixmap='dialog_information.png'): QDialog.__init__(self, p) + + self.setWindowTitle("Apple iDevice detected") self.l = l = QVBoxLayout() self.setLayout(l) - l.addWidget(QLabel('test')) - self.bb = QDialogButtonBox(QDialogButtonBox.OK) + msg = QLabel() + msg.setText(_( + '
If you do not want calibre to recognize your Apple iDevice ' + 'when it is connected to your computer, ' + 'click Disable Apple Driver.
' + 'To transfer books to your iDevice, ' + 'click Disable Apple Driver, ' + "then use the 'Connect to iTunes' method recommended in the " + 'Calibre + iDevices FAQ, ' + 'using the Connect/Share|Connect to iTunes menu item.
' + 'Enabling the Apple driver for direct connection to iDevices ' + 'is an unsupported advanced user mode.
' + '' + )) + msg.setOpenExternalLinks(True) + msg.setWordWrap(True) + l.addWidget(msg) + + self.bb = QDialogButtonBox() + disable_driver = QPushButton(_("Disable Apple driver")) + disable_driver.setDefault(True) + self.bb.addButton(disable_driver, QDialogButtonBox.RejectRole) + + enable_driver = QPushButton(_("Enable Apple driver")) + self.bb.addButton(enable_driver, QDialogButtonBox.AcceptRole) l.addWidget(self.bb) self.bb.accepted.connect(self.accept) self.bb.rejected.connect(self.reject) + self.setWindowIcon(QIcon(I(pixmap))) + self.resize(self.sizeHint()) + + self.finished.connect(self.do_it) + + def do_it(self, return_code): + if return_code == self.Accepted: + self.log.info(" Apple driver ENABLED") + dynamic[config_name(self.plugin.DISPLAY_DISABLE_DIALOG)] = False + else: + from calibre.customize.ui import disable_plugin + self.log.info(" Apple driver DISABLED") + disable_plugin(self.plugin) + return Dialog(parent) + from PIL import Image as PILImage from lxml import etree @@ -77,15 +120,11 @@ class DriverBase(DeviceConfig, DevicePlugin): 'iBooks Category'), _('Cache covers from iTunes/iBooks') + ':::' + - _('Enable to cache and display covers from iTunes/iBooks'), - _("Skip 'Connect to iTunes' recommendation") + - ':::' + - _("Enable to skip the 'Connect to iTunes' recommendation dialog") + _('Enable to cache and display covers from iTunes/iBooks') ] EXTRA_CUSTOMIZATION_DEFAULT = [ True, True, - False, ] @@ -141,12 +180,13 @@ class ITUNES(DriverBase): supported_platforms = ['osx','windows'] author = 'GRiker' #: The version of this plugin as a 3-tuple (major, minor, revision) - version = (0,9,0) + version = (1,0,0) + + DISPLAY_DISABLE_DIALOG = "display_disable_apple_driver_dialog" # EXTRA_CUSTOMIZATION_MESSAGE indexes USE_SERIES_AS_CATEGORY = 0 CACHE_COVERS = 1 - SKIP_CONNECT_TO_ITUNES_DIALOG = 2 OPEN_FEEDBACK_MESSAGE = _( 'Apple device detected, launching iTunes, please wait ...') @@ -762,15 +802,17 @@ class ITUNES(DriverBase): Note that most of the initialization is necessarily performed in can_handle(), as we need to talk to iTunes to discover if there's a connected iPod ''' + if DEBUG: self.log.info("ITUNES.open()") - # Display a dialog recommending using 'Connect to iTunes' - if False and not self.settings().extra_customization[self.SKIP_CONNECT_TO_ITUNES_DIALOG]: - raise AppleOpenFeedback() - - if DEBUG: - self.log.info(" advanced user mode, directly connecting to iDevice") + # Display a dialog recommending using 'Connect to iTunes' if user hasn't + # previously disabled the dialog + if dynamic.get(config_name(self.DISPLAY_DISABLE_DIALOG),True): + raise AppleOpenFeedback(self) + else: + if DEBUG: + self.log.info(" advanced user mode, directly connecting to iDevice") # Confirm/create thumbs archive if not os.path.exists(self.cache_dir): diff --git a/src/calibre/gui2/dialogs/confirm_delete.py b/src/calibre/gui2/dialogs/confirm_delete.py index 9cdd46712f..6cd6fcaf51 100644 --- a/src/calibre/gui2/dialogs/confirm_delete.py +++ b/src/calibre/gui2/dialogs/confirm_delete.py @@ -7,7 +7,7 @@ from calibre.gui2 import dynamic from calibre.gui2.dialogs.confirm_delete_ui import Ui_Dialog from PyQt4.Qt import QDialog, Qt, QPixmap, QIcon -def _config_name(name): +def config_name(name): return name + '_again' class Dialog(QDialog, Ui_Dialog): @@ -22,11 +22,11 @@ class Dialog(QDialog, Ui_Dialog): self.buttonBox.setFocus(Qt.OtherFocusReason) def toggle(self, *args): - dynamic[_config_name(self.name)] = self.again.isChecked() + dynamic[config_name(self.name)] = self.again.isChecked() def confirm(msg, name, parent=None, pixmap='dialog_warning.png'): - if not dynamic.get(_config_name(name), True): + if not dynamic.get(config_name(name), True): return True d = Dialog(msg, name, parent) d.label.setPixmap(QPixmap(I(pixmap)))