mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
GUI: Convert single.
This commit is contained in:
parent
05a9732dbb
commit
035d85392a
@ -1004,18 +1004,7 @@ class Main(MainWindow, Ui_MainWindow, DeviceGUI):
|
|||||||
_('No books selected'))
|
_('No books selected'))
|
||||||
d.exec_()
|
d.exec_()
|
||||||
return [], []
|
return [], []
|
||||||
comics, others = [], []
|
return [self.library_view.model().db.id(r) for r in rows]
|
||||||
db = self.library_view.model().db
|
|
||||||
for r in rows:
|
|
||||||
formats = db.formats(r)
|
|
||||||
if not formats: continue
|
|
||||||
formats = formats.lower().split(',')
|
|
||||||
if 'cbr' in formats or 'cbz' in formats:
|
|
||||||
comics.append(r)
|
|
||||||
else:
|
|
||||||
others.append(r)
|
|
||||||
return comics, others
|
|
||||||
|
|
||||||
|
|
||||||
def convert_bulk(self, checked):
|
def convert_bulk(self, checked):
|
||||||
r = self.get_books_for_conversion()
|
r = self.get_books_for_conversion()
|
||||||
@ -1044,14 +1033,13 @@ class Main(MainWindow, Ui_MainWindow, DeviceGUI):
|
|||||||
set_conversion_defaults(True, self, self.library_view.model().db)
|
set_conversion_defaults(True, self, self.library_view.model().db)
|
||||||
|
|
||||||
def convert_single(self, checked):
|
def convert_single(self, checked):
|
||||||
r = self.get_books_for_conversion()
|
row_ids = self.get_books_for_conversion()
|
||||||
if r is None: return
|
if row_ids is None: return
|
||||||
previous = self.library_view.currentIndex()
|
previous = self.library_view.currentIndex()
|
||||||
rows = [x.row() for x in \
|
rows = [x.row() for x in \
|
||||||
self.library_view.selectionModel().selectedRows()]
|
self.library_view.selectionModel().selectedRows()]
|
||||||
comics, others = r
|
|
||||||
jobs, changed = convert_single_ebook(self,
|
jobs, changed = convert_single_ebook(self,
|
||||||
self.library_view.model().db, comics, others)
|
self.library_view.model().db, row_ids)
|
||||||
for func, args, desc, fmt, id, temp_files in jobs:
|
for func, args, desc, fmt, id, temp_files in jobs:
|
||||||
job = self.job_manager.run_job(Dispatcher(self.book_converted),
|
job = self.job_manager.run_job(Dispatcher(self.book_converted),
|
||||||
func, args=args, description=desc)
|
func, args=args, description=desc)
|
||||||
|
@ -14,6 +14,9 @@ from calibre.utils.config import prefs
|
|||||||
from calibre.gui2 import warning_dialog
|
from calibre.gui2 import warning_dialog
|
||||||
from calibre.ptempfile import PersistentTemporaryFile
|
from calibre.ptempfile import PersistentTemporaryFile
|
||||||
|
|
||||||
|
from calibre.gui2.convert import load_specifics
|
||||||
|
from calibre.gui2.convert.single import Config as SingleConfig
|
||||||
|
|
||||||
# Ordered list of source formats. Items closer to the beginning are
|
# Ordered list of source formats. Items closer to the beginning are
|
||||||
# preferred for conversion over those toward the end.
|
# preferred for conversion over those toward the end.
|
||||||
PREFERRED_SOURCE_FORMATS = ['epub', 'lit', 'mobi', 'prc', 'azw', 'fb2', 'odt', 'rtf',
|
PREFERRED_SOURCE_FORMATS = ['epub', 'lit', 'mobi', 'prc', 'azw', 'fb2', 'odt', 'rtf',
|
||||||
@ -40,7 +43,6 @@ def auto_convert(fmt, parent, db, rows):
|
|||||||
return None, None, None
|
return None, None, None
|
||||||
parent.status_bar.showMessage(_('Starting auto conversion of %d books')%total, 2000)
|
parent.status_bar.showMessage(_('Starting auto conversion of %d books')%total, 2000)
|
||||||
|
|
||||||
i = 0
|
|
||||||
bad_rows = []
|
bad_rows = []
|
||||||
|
|
||||||
for i, row in enumerate(rows):
|
for i, row in enumerate(rows):
|
||||||
@ -85,133 +87,43 @@ def auto_convert(fmt, parent, db, rows):
|
|||||||
|
|
||||||
return jobs, changed, bad_rows
|
return jobs, changed, bad_rows
|
||||||
|
|
||||||
def convert_single(fmt, parent, db, comics, others):
|
def convert_single_ebook(parent, db, row_ids):
|
||||||
changed = False
|
changed = False
|
||||||
jobs = []
|
jobs = []
|
||||||
others_ids = [db.id(row) for row in others]
|
|
||||||
comics_ids = [db.id(row) for row in comics]
|
total = len(row_ids)
|
||||||
for row, row_id in zip(others, others_ids):
|
if total == 0:
|
||||||
temp_files = []
|
return None, None, None
|
||||||
d = get_dialog(fmt)(parent, db, row)
|
parent.status_bar.showMessage(_('Starting conversion of %d books') % total, 2000)
|
||||||
if d.source_format is not None:
|
|
||||||
d.exec_()
|
|
||||||
if d.result() == QDialog.Accepted:
|
|
||||||
opts = d.opts
|
|
||||||
data = db.format(row, d.source_format)
|
|
||||||
pt = PersistentTemporaryFile('.'+d.source_format.lower())
|
|
||||||
pt.write(data)
|
|
||||||
pt.close()
|
|
||||||
of = PersistentTemporaryFile('.'+fmt)
|
|
||||||
of.close()
|
|
||||||
opts.output = of.name
|
|
||||||
opts.from_opf = d.opf_file.name
|
|
||||||
opts.verbose = 2
|
|
||||||
args = [opts, pt.name]
|
|
||||||
if d.cover_file:
|
|
||||||
temp_files.append(d.cover_file)
|
|
||||||
opts.cover = d.cover_file.name
|
|
||||||
temp_files.extend([d.opf_file, pt, of])
|
|
||||||
jobs.append(('any2'+fmt, args, _('Convert book: ')+d.mi.title,
|
|
||||||
fmt.upper(), row_id, temp_files))
|
|
||||||
changed = True
|
|
||||||
|
|
||||||
for row, row_id in zip(comics, comics_ids):
|
for i, row_id in enumerate(row_ids):
|
||||||
mi = db.get_metadata(row)
|
temp_files = []
|
||||||
title = author = _('Unknown')
|
|
||||||
if mi.title:
|
d = SingleConfig(parent, db, row_id)
|
||||||
title = mi.title
|
if d.exec_() == QDialog.Accepted:
|
||||||
if mi.authors:
|
mi = db.get_metadata(row_id, True)
|
||||||
author = ','.join(mi.authors)
|
in_file = db.format_abspath(row_id, d.input_format, True)
|
||||||
defaults = db.conversion_options(db.id(row), 'comic')
|
|
||||||
opts, defaults = ComicConf.get_conversion_options(parent, defaults, title, author)
|
out_file = PersistentTemporaryFile('.' + d.output_format)
|
||||||
if defaults is not None:
|
out_file.write(d.output_format)
|
||||||
db.set_conversion_options(db.id(row), 'comic', defaults)
|
out_file.close()
|
||||||
if opts is None: continue
|
|
||||||
for _fmt in ['cbz', 'cbr']:
|
desc = _('Convert book %d of %d (%s)') % (i + 1, total, repr(mi.title))
|
||||||
try:
|
|
||||||
data = db.format(row, _fmt.upper())
|
opts = load_specifics(db, row_id)
|
||||||
if data is not None:
|
opts_string = ''
|
||||||
break
|
for opt in opts.keys():
|
||||||
except:
|
opts_string += ' --%s %s ' % (opt, opts[opt])
|
||||||
continue
|
|
||||||
pt = PersistentTemporaryFile('.'+_fmt)
|
args = [['', in_file, out_file.name, opts_string]]
|
||||||
pt.write(data)
|
temp_files = [out_file]
|
||||||
pt.close()
|
jobs.append(('ebook-convert', args, desc, d.output_format.upper(), row_id, temp_files))
|
||||||
of = PersistentTemporaryFile('.'+fmt)
|
|
||||||
of.close()
|
changed = True
|
||||||
opts.output = of.name
|
|
||||||
opts.verbose = 2
|
|
||||||
args = [pt.name, opts]
|
|
||||||
changed = True
|
|
||||||
jobs.append(('comic2'+fmt, args, _('Convert comic: ')+opts.title,
|
|
||||||
fmt.upper(), row_id, [pt, of]))
|
|
||||||
|
|
||||||
return jobs, changed
|
return jobs, changed
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def convert_single_lrf(parent, db, comics, others):
|
|
||||||
changed = False
|
|
||||||
jobs = []
|
|
||||||
others_ids = [db.id(row) for row in others]
|
|
||||||
comics_ids = [db.id(row) for row in comics]
|
|
||||||
for row, row_id in zip(others, others_ids):
|
|
||||||
temp_files = []
|
|
||||||
d = LRFSingleDialog(parent, db, row)
|
|
||||||
if d.selected_format:
|
|
||||||
d.exec_()
|
|
||||||
if d.result() == QDialog.Accepted:
|
|
||||||
cmdline = d.cmdline
|
|
||||||
data = db.format(row, d.selected_format)
|
|
||||||
pt = PersistentTemporaryFile('.'+d.selected_format.lower())
|
|
||||||
pt.write(data)
|
|
||||||
pt.close()
|
|
||||||
of = PersistentTemporaryFile('.lrf')
|
|
||||||
of.close()
|
|
||||||
cmdline.extend(['-o', of.name])
|
|
||||||
cmdline.append(pt.name)
|
|
||||||
if d.cover_file:
|
|
||||||
temp_files.append(d.cover_file)
|
|
||||||
temp_files.extend([pt, of])
|
|
||||||
jobs.append(('any2lrf', [cmdline], _('Convert book: ')+d.title(),
|
|
||||||
'LRF', row_id, temp_files))
|
|
||||||
changed = True
|
|
||||||
|
|
||||||
for row, row_id in zip(comics, comics_ids):
|
|
||||||
mi = db.get_metadata(row)
|
|
||||||
title = author = _('Unknown')
|
|
||||||
if mi.title:
|
|
||||||
title = mi.title
|
|
||||||
if mi.authors:
|
|
||||||
author = ','.join(mi.authors)
|
|
||||||
defaults = db.conversion_options(db.id(row), 'comic')
|
|
||||||
opts, defaults = ComicConf.get_conversion_options(parent, defaults, title, author)
|
|
||||||
if defaults is not None:
|
|
||||||
db.set_conversion_options(db.id(row), 'comic', defaults)
|
|
||||||
if opts is None: continue
|
|
||||||
for fmt in ['cbz', 'cbr']:
|
|
||||||
try:
|
|
||||||
data = db.format(row, fmt.upper())
|
|
||||||
if data is not None:
|
|
||||||
break
|
|
||||||
except:
|
|
||||||
continue
|
|
||||||
if data is None:
|
|
||||||
continue
|
|
||||||
pt = PersistentTemporaryFile('.'+fmt)
|
|
||||||
pt.write(data)
|
|
||||||
pt.close()
|
|
||||||
of = PersistentTemporaryFile('.lrf')
|
|
||||||
of.close()
|
|
||||||
opts.output = of.name
|
|
||||||
opts.verbose = 1
|
|
||||||
args = [pt.name, opts]
|
|
||||||
changed = True
|
|
||||||
jobs.append(('comic2lrf', args, _('Convert comic: ')+opts.title,
|
|
||||||
'LRF', row_id, [pt, of]))
|
|
||||||
|
|
||||||
return jobs, changed
|
|
||||||
|
|
||||||
def convert_bulk(fmt, parent, db, comics, others):
|
def convert_bulk(fmt, parent, db, comics, others):
|
||||||
if others:
|
if others:
|
||||||
d = get_dialog(fmt)(parent, db)
|
d = get_dialog(fmt)(parent, db)
|
||||||
@ -454,13 +366,6 @@ def fetch_scheduled_recipe(recipe, script):
|
|||||||
def auto_convert_ebook(*args):
|
def auto_convert_ebook(*args):
|
||||||
return auto_convert(*args)
|
return auto_convert(*args)
|
||||||
|
|
||||||
def convert_single_ebook(*args):
|
|
||||||
fmt = prefs['output_format'].lower()
|
|
||||||
if fmt == 'lrf':
|
|
||||||
return convert_single_lrf(*args)
|
|
||||||
elif fmt in ('epub', 'mobi'):
|
|
||||||
return convert_single(fmt, *args)
|
|
||||||
|
|
||||||
def convert_bulk_ebooks(*args):
|
def convert_bulk_ebooks(*args):
|
||||||
fmt = prefs['output_format'].lower()
|
fmt = prefs['output_format'].lower()
|
||||||
if fmt == 'lrf':
|
if fmt == 'lrf':
|
||||||
|
Loading…
x
Reference in New Issue
Block a user