Hook in notifications to catalog plugins

This commit is contained in:
Kovid Goyal 2010-01-22 12:33:17 -07:00
parent 16866915f9
commit e47d04693d
5 changed files with 37 additions and 48 deletions

View File

@ -312,7 +312,7 @@ class CatalogPlugin(Plugin):
continue continue
resources.close() resources.close()
def run(self, path_to_output, opts, db, ids): def run(self, path_to_output, opts, db, ids, notification=None):
''' '''
Run the plugin. Must be implemented in subclasses. Run the plugin. Must be implemented in subclasses.
It should generate the catalog in the format specified It should generate the catalog in the format specified

View File

@ -85,6 +85,9 @@ class OptionRecommendation(object):
class DummyReporter(object): class DummyReporter(object):
def __init__(self):
self.cancel_requested = False
def __call__(self, percent, msg=''): def __call__(self, percent, msg=''):
pass pass

View File

@ -44,7 +44,6 @@ class PluginWidget(QWidget,Ui_Form):
for opt in self.OPTION_FIELDS: for opt in self.OPTION_FIELDS:
opt_value = unicode(getattr(self, opt[0]).text()) opt_value = unicode(getattr(self, opt[0]).text())
gprefs.set(self.name + '_' + opt[0], opt_value) gprefs.set(self.name + '_' + opt[0], opt_value)
if opt[0] == 'exclude_tags':
opt_value = opt_value.split(',') opt_value = opt_value.split(',')
opts_dict[opt[0]] = opt_value opts_dict[opt[0]] = opt_value

View File

@ -53,11 +53,6 @@ def gui_catalog(fmt, title, dbspec, ids, out_file_name, fmt_options,
# Fetch and run the plugin for fmt # Fetch and run the plugin for fmt
plugin = plugin_for_catalog_format(fmt) plugin = plugin_for_catalog_format(fmt)
plugin.run(out_file_name, opts, db) plugin.run(out_file_name, opts, db, notification=notification)

View File

@ -5,6 +5,7 @@ from xml.sax.saxutils import escape
from calibre.ebooks.BeautifulSoup import BeautifulSoup, BeautifulStoneSoup, Tag, NavigableString from calibre.ebooks.BeautifulSoup import BeautifulSoup, BeautifulStoneSoup, Tag, NavigableString
from calibre.customize import CatalogPlugin from calibre.customize import CatalogPlugin
from calibre.ptempfile import PersistentTemporaryDirectory from calibre.ptempfile import PersistentTemporaryDirectory
from calibre.customize.conversion import OptionRecommendation, DummyReporter
FIELDS = ['all', 'author_sort', 'authors', 'comments', FIELDS = ['all', 'author_sort', 'authors', 'comments',
@ -44,11 +45,12 @@ class CSV_XML(CatalogPlugin):
"Default: '%default'\n" "Default: '%default'\n"
"Applies to: CSV, XML output formats"))] "Applies to: CSV, XML output formats"))]
def run(self, path_to_output, opts, db): def run(self, path_to_output, opts, db, notification=DummyReporter()):
from calibre.utils.logging import Log from calibre.utils.logging import Log
log = Log() log = Log()
self.fmt = path_to_output.rpartition('.')[2] self.fmt = path_to_output.rpartition('.')[2]
self.notification = notification
if False and opts.verbose: if False and opts.verbose:
log("%s:run" % self.name) log("%s:run" % self.name)
@ -467,12 +469,6 @@ class EPUB_MOBI(CatalogPlugin):
# title dc:title in OPF metadata, NCX periodical # title dc:title in OPF metadata, NCX periodical
# verbosity level of diagnostic printout # verbosity level of diagnostic printout
class DummyReporter(object):
def __init__(self):
self.cancelRequested = False
def __call__(self, percent, msg=''):
pass
def __init__(self, db, opts, plugin, def __init__(self, db, opts, plugin,
generateForMobigen=False, generateForMobigen=False,
@ -664,47 +660,47 @@ class EPUB_MOBI(CatalogPlugin):
# Methods # Methods
def buildSources(self): def buildSources(self):
if self.reporter.cancelRequested: return 1 if self.reporter.cancel_requested: return 1
if not self.booksByTitle: if not self.booksByTitle:
self.fetchBooksByTitle() self.fetchBooksByTitle()
if self.reporter.cancelRequested: return 1 if self.reporter.cancel_requested: return 1
self.fetchBooksByAuthor() self.fetchBooksByAuthor()
if self.reporter.cancelRequested: return 1 if self.reporter.cancel_requested: return 1
self.generateHTMLDescriptions() self.generateHTMLDescriptions()
if self.reporter.cancelRequested: return 1 if self.reporter.cancel_requested: return 1
self.generateHTMLByTitle() self.generateHTMLByTitle()
if self.reporter.cancelRequested: return 1 if self.reporter.cancel_requested: return 1
self.generateHTMLByAuthor() self.generateHTMLByAuthor()
if self.reporter.cancelRequested: return 1 if self.reporter.cancel_requested: return 1
self.generateHTMLByTags() self.generateHTMLByTags()
if self.reporter.cancelRequested: return 1 if self.reporter.cancel_requested: return 1
self.generateThumbnails() self.generateThumbnails()
if self.reporter.cancelRequested: return 1 if self.reporter.cancel_requested: return 1
self.generateOPF() self.generateOPF()
if self.reporter.cancelRequested: return 1 if self.reporter.cancel_requested: return 1
self.generateNCXHeader() self.generateNCXHeader()
if self.reporter.cancelRequested: return 1 if self.reporter.cancel_requested: return 1
self.generateNCXDescriptions("Descriptions") self.generateNCXDescriptions("Descriptions")
if self.reporter.cancelRequested: return 1 if self.reporter.cancel_requested: return 1
self.generateNCXByTitle("Titles", single_article_per_section=False) self.generateNCXByTitle("Titles", single_article_per_section=False)
if self.reporter.cancelRequested: return 1 if self.reporter.cancel_requested: return 1
self.generateNCXByAuthor("Authors", single_article_per_section=False) self.generateNCXByAuthor("Authors", single_article_per_section=False)
if self.reporter.cancelRequested: return 1 if self.reporter.cancel_requested: return 1
self.generateNCXByTags("Genres") self.generateNCXByTags("Genres")
if self.reporter.cancelRequested: return 1 if self.reporter.cancel_requested: return 1
self.writeNCX() self.writeNCX()
return 0 return 0
@ -2520,8 +2516,7 @@ class EPUB_MOBI(CatalogPlugin):
self.reporter(self.progressInt, self.progressString) self.reporter(self.progressInt, self.progressString)
return "%d%% %s" % (self.progressInt, self.progressString) return "%d%% %s" % (self.progressInt, self.progressString)
def run(self, path_to_output, opts, db): def run(self, path_to_output, opts, db, notification=DummyReporter()):
from calibre.ebooks.conversion.cli import main as ebook_convert
from calibre.utils.logging import Log from calibre.utils.logging import Log
log = Log() log = Log()
@ -2548,28 +2543,25 @@ class EPUB_MOBI(CatalogPlugin):
log(" %s: %s" % (key, opts_dict[key])) log(" %s: %s" % (key, opts_dict[key]))
# Launch the Catalog builder # Launch the Catalog builder
catalog = self.CatalogBuilder(db, opts, self) catalog = self.CatalogBuilder(db, opts, self, notification=notification)
catalog.createDirectoryStructure() catalog.createDirectoryStructure()
catalog.copyResources() catalog.copyResources()
catalog.buildSources() catalog.buildSources()
cmd_line_args = ['ebook-convert', recommendations = []
os.path.join(catalog.catalogPath,
opts.basename + '.opf'),
path_to_output]
if opts.fmt == 'mobi': if opts.fmt == 'mobi' and opts.output_profile.startswith("kindle"):
# options recommendations.append(('output_profile', opts.output_profile,
if opts.output_profile.startswith("kindle"): OptionRecommendation.HIGH))
cmd_line_args.append("--output-profile=%s" % str(opts.output_profile)) recommendations.append(('no_inline_toc', True,
cmd_line_args.append("--no-inline-toc") OptionRecommendation.HIGH))
elif opts.fmt == 'epub':
pass
# Run ebook-convert # Run ebook-convert
ebook_convert(args=cmd_line_args) from calibre.ebooks.conversion.plumber import Plumber
plumber = Plumber(os.path.join(catalog.catalogPath,
opts.basename + '.opf'), path_to_output, log, report_progress=notification,
abort_after_input_dump=False)
plumber.merge_ui_recommendations(recommendations)
plumber.run()
return None