diff --git a/src/calibre/devices/android/driver.py b/src/calibre/devices/android/driver.py index 2fc78bbc18..82553b1d77 100644 --- a/src/calibre/devices/android/driver.py +++ b/src/calibre/devices/android/driver.py @@ -22,13 +22,27 @@ class ANDROID(USBMS): ] PRODUCT_ID = [0x0c02, 0x0c01] BCD = [0x100] - EBOOK_DIR_MAIN = 'wordplayer/calibretransfer' + EBOOK_DIR_MAIN = ['wordplayer/calibretransfer', 'eBooks/import', 'Books'] + EXTRA_CUSTOMIZATION_MESSAGE = _('Comma separated list of directories to ' + 'send e-books to on the device. The first one that exists will ' + 'be used') + EXTRA_CUSTOMIZATION_DEFAULT = ', '.join(EBOOK_DIR_MAIN) VENDOR_NAME = 'HTC' WINDOWS_MAIN_MEM = 'ANDROID_PHONE' OSX_MAIN_MEM = 'HTC Android Phone Media' - MAIN_MEMORY_VOLUME_LABEL = 'Android Internal Memory' + MAIN_MEMORY_VOLUME_LABEL = 'Android Device Internal Memory' SUPPORTS_SUB_DIRS = True + + def get_main_ebook_dir(self): + opts = self.settings() + dirs = opts.extra_customization + if not dirs: + dirs = self.EBOOK_DIR_MAIN + else: + dirs = [x.strip() for x in dirs.split(',')] + return dirs + diff --git a/src/calibre/devices/usbms/device.py b/src/calibre/devices/usbms/device.py index 6e9868d93c..4320652ee1 100644 --- a/src/calibre/devices/usbms/device.py +++ b/src/calibre/devices/usbms/device.py @@ -662,7 +662,8 @@ class Device(DeviceConfig, DevicePlugin): traceback.print_exc() self._main_prefix = self._card_a_prefix = self._card_b_prefix = None - + def get_main_ebook_dir(self): + return self.EBOOK_DIR_MAIN def _sanity_check(self, on_card, files): if on_card == 'carda' and not self._card_a_prefix: @@ -679,8 +680,15 @@ class Device(DeviceConfig, DevicePlugin): path = os.path.join(self._card_b_prefix, *(self.EBOOK_DIR_CARD_B.split('/'))) else: - path = os.path.join(self._main_prefix, - *(self.EBOOK_DIR_MAIN.split('/'))) + candidates = self.get_main_ebook_dir() + if isinstance(candidates, basestring): + candidates = [candidates] + candidates = [os.path.join(self._main_prefix, *(x.split('/'))) for x + in candidates] + existing = [x for x in candidates if os.path.exists(x)] + if not existing: + existing = candidates[:1] + path = existing[0] def get_size(obj): if hasattr(obj, 'seek'): diff --git a/src/calibre/devices/usbms/deviceconfig.py b/src/calibre/devices/usbms/deviceconfig.py index 64cfccce68..8c5c1cf47d 100644 --- a/src/calibre/devices/usbms/deviceconfig.py +++ b/src/calibre/devices/usbms/deviceconfig.py @@ -9,14 +9,22 @@ from calibre.utils.config import Config, ConfigProxy class DeviceConfig(object): HELP_MESSAGE = _('Configure Device') + EXTRA_CUSTOMIZATION_MESSAGE = None + EXTRA_CUSTOMIZATION_DEFAULT = None @classmethod def _config(cls): klass = cls if isinstance(cls, type) else cls.__class__ c = Config('device_drivers_%s' % klass.__name__, _('settings for device drivers')) - c.add_opt('format_map', default=cls.FORMATS, help=_('Ordered list of formats the device will accept')) - c.add_opt('use_subdirs', default=True, help=_('Place files in sub directories if the device supports them')) - c.add_opt('read_metadata', default=True, help=_('Read metadata from files on device')) + c.add_opt('format_map', default=cls.FORMATS, + help=_('Ordered list of formats the device will accept')) + c.add_opt('use_subdirs', default=True, + help=_('Place files in sub directories if the device supports them')) + c.add_opt('read_metadata', default=True, + help=_('Read metadata from files on device')) + c.add_opt('extra_customization', + default=cls.EXTRA_CUSTOMIZATION_DEFAULT, + help=_('Extra customization')) return c @classmethod @@ -27,16 +35,23 @@ class DeviceConfig(object): def config_widget(cls): from calibre.gui2.device_drivers.configwidget import ConfigWidget cw = ConfigWidget(cls.settings(), cls.FORMATS, cls.SUPPORTS_SUB_DIRS, - cls.MUST_READ_METADATA) + cls.MUST_READ_METADATA, cls.EXTRA_CUSTOMIZATION_MESSAGE, + cls.EXTRA_CUSTOMIZATION_DEFAULT) return cw @classmethod def save_settings(cls, config_widget): - cls._configProxy()['format_map'] = config_widget.format_map() + proxy = cls._configProxy() + proxy['format_map'] = config_widget.format_map() if cls.SUPPORTS_SUB_DIRS: - cls._configProxy()['use_subdirs'] = config_widget.use_subdirs() + proxy['use_subdirs'] = config_widget.use_subdirs() if not cls.MUST_READ_METADATA: - cls._configProxy()['read_metadata'] = config_widget.read_metadata() + proxy['read_metadata'] = config_widget.read_metadata() + if cls.EXTRA_CUSTOMIZATION_MESSAGE: + ec = unicode(config_widget.opt_extra_customization.text()).strip() + if not ec: + ec = None + proxy['extra_customization'] = ec @classmethod def settings(cls): diff --git a/src/calibre/gui2/device_drivers/configwidget.py b/src/calibre/gui2/device_drivers/configwidget.py index ef81e0533d..735a3d8c2e 100644 --- a/src/calibre/gui2/device_drivers/configwidget.py +++ b/src/calibre/gui2/device_drivers/configwidget.py @@ -11,14 +11,15 @@ from calibre.gui2.device_drivers.configwidget_ui import Ui_ConfigWidget class ConfigWidget(QWidget, Ui_ConfigWidget): def __init__(self, settings, all_formats, supports_subdirs, - must_read_metadata): + must_read_metadata, extra_customization_message, + extra_customization_value): QWidget.__init__(self) Ui_ConfigWidget.__init__(self) self.setupUi(self) - + self.settings = settings - + format_map = settings.format_map disabled_formats = list(set(all_formats).difference(format_map)) for format in format_map + disabled_formats: @@ -38,6 +39,14 @@ class ConfigWidget(QWidget, Ui_ConfigWidget): self.opt_read_metadata.setChecked(self.settings.read_metadata) else: self.opt_read_metadata.hide() + if extra_customization_message: + self.extra_customization_label.setText(extra_customization_message) + if extra_customization_value: + self.opt_extra_customization.setText(extra_customization_value) + else: + self.extra_customization_label.setVisible(False) + self.opt_extra_customization.setVisible(False) + def up_column(self): idx = self.columns.currentRow() diff --git a/src/calibre/gui2/device_drivers/configwidget.ui b/src/calibre/gui2/device_drivers/configwidget.ui index 1a42a5e386..12ce01549c 100644 --- a/src/calibre/gui2/device_drivers/configwidget.ui +++ b/src/calibre/gui2/device_drivers/configwidget.ui @@ -73,23 +73,39 @@ - - - - Use sub directories - - - - - - - Read metadata from files on device - - - + + + + Read metadata from files on device + + + + + + + Use sub directories + + + + + + + Extra customization + + + true + + + opt_extra_customization + + + + + +