Edit book: Fix extra invalid entries being generated in the manifest when editing an AZW3 file that has no images.

This commit is contained in:
Kovid Goyal 2014-05-01 21:35:12 +05:30
parent d1870eaba9
commit b55e526491
2 changed files with 17 additions and 13 deletions

View File

@ -61,7 +61,8 @@ def reverse_tag_iter(block):
class Mobi8Reader(object): class Mobi8Reader(object):
def __init__(self, mobi6_reader, log): def __init__(self, mobi6_reader, log, for_tweak=False):
self.for_tweak = for_tweak
self.mobi6_reader, self.log = mobi6_reader, log self.mobi6_reader, self.log = mobi6_reader, log
self.header = mobi6_reader.book_header self.header = mobi6_reader.book_header
self.encrypted_fonts = [] self.encrypted_fonts = []
@ -459,6 +460,20 @@ class Mobi8Reader(object):
def exclude(path): def exclude(path):
return os.path.basename(path) == 'debug-raw.html' return os.path.basename(path) == 'debug-raw.html'
# If there are no images then the azw3 input plugin dumps all
# binary records as .unknown images, remove them
if self.for_tweak and os.path.exists('images') and os.path.isdir('images'):
files = os.listdir('images')
unknown = [x for x in files if x.endswith('.unknown')]
if len(files) == len(unknown):
[os.remove('images/'+f) for f in files]
if self.for_tweak:
try:
os.remove('debug-raw.html')
except:
pass
opf.create_manifest_from_files_in([os.getcwdu()], exclude=exclude) opf.create_manifest_from_files_in([os.getcwdu()], exclude=exclude)
for entry in opf.manifest: for entry in opf.manifest:
if entry.mime_type == 'text/html': if entry.mime_type == 'text/html':

View File

@ -1022,20 +1022,9 @@ def do_explode(path, dest):
mr = MobiReader(stream, default_log, None, None) mr = MobiReader(stream, default_log, None, None)
with CurrentDir(dest): with CurrentDir(dest):
mr = Mobi8Reader(mr, default_log) mr = Mobi8Reader(mr, default_log, for_tweak=True)
opf = os.path.abspath(mr()) opf = os.path.abspath(mr())
obfuscated_fonts = mr.encrypted_fonts obfuscated_fonts = mr.encrypted_fonts
# If there are no images then the azw3 input plugin dumps all
# binary records as .unknown images, remove them
if os.path.exists('images') and os.path.isdir('images'):
files = os.listdir('images')
unknown = [x for x in files if x.endswith('.unknown')]
if len(files) == len(unknown):
[os.remove('images/'+f) for f in files]
try:
os.remove('debug-raw.html')
except:
pass
return opf, obfuscated_fonts return opf, obfuscated_fonts