Show the view changes button only if there are some actual changes

This commit is contained in:
Kovid Goyal 2014-01-29 13:13:38 +05:30
parent f630484554
commit 4fadc7dacc
6 changed files with 30 additions and 11 deletions

View File

@ -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

View File

@ -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__':

View File

@ -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

View File

@ -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()))

View File

@ -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

View File

@ -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,6 +386,7 @@ class Boss(QObject):
d.l.addWidget(d.e)
d.e.setHtml(report)
d.bb = QDialogButtonBox(QDialogButtonBox.Close)
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))