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
+
+
+
+ -
+
+