diff --git a/kindlecomicconverter/comic2ebook.py b/kindlecomicconverter/comic2ebook.py index b5977f6..4a0ed6c 100755 --- a/kindlecomicconverter/comic2ebook.py +++ b/kindlecomicconverter/comic2ebook.py @@ -40,7 +40,7 @@ from subprocess import STDOUT, PIPE from psutil import virtual_memory, disk_usage from html import escape as hescape -from .shared import available_archive_tools, getImageFileName, walkSort, walkLevel, sanitizeTrace, subprocess_run +from .shared import available_archive_tools, md5Checksum, getImageFileName, walkSort, walkLevel, sanitizeTrace, subprocess_run from . import comic2panel from . import image from . import comicarchive @@ -78,6 +78,7 @@ def main(argv=None): def buildHTML(path, imgfile, imgfilepath): + imgfilepath = md5Checksum(imgfilepath) filename = getImageFileName(imgfile) deviceres = options.profileData[1] if not options.noprocessing and "Rotated" in options.imgMetadata[imgfilepath]: @@ -424,6 +425,7 @@ def buildOPF(dstdir, title, filelist, cover=None): ""]) f.close() + def buildEPUB(path, chapternames, tomenumber, ischunked): filelist = [] chapterlist = [] @@ -504,7 +506,6 @@ def buildEPUB(path, chapternames, tomenumber, ischunked): "display: none;\n", "}\n"]) f.close() - build_html_start = perf_counter() for dirpath, dirnames, filenames in os.walk(os.path.join(path, 'OEBPS', 'Images')): chapter = False dirnames, filenames = walkSort(dirnames, filenames) @@ -514,12 +515,10 @@ def buildEPUB(path, chapternames, tomenumber, ischunked): 'cover' + getImageFileName(afile)[1]) options.covers.append((image.Cover(os.path.join(dirpath, afile), cover, options, tomenumber), options.uuid)) - if not chapter: - chapterlist.append((dirpath.replace('Images', 'Text'), afile)) - chapter = True filelist.append(buildHTML(dirpath, afile, os.path.join(dirpath, afile))) - build_html_end = perf_counter() - print(f"buildHTML: {build_html_end - build_html_start} seconds") + if not chapter: + chapterlist.append((dirpath.replace('Images', 'Text'), filelist[-1][1])) + chapter = True # Overwrite chapternames if tree is flat and ComicInfo.xml has bookmarks if not chapternames and options.chapters and not ischunked: chapterlist = [] @@ -567,13 +566,10 @@ def imgDirectoryProcessing(path): if GUI: GUI.progressBarTick.emit(str(pagenumber)) if len(work) > 0: - img_processing_start = perf_counter() for i in work: workerPool.apply_async(func=imgFileProcessing, args=(i,), callback=imgFileProcessingTick) workerPool.close() workerPool.join() - img_processing_end = perf_counter() - print(f"imgFileProcessing: {img_processing_end - img_processing_start} seconds") if GUI and not GUI.conversionAlive: rmtree(os.path.join(path, '..', '..'), True) raise UserWarning("Conversion interrupted.") @@ -813,7 +809,6 @@ def sanitizeTree(filetree): key = os.path.join(root, name) if key != newKey: os.replace(key, newKey) - options.imgMetadata[newKey] = options.imgMetadata.pop(key) for i, name in enumerate(dirs): tmpName = name slugified = slugify(name) @@ -825,10 +820,6 @@ def sanitizeTree(filetree): if key != newKey: os.replace(key, newKey) dirs[i] = newKey - existingImgPathKeys = list(options.imgMetadata.keys()) - for imgPath in existingImgPathKeys: - if imgPath.startswith(key): - options.imgMetadata[newKey + imgPath.removeprefix(key)] = options.imgMetadata.pop(imgPath) return chapterNames diff --git a/kindlecomicconverter/image.py b/kindlecomicconverter/image.py index 4d6a655..4398c89 100755 --- a/kindlecomicconverter/image.py +++ b/kindlecomicconverter/image.py @@ -22,6 +22,7 @@ import io import os import mozjpeg_lossless_optimization from PIL import Image, ImageOps, ImageStat, ImageChops, ImageFilter +from .shared import md5Checksum from .page_number_crop_alg import get_bbox_crop_margin_page_number, get_bbox_crop_margin from .inter_panel_crop_alg import crop_empty_inter_panel @@ -320,7 +321,7 @@ class ComicPage: output_jpeg_file.write(output_jpeg_bytes) else: self.image.save(self.targetPath, 'JPEG', optimize=1, quality=85) - return [self.targetPath, flags, self.orgPath] + return [md5Checksum(self.targetPath), flags, self.orgPath] except IOError as err: raise RuntimeError('Cannot save image. ' + str(err)) diff --git a/kindlecomicconverter/shared.py b/kindlecomicconverter/shared.py index 7a98d22..76c579f 100644 --- a/kindlecomicconverter/shared.py +++ b/kindlecomicconverter/shared.py @@ -75,6 +75,16 @@ def walkLevel(some_dir, level=1): del dirs[:] +def md5Checksum(fpath): + with open(fpath, 'rb') as fh: + m = md5() + while True: + data = fh.read(8192) + if not data: + break + m.update(data) + return m.hexdigest() + def sanitizeTrace(traceback): return ''.join(format_tb(traceback))\