diff --git a/src/calibre/ebooks/oeb/polish/css.py b/src/calibre/ebooks/oeb/polish/css.py index 954d4a1566..123365035a 100644 --- a/src/calibre/ebooks/oeb/polish/css.py +++ b/src/calibre/ebooks/oeb/polish/css.py @@ -147,3 +147,4 @@ def remove_unused_css(container, report): report(_('Removed %d unused CSS style rules') % num_of_removed_rules) else: report(_('No unused CSS style rules found')) + return num_of_removed_rules > 0 diff --git a/src/calibre/ebooks/oeb/polish/embed.py b/src/calibre/ebooks/oeb/polish/embed.py index 4d6b826de7..aced8cda9c 100644 --- a/src/calibre/ebooks/oeb/polish/embed.py +++ b/src/calibre/ebooks/oeb/polish/embed.py @@ -116,7 +116,7 @@ def embed_all_fonts(container, stats, report): if not rules: report(_('No embeddable fonts found')) - return + return False # Write out CSS rules = [';\n\t'.join('%s: %s' % ( @@ -135,6 +135,7 @@ def embed_all_fonts(container, stats, report): href = container.name_to_href(name, spine_name) etree.SubElement(head, XHTML('link'), rel='stylesheet', type='text/css', href=href).tail = '\n' container.dirty(spine_name) + return True if __name__ == '__main__': diff --git a/src/calibre/ebooks/oeb/polish/main.py b/src/calibre/ebooks/oeb/polish/main.py index dd6ecf15b4..2934f3cc9d 100644 --- a/src/calibre/ebooks/oeb/polish/main.py +++ b/src/calibre/ebooks/oeb/polish/main.py @@ -132,11 +132,13 @@ def update_metadata(ebook, new_opf): def polish_one(ebook, opts, report): rt = lambda x: report('\n### ' + x) jacket = None + changed = False if opts.subset or opts.embed: stats = StatsCollector(ebook, do_embed=opts.embed) if opts.opf: + changed = True rt(_('Updating metadata')) update_metadata(ebook, opts.opf) jacket = find_existing_jacket(ebook) @@ -146,11 +148,13 @@ def polish_one(ebook, opts, report): report(_('Metadata updated\n')) if opts.cover: + changed = True rt(_('Setting cover')) set_cover(ebook, opts.cover, report) report('') if opts.jacket: + changed = True rt(_('Inserting metadata jacket')) if jacket is None: if add_or_replace_jacket(ebook): @@ -165,30 +169,37 @@ def polish_one(ebook, opts, report): rt(_('Removing metadata jacket')) if remove_jacket(ebook): report(_('Metadata jacket removed')) + changed = True else: report(_('No metadata jacket found')) report('') if opts.smarten_punctuation: rt(_('Smartening punctuation')) - smarten_punctuation(ebook, report) + if smarten_punctuation(ebook, report): + changed = True report('') if opts.embed: rt(_('Embedding referenced fonts')) - embed_all_fonts(ebook, stats, report) + if embed_all_fonts(ebook, stats, report): + changed = True report('') if opts.subset: rt(_('Subsetting embedded fonts')) - subset_all_fonts(ebook, stats.font_stats, report) + if subset_all_fonts(ebook, stats.font_stats, report): + changed = True report('') if opts.remove_unused_css: rt(_('Removing unused CSS rules')) - remove_unused_css(ebook, report) + if remove_unused_css(ebook, report): + changed = True report('') + return changed + def polish(file_map, opts, log, report): st = time.time() @@ -228,8 +239,8 @@ def tweak_polish(container, actions): O = namedtuple('Options', ' '.join(ALL_OPTS.iterkeys())) opts = O(**opts) report = [] - polish_one(container, opts, report.append) - return report + changed = polish_one(container, opts, report.append) + return report, changed def option_parser(): from calibre.utils.config import OptionParser diff --git a/src/calibre/ebooks/oeb/polish/replace.py b/src/calibre/ebooks/oeb/polish/replace.py index e4726cc827..2843f06342 100644 --- a/src/calibre/ebooks/oeb/polish/replace.py +++ b/src/calibre/ebooks/oeb/polish/replace.py @@ -104,6 +104,7 @@ def smarten_punctuation(container, report): smartened = True if not smartened: report(_('No punctuation that could be smartened found')) + return smartened def rename_files(container, file_map): overlap = set(file_map).intersection(set(file_map.itervalues())) diff --git a/src/calibre/ebooks/oeb/polish/subset.py b/src/calibre/ebooks/oeb/polish/subset.py index df86dc3804..fb8c8daba4 100644 --- a/src/calibre/ebooks/oeb/polish/subset.py +++ b/src/calibre/ebooks/oeb/polish/subset.py @@ -35,6 +35,7 @@ def remove_font_face_rules(container, sheet, remove_names, base): def subset_all_fonts(container, font_stats, report): remove = set() total_old = total_new = 0 + changed = False for name, mt in container.mime_map.iteritems(): if (mt in OEB_FONTS or name.rpartition('.')[-1].lower() in {'otf', 'ttf'}) and mt != guess_type('a.woff'): chars = font_stats.get(name, set()) @@ -69,10 +70,12 @@ def subset_all_fonts(container, font_stats, report): else: report('Decreased the font %s to %.1f%% of its original size'% (font_name, nlen/olen * 100)) + changed = True f.seek(0), f.truncate(), f.write(nraw) for name in remove: container.remove_item(name) + changed = True if remove: for name, mt in container.mime_map.iteritems(): @@ -92,6 +95,7 @@ def subset_all_fonts(container, font_stats, report): total_new/total_old*100)) else: report('No embedded fonts found') + return changed if __name__ == '__main__': from calibre.ebooks.oeb.polish.container import get_container diff --git a/src/calibre/gui2/tweak_book/boss.py b/src/calibre/gui2/tweak_book/boss.py index 8f9eae010f..a723bdd88c 100644 --- a/src/calibre/gui2/tweak_book/boss.py +++ b/src/calibre/gui2/tweak_book/boss.py @@ -372,7 +372,7 @@ class Boss(QObject): with BusyCursor(): self.add_savepoint(name) try: - report = tweak_polish(current_container(), {action:True}) + report, changed = tweak_polish(current_container(), {action:True}) except: self.rewind_savepoint() raise @@ -386,9 +386,10 @@ class Boss(QObject): d.l.addWidget(d.e) d.e.setHtml(report) d.bb = QDialogButtonBox(QDialogButtonBox.Close) - b = d.b = d.bb.addButton(_('See what changed'), d.bb.AcceptRole) - b.setIcon(QIcon(I('diff.png'))) - b.clicked.connect(partial(self.show_current_diff, allow_revert=True)) + if changed: + b = d.b = d.bb.addButton(_('See what changed'), d.bb.AcceptRole) + b.setIcon(QIcon(I('diff.png'))) + b.clicked.connect(partial(self.show_current_diff, allow_revert=True)) d.l.addWidget(d.bb) d.bb.rejected.connect(d.reject) d.bb.accepted.connect(d.accept)