mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Implement #3392 (Set default book directory on Android device in preferences)
This commit is contained in:
parent
6ce068faf6
commit
614b098756
@ -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
|
||||
|
||||
|
@ -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'):
|
||||
|
@ -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):
|
||||
|
@ -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()
|
||||
|
@ -73,23 +73,39 @@
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="opt_use_subdirs">
|
||||
<property name="text">
|
||||
<string>Use sub directories</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="opt_read_metadata">
|
||||
<property name="text">
|
||||
<string>Read metadata from files on device</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QCheckBox" name="opt_read_metadata">
|
||||
<property name="text">
|
||||
<string>Read metadata from files on device</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QCheckBox" name="opt_use_subdirs">
|
||||
<property name="text">
|
||||
<string>Use sub directories</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<widget class="QLabel" name="extra_customization_label">
|
||||
<property name="text">
|
||||
<string>Extra customization</string>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="buddy">
|
||||
<cstring>opt_extra_customization</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="0">
|
||||
<widget class="QLineEdit" name="opt_extra_customization"/>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources>
|
||||
|
Loading…
x
Reference in New Issue
Block a user