Implement #3392 (Set default book directory on Android device in preferences)

This commit is contained in:
Kovid Goyal 2009-12-02 11:42:56 -07:00
parent 6ce068faf6
commit 614b098756
5 changed files with 91 additions and 29 deletions

View File

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

View File

@ -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'):

View File

@ -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):

View File

@ -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()

View File

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