mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-06-23 15:30:45 -04:00
Implement #3246 (additional file naming options for "Saving books" tab)
This commit is contained in:
parent
fd2d6bdd3d
commit
779fcd4fe2
@ -758,7 +758,8 @@ class CheckIntegrity(QProgressDialog):
|
|||||||
|
|
||||||
def __init__(self, db, parent=None):
|
def __init__(self, db, parent=None):
|
||||||
QProgressDialog.__init__(self, parent)
|
QProgressDialog.__init__(self, parent)
|
||||||
self.setCancelButtonText('')
|
self.db = db
|
||||||
|
self.setCancelButton(None)
|
||||||
self.setMinimum(0)
|
self.setMinimum(0)
|
||||||
self.setMaximum(100)
|
self.setMaximum(100)
|
||||||
self.setWindowTitle(_('Checking database integrity'))
|
self.setWindowTitle(_('Checking database integrity'))
|
||||||
|
@ -26,7 +26,8 @@ class AddSave(QTabWidget, Ui_TabWidget):
|
|||||||
self.removeTab(2)
|
self.removeTab(2)
|
||||||
c = config()
|
c = config()
|
||||||
opts = c.parse()
|
opts = c.parse()
|
||||||
for x in ('asciiize', 'update_metadata', 'save_cover', 'write_opf'):
|
for x in ('asciiize', 'update_metadata', 'save_cover', 'write_opf',
|
||||||
|
'replace_whitespace', 'to_lowercase'):
|
||||||
g = getattr(self, 'opt_'+x)
|
g = getattr(self, 'opt_'+x)
|
||||||
g.setChecked(getattr(opts, x))
|
g.setChecked(getattr(opts, x))
|
||||||
help = '\n'.join(textwrap.wrap(c.get_option(x).help, 75))
|
help = '\n'.join(textwrap.wrap(c.get_option(x).help, 75))
|
||||||
@ -74,7 +75,8 @@ class AddSave(QTabWidget, Ui_TabWidget):
|
|||||||
if not self.validate():
|
if not self.validate():
|
||||||
return False
|
return False
|
||||||
c = config()
|
c = config()
|
||||||
for x in ('asciiize', 'update_metadata', 'save_cover', 'write_opf'):
|
for x in ('asciiize', 'update_metadata', 'save_cover', 'write_opf',
|
||||||
|
'replace_whitespace', 'to_lowercase'):
|
||||||
c.set(x, getattr(self, 'opt_'+x).isChecked())
|
c.set(x, getattr(self, 'opt_'+x).isChecked())
|
||||||
for x in ('formats', 'template', 'timefmt'):
|
for x in ('formats', 'template', 'timefmt'):
|
||||||
c.set(x, unicode(getattr(self, 'opt_'+x).text()).strip())
|
c.set(x, unicode(getattr(self, 'opt_'+x).text()).strip())
|
||||||
|
@ -77,14 +77,14 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="1" column="0" colspan="2">
|
<item row="1" column="0">
|
||||||
<widget class="QCheckBox" name="opt_save_cover">
|
<widget class="QCheckBox" name="opt_save_cover">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Save &cover separately</string>
|
<string>Save &cover separately</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="2" column="0" colspan="2">
|
<item row="2" column="0">
|
||||||
<widget class="QCheckBox" name="opt_update_metadata">
|
<widget class="QCheckBox" name="opt_update_metadata">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Update &metadata in saved copies</string>
|
<string>Update &metadata in saved copies</string>
|
||||||
@ -163,6 +163,20 @@
|
|||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item row="1" column="1">
|
||||||
|
<widget class="QCheckBox" name="opt_replace_whitespace">
|
||||||
|
<property name="text">
|
||||||
|
<string>Replace space with &underscores</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="1">
|
||||||
|
<widget class="QCheckBox" name="opt_to_lowercase">
|
||||||
|
<property name="text">
|
||||||
|
<string>Change paths to &lowercase</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
</widget>
|
</widget>
|
||||||
|
@ -530,6 +530,12 @@ an opf file). You can get id numbers from the list command.
|
|||||||
parser.add_option(switch, default=opt.default,
|
parser.add_option(switch, default=opt.default,
|
||||||
help=opt.help, dest=pref)
|
help=opt.help, dest=pref)
|
||||||
|
|
||||||
|
for pref in ('replace_whitespace', 'to_lowercase'):
|
||||||
|
opt = c.get_option(pref)
|
||||||
|
switch = '--'+pref.replace('_', '-')
|
||||||
|
parser.add_option(switch, default=False, action='store_true',
|
||||||
|
help=opt.help)
|
||||||
|
|
||||||
opts, args = parser.parse_args(sys.argv[1:]+args)
|
opts, args = parser.parse_args(sys.argv[1:]+args)
|
||||||
if (len(args) < 2 and not opts.all):
|
if (len(args) < 2 and not opts.all):
|
||||||
parser.print_help()
|
parser.print_help()
|
||||||
|
@ -6,7 +6,7 @@ __license__ = 'GPL v3'
|
|||||||
__copyright__ = '2009, Kovid Goyal <kovid@kovidgoyal.net>'
|
__copyright__ = '2009, Kovid Goyal <kovid@kovidgoyal.net>'
|
||||||
__docformat__ = 'restructuredtext en'
|
__docformat__ = 'restructuredtext en'
|
||||||
|
|
||||||
import os, traceback, cStringIO
|
import os, traceback, cStringIO, re
|
||||||
|
|
||||||
from calibre.utils.config import Config, StringConfig
|
from calibre.utils.config import Config, StringConfig
|
||||||
from calibre.utils.filenames import shorten_components_to, supports_long_names, \
|
from calibre.utils.filenames import shorten_components_to, supports_long_names, \
|
||||||
@ -71,6 +71,10 @@ def config(defaults=None):
|
|||||||
x('timefmt', default='%b, %Y',
|
x('timefmt', default='%b, %Y',
|
||||||
help=_('The format in which to display dates. %d - day, %b - month, '
|
help=_('The format in which to display dates. %d - day, %b - month, '
|
||||||
'%Y - year. Default is: %b, %Y'))
|
'%Y - year. Default is: %b, %Y'))
|
||||||
|
x('to_lowercase', default=False,
|
||||||
|
help=_('Convert paths to lowercase.'))
|
||||||
|
x('replace_whitespace', default=False,
|
||||||
|
help=_('Replace whitespace with underscores.'))
|
||||||
return c
|
return c
|
||||||
|
|
||||||
def preprocess_template(template):
|
def preprocess_template(template):
|
||||||
@ -81,7 +85,9 @@ def preprocess_template(template):
|
|||||||
template = template.decode(preferred_encoding, 'replace')
|
template = template.decode(preferred_encoding, 'replace')
|
||||||
return template
|
return template
|
||||||
|
|
||||||
def get_components(template, mi, id, timefmt='%b %Y', length=250, sanitize_func=ascii_filename):
|
def get_components(template, mi, id, timefmt='%b %Y', length=250,
|
||||||
|
sanitize_func=ascii_filename, replace_whitespace=False,
|
||||||
|
to_lowercase=False):
|
||||||
format_args = dict(**FORMAT_ARGS)
|
format_args = dict(**FORMAT_ARGS)
|
||||||
if mi.title:
|
if mi.title:
|
||||||
format_args['title'] = mi.title
|
format_args['title'] = mi.title
|
||||||
@ -113,6 +119,11 @@ def get_components(template, mi, id, timefmt='%b %Y', length=250, sanitize_func=
|
|||||||
components = [str(id)]
|
components = [str(id)]
|
||||||
components = [x.encode(filesystem_encoding, 'replace') if isinstance(x,
|
components = [x.encode(filesystem_encoding, 'replace') if isinstance(x,
|
||||||
unicode) else x for x in components]
|
unicode) else x for x in components]
|
||||||
|
if to_lowercase:
|
||||||
|
components = [x.lower() for x in components]
|
||||||
|
if replace_whitespace:
|
||||||
|
components = [re.sub(r'\s', '_', x) for x in components]
|
||||||
|
|
||||||
return shorten_components_to(length, components)
|
return shorten_components_to(length, components)
|
||||||
|
|
||||||
|
|
||||||
@ -134,7 +145,9 @@ def save_book_to_disk(id, db, root, opts, length):
|
|||||||
return True, id, mi.title
|
return True, id, mi.title
|
||||||
|
|
||||||
components = get_components(opts.template, mi, id, opts.timefmt, length,
|
components = get_components(opts.template, mi, id, opts.timefmt, length,
|
||||||
ascii_filename if opts.asciiize else sanitize_file_name)
|
ascii_filename if opts.asciiize else sanitize_file_name,
|
||||||
|
to_lowercase=opts.to_lowercase,
|
||||||
|
replace_whitespace=opts.replace_whitespace)
|
||||||
base_path = os.path.join(root, *components)
|
base_path = os.path.join(root, *components)
|
||||||
base_name = os.path.basename(base_path)
|
base_name = os.path.basename(base_path)
|
||||||
dirpath = os.path.dirname(base_path)
|
dirpath = os.path.dirname(base_path)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user