Pull from driver-dev

This commit is contained in:
Kovid Goyal 2009-05-06 16:18:44 -07:00
commit e933db70aa
7 changed files with 57 additions and 65 deletions

View File

@ -211,6 +211,7 @@ def main(args=sys.argv):
OptionRecommendation.HIGH) \
for n in parser.options_iter()
if n.dest]
print recommendations
plumber.merge_ui_recommendations(recommendations)
plumber.run()

View File

@ -0,0 +1,17 @@
# -*- coding: utf-8 -*-
__license__ = 'GPL 3'
__copyright__ = '2009, John Schember <john@nachtimwald.com>'
__docformat__ = 'restructuredtext en'
import logging
from calibre.ebooks.conversion.plumber import Plumber
from calibre.utils.logging import Log
def gui_convert(input, output, recommendations, notification):
plumber = Plumber(input, output, Log(), notification)
plumber.merge_ui_recommendations(recommendations)
plumber.run()

View File

@ -136,9 +136,10 @@ class Config(ResizableDialog, Ui_Dialog):
ps = widget_factory(PageSetupWidget)
output_widget = None
name = self.plumber.output_plugin.name.lower().replace(' ', '_')
name = 'calibre.gui2.convert.%s' % self.plumber.output_plugin.name.lower().replace(' ', '_')
try:
output_widget = __import__(name)
__import__(name)
output_widget = sys.modules[name]
pw = output_widget.PluginWidget
pw.ICON = ':/images/back.svg'
pw.HELP = _('Options specific to the output format.')

View File

@ -678,16 +678,20 @@ class DeviceGUI(object):
bad.append(self.library_view.model().title(row))
if auto != []:
autos = [self.library_view.model().title(row) for row in auto]
autos = '\n'.join('<li>%s</li>'%(i,) for i in autos)
d = info_dialog(self, _('No suitable formats'),
_('Auto converting the following books before uploading to the device:<br><ul>%s</ul>')%(autos,))
format = None
for fmt in self.device_manager.device_class.settings().format_map:
if fmt in list(set(self.device_manager.device_class.settings().format_map).intersection(set(available_output_formats()))):
format = fmt
break
d.exec_()
self.auto_convert(_auto_ids, on_card, format)
if format is None:
bad += auto
else:
autos = [self.library_view.model().title(row) for row in auto]
autos = '\n'.join('<li>%s</li>'%(i,) for i in autos)
d = info_dialog(self, _('No suitable formats'),
_('Auto converting the following books before uploading to the device:<br><ul>%s</ul>')%(autos,))
d.exec_()
self.auto_convert(_auto_ids, on_card, format)
if bad:
bad = '\n'.join('<li>%s</li>'%(i,) for i in bad)

View File

@ -973,12 +973,13 @@ class Main(MainWindow, Ui_MainWindow, DeviceGUI):
def auto_convert(self, row_ids, on_card, format):
previous = self.library_view.currentIndex()
jobs, changed = convert_single_ebook(self, self.library_view.model().db, row_ids, True)
jobs, changed, bad = convert_single_ebook(self, self.library_view.model().db, row_ids, True, format)
if jobs == []: return
for func, args, desc, fmt, id, temp_files in jobs:
job = self.job_manager.run_job(Dispatcher(self.book_auto_converted),
if id not in bad:
job = self.job_manager.run_job(Dispatcher(self.book_auto_converted),
func, args=args, description=desc)
self.conversion_jobs[job] = (temp_files, fmt, id, on_card)
self.conversion_jobs[job] = (temp_files, fmt, id, on_card)
if changed:
self.library_view.model().refresh_rows(rows)
@ -1021,12 +1022,13 @@ class Main(MainWindow, Ui_MainWindow, DeviceGUI):
previous = self.library_view.currentIndex()
rows = [x.row() for x in \
self.library_view.selectionModel().selectedRows()]
jobs, changed = convert_single_ebook(self,
jobs, changed, bad = convert_single_ebook(self,
self.library_view.model().db, row_ids)
for func, args, desc, fmt, id, temp_files in jobs:
job = self.job_manager.run_job(Dispatcher(self.book_converted),
if id not in bad:
job = self.job_manager.run_job(Dispatcher(self.book_converted),
func, args=args, description=desc)
self.conversion_jobs[job] = (temp_files, fmt, id)
self.conversion_jobs[job] = (temp_files, fmt, id)
if changed:
self.library_view.model().refresh_rows(rows)

View File

@ -6,7 +6,9 @@ __docformat__ = 'restructuredtext en'
'''
Logic for setting up conversion jobs
'''
import os
import cPickle, os
from PyQt4.Qt import QDialog
from calibre.ptempfile import PersistentTemporaryFile
@ -14,30 +16,30 @@ from calibre.gui2.convert import load_specifics
from calibre.gui2.convert.single import NoSupportedInputFormats
from calibre.gui2.convert.single import Config as SingleConfig
def convert_single_ebook(parent, db, row_ids, auto_conversion=False):
def convert_single_ebook(parent, db, book_ids, auto_conversion=False, out_format=None):
changed = False
jobs = []
bad = []
total = len(row_ids)
total = len(book_ids)
if total == 0:
return None, None, None
parent.status_bar.showMessage(_('Starting conversion of %d books') % total, 2000)
for i, row_id in enumerate(row_ids):
for i, book_id in enumerate(book_ids):
temp_files = []
try:
d = SingleConfig(parent, db, row_id)
d = SingleConfig(parent, db, book_id, None, out_format)
if auto_conversion:
result = QDialog.Accepted
else:
retult = d.exec_()
result = d.exec_()
if result == QDialog.Accepted:
mi = db.get_metadata(row_id, True)
in_file = db.format_abspath(row_id, d.input_format, True)
mi = db.get_metadata(book_id, True)
in_file = db.format_abspath(book_id, d.input_format, True)
out_file = PersistentTemporaryFile('.' + d.output_format)
out_file.write(d.output_format)
@ -45,18 +47,14 @@ def convert_single_ebook(parent, db, row_ids, auto_conversion=False):
desc = _('Convert book %d of %d (%s)') % (i + 1, total, repr(mi.title))
opts = load_specifics(db, row_id)
opts_string = ''
for opt in opts.keys():
opts_string += ' --%s %s ' % (opt, opts[opt])
args = [['', in_file, out_file.name, opts_string]]
recs = cPickle.loads(d.recommendations)
args = [in_file, out_file.name, recs]
temp_files = [out_file]
jobs.append(('ebook-convert', args, desc, d.output_format.upper(), row_id, temp_files))
jobs.append(('gui_convert', args, desc, d.output_format.upper(), book_id, temp_files))
changed = True
except NoSupportedInputFormats:
bad.append(row_id)
bad.append(book_id)
if bad != []:
res = []
@ -67,8 +65,7 @@ def convert_single_ebook(parent, db, row_ids, auto_conversion=False):
msg = _('<p>Could not convert %d of %d books, because no suitable source format was found.<ul>%s</ul>')%(len(res), total, '\n'.join(res))
warning_dialog(parent, _('Could not convert some books'), msg).exec_()
return jobs, changed
return jobs, changed, bad
def convert_bulk_ebooks(*args):
pass

View File

@ -38,50 +38,20 @@ DEBUG = False
#: A mapping from job names to functions that perform the jobs
PARALLEL_FUNCS = {
'any2lrf' :
('calibre.ebooks.lrf.any.convert_from', 'main', dict(gui_mode=True), None),
'lrfviewer' :
('calibre.gui2.lrf_renderer.main', 'main', {}, None),
'ebook-viewer' :
('calibre.gui2.viewer.main', 'main', {}, None),
'feeds2lrf' :
('calibre.ebooks.lrf.feeds.convert_from', 'main', {}, 'notification'),
'render_table' :
('calibre.ebooks.lrf.html.table_as_image', 'do_render', {}, None),
'render_pages' :
('calibre.ebooks.comic.input', 'render_pages', {}, 'notification'),
'comic2lrf' :
('calibre.ebooks.lrf.comic.convert_from', 'do_convert', {}, 'notification'),
'any2epub' :
('calibre.ebooks.epub.from_any', 'any2epub', {}, None),
'feeds2epub' :
('calibre.ebooks.epub.from_feeds', 'main', {}, 'notification'),
'comic2epub' :
('calibre.ebooks.epub.from_comic', 'convert', {}, 'notification'),
'any2mobi' :
('calibre.ebooks.mobi.from_any', 'any2mobi', {}, None),
'any2pdf' :
('calibre.ebooks.pdf.from_any', 'any2pdf', {}, None),
'feeds2mobi' :
('calibre.ebooks.mobi.from_feeds', 'main', {}, 'notification'),
'comic2mobi' :
('calibre.ebooks.mobi.from_comic', 'convert', {}, 'notification'),
'ebook-convert' :
('calibre.ebooks.conversion.cli', 'main', {}, None),
'gui_convert' :
('calibre.gui2.convert.gui_conversion', 'gui_convert', {}, 'notification'),
}