Tweak to restrict list of output formats

Add a tweak to restrict the list of output formats available in the
conversion dialog. Go to Preferences->Tweaks to change it.
This commit is contained in:
Kovid Goyal 2013-07-09 17:33:28 +05:30
parent 26f86ca987
commit 03041f925e
3 changed files with 30 additions and 14 deletions

View File

@ -537,3 +537,10 @@ many_libraries = 10
# highlight with this tweak. Set it to 'transparent' to disable highlighting.
highlight_virtual_library = 'yellow'
#: Choose available output formats for conversion
# Restrict the list of available output formats in the conversion dialogs.
# For example, if you only want to convert to EPUB and AZW3, change this to
# restrict_output_formats = ['EPUB', 'AZW3']. The default value of None causes
# all available output formats to be present.
restrict_output_formats = None

View File

@ -9,8 +9,7 @@ import shutil
from PyQt4.Qt import QString, SIGNAL
from calibre.gui2.convert.single import (Config, sort_formats_by_preference,
GroupModel, gprefs)
from calibre.customize.ui import available_output_formats
GroupModel, gprefs, get_output_formats)
from calibre.gui2 import ResizableDialog
from calibre.gui2.convert.look_and_feel import LookAndFeelWidget
from calibre.gui2.convert.heuristics import HeuristicsWidget
@ -43,7 +42,6 @@ class BulkConfig(Config):
'values saved in a previous conversion (if they exist) instead '
'of using the defaults specified in the Preferences'))
self.connect(self.output_formats, SIGNAL('currentIndexChanged(QString)'),
self.setup_pipeline)
self.connect(self.groups, SIGNAL('activated(QModelIndex)'),
@ -96,7 +94,8 @@ class BulkConfig(Config):
while True:
c = self.stack.currentWidget()
if not c: break
if not c:
break
self.stack.removeWidget(c)
widgets = [lf, hw, ps, sd, toc, sr]
@ -118,17 +117,14 @@ class BulkConfig(Config):
except:
pass
def setup_output_formats(self, db, preferred_output_format):
if preferred_output_format:
preferred_output_format = preferred_output_format.lower()
output_formats = sorted(available_output_formats(),
key=lambda x:{'EPUB':'!A', 'MOBI':'!B'}.get(x.upper(), x))
output_formats.remove('oeb')
output_formats = get_output_formats(preferred_output_format)
preferred_output_format = preferred_output_format if \
preferred_output_format and preferred_output_format \
in output_formats else sort_formats_by_preference(output_formats,
prefs['output_format'])[0]
[prefs['output_format']])[0]
self.output_formats.addItems(list(map(QString, [x.upper() for x in
output_formats])))
self.output_formats.setCurrentIndex(output_formats.index(preferred_output_format))
@ -149,3 +145,4 @@ class BulkConfig(Config):
bytearray(self.saveGeometry())
return ResizableDialog.done(self, r)

View File

@ -29,7 +29,7 @@ from calibre.ebooks.conversion.plumber import (Plumber,
from calibre.ebooks.conversion.config import delete_specifics
from calibre.customize.ui import available_output_formats
from calibre.customize.conversion import OptionRecommendation
from calibre.utils.config import prefs
from calibre.utils.config import prefs, tweaks
from calibre.utils.logging import Log
class NoSupportedInputFormats(Exception):
@ -48,6 +48,20 @@ def sort_formats_by_preference(formats, prefs):
return len(prefs)
return sorted(formats, key=key)
def get_output_formats(preferred_output_format):
all_formats = {x.upper() for x in available_output_formats()}
all_formats.discard('OEB')
pfo = preferred_output_format.upper() if preferred_output_format else ''
restrict = tweaks['restrict_output_formats']
if restrict:
fmts = [x.upper() for x in restrict]
if pfo and pfo not in fmts and pfo in all_formats:
fmts.append(pfo)
else:
fmts = list(sorted(all_formats,
key=lambda x:{'EPUB':'!A', 'MOBI':'!B'}.get(x.upper(), x)))
return fmts
class GroupModel(QAbstractListModel):
def __init__(self, widgets):
@ -239,15 +253,13 @@ class Config(ResizableDialog, Ui_Dialog):
preferred_output_format):
if preferred_output_format:
preferred_output_format = preferred_output_format.lower()
output_formats = sorted(available_output_formats(),
key=lambda x:{'EPUB':'!A', 'MOBI':'!B'}.get(x.upper(), x))
output_formats.remove('oeb')
output_formats = get_output_formats(preferred_output_format)
input_format, input_formats = get_input_format_for_book(db, book_id,
preferred_input_format)
preferred_output_format = preferred_output_format if \
preferred_output_format in output_formats else \
sort_formats_by_preference(output_formats,
prefs['output_format'])[0]
[prefs['output_format']])[0]
self.input_formats.addItems(list(map(QString, [x.upper() for x in
input_formats])))
self.output_formats.addItems(list(map(QString, [x.upper() for x in