mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
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:
parent
26f86ca987
commit
03041f925e
@ -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
|
||||
|
||||
|
@ -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)
|
||||
|
||||
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user