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]
|
PRODUCT_ID = [0x0c02, 0x0c01]
|
||||||
BCD = [0x100]
|
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'
|
VENDOR_NAME = 'HTC'
|
||||||
WINDOWS_MAIN_MEM = 'ANDROID_PHONE'
|
WINDOWS_MAIN_MEM = 'ANDROID_PHONE'
|
||||||
|
|
||||||
OSX_MAIN_MEM = 'HTC Android Phone Media'
|
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
|
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()
|
traceback.print_exc()
|
||||||
self._main_prefix = self._card_a_prefix = self._card_b_prefix = None
|
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):
|
def _sanity_check(self, on_card, files):
|
||||||
if on_card == 'carda' and not self._card_a_prefix:
|
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,
|
path = os.path.join(self._card_b_prefix,
|
||||||
*(self.EBOOK_DIR_CARD_B.split('/')))
|
*(self.EBOOK_DIR_CARD_B.split('/')))
|
||||||
else:
|
else:
|
||||||
path = os.path.join(self._main_prefix,
|
candidates = self.get_main_ebook_dir()
|
||||||
*(self.EBOOK_DIR_MAIN.split('/')))
|
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):
|
def get_size(obj):
|
||||||
if hasattr(obj, 'seek'):
|
if hasattr(obj, 'seek'):
|
||||||
|
@ -9,14 +9,22 @@ from calibre.utils.config import Config, ConfigProxy
|
|||||||
class DeviceConfig(object):
|
class DeviceConfig(object):
|
||||||
|
|
||||||
HELP_MESSAGE = _('Configure Device')
|
HELP_MESSAGE = _('Configure Device')
|
||||||
|
EXTRA_CUSTOMIZATION_MESSAGE = None
|
||||||
|
EXTRA_CUSTOMIZATION_DEFAULT = None
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def _config(cls):
|
def _config(cls):
|
||||||
klass = cls if isinstance(cls, type) else cls.__class__
|
klass = cls if isinstance(cls, type) else cls.__class__
|
||||||
c = Config('device_drivers_%s' % klass.__name__, _('settings for device drivers'))
|
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('format_map', default=cls.FORMATS,
|
||||||
c.add_opt('use_subdirs', default=True, help=_('Place files in sub directories if the device supports them'))
|
help=_('Ordered list of formats the device will accept'))
|
||||||
c.add_opt('read_metadata', default=True, help=_('Read metadata from files on device'))
|
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
|
return c
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
@ -27,16 +35,23 @@ class DeviceConfig(object):
|
|||||||
def config_widget(cls):
|
def config_widget(cls):
|
||||||
from calibre.gui2.device_drivers.configwidget import ConfigWidget
|
from calibre.gui2.device_drivers.configwidget import ConfigWidget
|
||||||
cw = ConfigWidget(cls.settings(), cls.FORMATS, cls.SUPPORTS_SUB_DIRS,
|
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
|
return cw
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def save_settings(cls, config_widget):
|
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:
|
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:
|
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
|
@classmethod
|
||||||
def settings(cls):
|
def settings(cls):
|
||||||
|
@ -11,14 +11,15 @@ from calibre.gui2.device_drivers.configwidget_ui import Ui_ConfigWidget
|
|||||||
class ConfigWidget(QWidget, Ui_ConfigWidget):
|
class ConfigWidget(QWidget, Ui_ConfigWidget):
|
||||||
|
|
||||||
def __init__(self, settings, all_formats, supports_subdirs,
|
def __init__(self, settings, all_formats, supports_subdirs,
|
||||||
must_read_metadata):
|
must_read_metadata, extra_customization_message,
|
||||||
|
extra_customization_value):
|
||||||
|
|
||||||
QWidget.__init__(self)
|
QWidget.__init__(self)
|
||||||
Ui_ConfigWidget.__init__(self)
|
Ui_ConfigWidget.__init__(self)
|
||||||
self.setupUi(self)
|
self.setupUi(self)
|
||||||
|
|
||||||
self.settings = settings
|
self.settings = settings
|
||||||
|
|
||||||
format_map = settings.format_map
|
format_map = settings.format_map
|
||||||
disabled_formats = list(set(all_formats).difference(format_map))
|
disabled_formats = list(set(all_formats).difference(format_map))
|
||||||
for format in format_map + disabled_formats:
|
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)
|
self.opt_read_metadata.setChecked(self.settings.read_metadata)
|
||||||
else:
|
else:
|
||||||
self.opt_read_metadata.hide()
|
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):
|
def up_column(self):
|
||||||
idx = self.columns.currentRow()
|
idx = self.columns.currentRow()
|
||||||
|
@ -73,23 +73,39 @@
|
|||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</item>
|
</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>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</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>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
<resources>
|
<resources>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user