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 with this tweak. Set it to 'transparent' to disable highlighting.
|
||||||
highlight_virtual_library = 'yellow'
|
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 PyQt4.Qt import QString, SIGNAL
|
||||||
|
|
||||||
from calibre.gui2.convert.single import (Config, sort_formats_by_preference,
|
from calibre.gui2.convert.single import (Config, sort_formats_by_preference,
|
||||||
GroupModel, gprefs)
|
GroupModel, gprefs, get_output_formats)
|
||||||
from calibre.customize.ui import available_output_formats
|
|
||||||
from calibre.gui2 import ResizableDialog
|
from calibre.gui2 import ResizableDialog
|
||||||
from calibre.gui2.convert.look_and_feel import LookAndFeelWidget
|
from calibre.gui2.convert.look_and_feel import LookAndFeelWidget
|
||||||
from calibre.gui2.convert.heuristics import HeuristicsWidget
|
from calibre.gui2.convert.heuristics import HeuristicsWidget
|
||||||
@ -43,7 +42,6 @@ class BulkConfig(Config):
|
|||||||
'values saved in a previous conversion (if they exist) instead '
|
'values saved in a previous conversion (if they exist) instead '
|
||||||
'of using the defaults specified in the Preferences'))
|
'of using the defaults specified in the Preferences'))
|
||||||
|
|
||||||
|
|
||||||
self.connect(self.output_formats, SIGNAL('currentIndexChanged(QString)'),
|
self.connect(self.output_formats, SIGNAL('currentIndexChanged(QString)'),
|
||||||
self.setup_pipeline)
|
self.setup_pipeline)
|
||||||
self.connect(self.groups, SIGNAL('activated(QModelIndex)'),
|
self.connect(self.groups, SIGNAL('activated(QModelIndex)'),
|
||||||
@ -96,7 +94,8 @@ class BulkConfig(Config):
|
|||||||
|
|
||||||
while True:
|
while True:
|
||||||
c = self.stack.currentWidget()
|
c = self.stack.currentWidget()
|
||||||
if not c: break
|
if not c:
|
||||||
|
break
|
||||||
self.stack.removeWidget(c)
|
self.stack.removeWidget(c)
|
||||||
|
|
||||||
widgets = [lf, hw, ps, sd, toc, sr]
|
widgets = [lf, hw, ps, sd, toc, sr]
|
||||||
@ -118,17 +117,14 @@ class BulkConfig(Config):
|
|||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
def setup_output_formats(self, db, preferred_output_format):
|
def setup_output_formats(self, db, preferred_output_format):
|
||||||
if preferred_output_format:
|
if preferred_output_format:
|
||||||
preferred_output_format = preferred_output_format.lower()
|
preferred_output_format = preferred_output_format.lower()
|
||||||
output_formats = sorted(available_output_formats(),
|
output_formats = get_output_formats(preferred_output_format)
|
||||||
key=lambda x:{'EPUB':'!A', 'MOBI':'!B'}.get(x.upper(), x))
|
|
||||||
output_formats.remove('oeb')
|
|
||||||
preferred_output_format = preferred_output_format if \
|
preferred_output_format = preferred_output_format if \
|
||||||
preferred_output_format and preferred_output_format \
|
preferred_output_format and preferred_output_format \
|
||||||
in output_formats else sort_formats_by_preference(output_formats,
|
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
|
self.output_formats.addItems(list(map(QString, [x.upper() for x in
|
||||||
output_formats])))
|
output_formats])))
|
||||||
self.output_formats.setCurrentIndex(output_formats.index(preferred_output_format))
|
self.output_formats.setCurrentIndex(output_formats.index(preferred_output_format))
|
||||||
@ -149,3 +145,4 @@ class BulkConfig(Config):
|
|||||||
bytearray(self.saveGeometry())
|
bytearray(self.saveGeometry())
|
||||||
return ResizableDialog.done(self, r)
|
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.ebooks.conversion.config import delete_specifics
|
||||||
from calibre.customize.ui import available_output_formats
|
from calibre.customize.ui import available_output_formats
|
||||||
from calibre.customize.conversion import OptionRecommendation
|
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
|
from calibre.utils.logging import Log
|
||||||
|
|
||||||
class NoSupportedInputFormats(Exception):
|
class NoSupportedInputFormats(Exception):
|
||||||
@ -48,6 +48,20 @@ def sort_formats_by_preference(formats, prefs):
|
|||||||
return len(prefs)
|
return len(prefs)
|
||||||
return sorted(formats, key=key)
|
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):
|
class GroupModel(QAbstractListModel):
|
||||||
|
|
||||||
def __init__(self, widgets):
|
def __init__(self, widgets):
|
||||||
@ -239,15 +253,13 @@ class Config(ResizableDialog, Ui_Dialog):
|
|||||||
preferred_output_format):
|
preferred_output_format):
|
||||||
if preferred_output_format:
|
if preferred_output_format:
|
||||||
preferred_output_format = preferred_output_format.lower()
|
preferred_output_format = preferred_output_format.lower()
|
||||||
output_formats = sorted(available_output_formats(),
|
output_formats = get_output_formats(preferred_output_format)
|
||||||
key=lambda x:{'EPUB':'!A', 'MOBI':'!B'}.get(x.upper(), x))
|
|
||||||
output_formats.remove('oeb')
|
|
||||||
input_format, input_formats = get_input_format_for_book(db, book_id,
|
input_format, input_formats = get_input_format_for_book(db, book_id,
|
||||||
preferred_input_format)
|
preferred_input_format)
|
||||||
preferred_output_format = preferred_output_format if \
|
preferred_output_format = preferred_output_format if \
|
||||||
preferred_output_format in output_formats else \
|
preferred_output_format in output_formats else \
|
||||||
sort_formats_by_preference(output_formats,
|
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
|
self.input_formats.addItems(list(map(QString, [x.upper() for x in
|
||||||
input_formats])))
|
input_formats])))
|
||||||
self.output_formats.addItems(list(map(QString, [x.upper() for x in
|
self.output_formats.addItems(list(map(QString, [x.upper() for x in
|
||||||
|
Loading…
x
Reference in New Issue
Block a user