From feac76f025a3da07ac8287b2a2e2b5ef2ba7801a Mon Sep 17 00:00:00 2001 From: Bruno Resende Date: Thu, 20 Jul 2023 16:00:43 -0300 Subject: [PATCH 01/12] Adds --author argument to CLI --- kindlecomicconverter/comic2ebook.py | 30 +++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/kindlecomicconverter/comic2ebook.py b/kindlecomicconverter/comic2ebook.py index 049e44cf..0b4631ab 100755 --- a/kindlecomicconverter/comic2ebook.py +++ b/kindlecomicconverter/comic2ebook.py @@ -687,14 +687,19 @@ def getComicInfo(path, originalpath): else: options.title = os.path.splitext(os.path.basename(originalpath))[0] else: - defaultTitle = False + defaultTitle = False + if options.author == 'defaultauthor': + defaultAuthor = True + options.authors = ['KCC'] + else: + defaultAuthor = False + options.authors = [options.author] if os.path.exists(xmlPath): try: xml = metadata.MetadataParser(xmlPath) except Exception: os.remove(xmlPath) return - options.authors = [] if xml.data['Title']: options.title = hescape(xml.data['Title']) elif defaultTitle: @@ -705,14 +710,17 @@ def getComicInfo(path, originalpath): if xml.data['Number']: titleSuffix += ' #' + xml.data['Number'].zfill(3) options.title += titleSuffix - for field in ['Writers', 'Pencillers', 'Inkers', 'Colorists']: - for person in xml.data[field]: - options.authors.append(hescape(person)) - if len(options.authors) > 0: - options.authors = list(set(options.authors)) - options.authors.sort() - else: - options.authors = ['KCC'] + if defaultAuthor: + options.authors = [] + for field in ['Writers', 'Pencillers', 'Inkers', 'Colorists']: + for person in xml.data[field]: + options.authors.append(hescape(person)) + if len(options.authors) > 0: + options.authors = list(set(options.authors)) + options.authors.sort() + else: + options.authors = ['KCC'] + if xml.data['Bookmarks']: options.chapters = xml.data['Bookmarks'] if xml.data['Summary']: @@ -967,6 +975,8 @@ def makeParser(): help="Output generated file to specified directory or file") output_options.add_argument("-t", "--title", action="store", dest="title", default="defaulttitle", help="Comic title [Default=filename or directory name]") + output_options.add_argument("-a", "--author", action="store", dest="author", default="defaultauthor", + help="Author name [Default=KCC]") output_options.add_argument("-f", "--format", action="store", dest="format", default="Auto", help="Output format (Available options: Auto, MOBI, EPUB, CBZ, KFX, MOBI+EPUB) " "[Default=Auto]") From 5b2837ee4bf1b109decbea4e079cb97b29e5e960 Mon Sep 17 00:00:00 2001 From: Bruno Resende Date: Thu, 20 Jul 2023 16:59:52 -0300 Subject: [PATCH 02/12] Add --prefercoverfile and --nocoveraspage arguments to CLI --- kindlecomicconverter/comic2ebook.py | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/kindlecomicconverter/comic2ebook.py b/kindlecomicconverter/comic2ebook.py index 0b4631ab..610249c6 100755 --- a/kindlecomicconverter/comic2ebook.py +++ b/kindlecomicconverter/comic2ebook.py @@ -501,15 +501,28 @@ def buildEPUB(path, chapternames, tomenumber): chapter = False dirnames, filenames = walkSort(dirnames, filenames) for afile in filenames: + if options.coverfile: + if (getImageFileName(afile)[0] == 'cover-kcc'): + if (os.path.isfile(os.path.join(dirpath, 'cover-kcc' + getImageFileName(afile)[1]))): + cover = os.path.join(os.path.join(path, 'OEBPS', 'Images'), + 'cover' + getImageFileName(afile)[1]) + options.covers.append((image.Cover(os.path.join(dirpath, afile), + cover, options, tomenumber), options.uuid)) + if options.coverpage: + os.remove(os.path.join(dirpath, afile)) + continue + elif cover is None: + cover = os.path.join(os.path.join(path, 'OEBPS', 'Images'), + 'cover' + getImageFileName(afile)[1]) + options.covers.append((image.Cover(os.path.join(dirpath, afile), cover, options, + tomenumber), options.uuid)) + if options.coverpage: + os.remove(os.path.join(dirpath, afile)) + continue filelist.append(buildHTML(dirpath, afile, os.path.join(dirpath, afile))) if not chapter: chapterlist.append((dirpath.replace('Images', 'Text'), filelist[-1][1])) chapter = True - if cover is None: - cover = os.path.join(os.path.join(path, 'OEBPS', 'Images'), - 'cover' + getImageFileName(filelist[-1][1])[1]) - options.covers.append((image.Cover(os.path.join(filelist[-1][0], filelist[-1][1]), cover, options, - tomenumber), options.uuid)) # Overwrite chapternames if tree is flat and ComicInfo.xml has bookmarks if not chapternames and options.chapters: chapterlist = [] @@ -676,7 +689,6 @@ def getOutputFilename(srcpath, wantedname, ext, tomenumber): def getComicInfo(path, originalpath): xmlPath = os.path.join(path, 'ComicInfo.xml') - options.authors = ['KCC'] options.chapters = [] options.summary = '' titleSuffix = '' @@ -983,6 +995,10 @@ def makeParser(): output_options.add_argument("-b", "--batchsplit", type=int, dest="batchsplit", default="0", help="Split output into multiple files. 0: Don't split 1: Automatic mode " "2: Consider every subdirectory as separate volume [Default=0]") + output_options.add_argument("--prefercoverfile", action="store_true", dest="coverfile", default=False, + help="Use cover.jpeg as cover if it exists") + output_options.add_argument("--nocoveraspage", action="store_true", dest="coverpage", default=False, + help="Don't create a page for the cover inside the book") processing_options.add_argument("-n", "--noprocessing", action="store_true", dest="noprocessing", default=False, help="Do not modify image and ignore any profil or processing option") From ad7b3cc106dca0945c853acf0bd971352c3aa1a8 Mon Sep 17 00:00:00 2001 From: Bruno Resende Date: Thu, 20 Jul 2023 18:45:22 -0300 Subject: [PATCH 03/12] cover checks only run once --- kindlecomicconverter/comic2ebook.py | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/kindlecomicconverter/comic2ebook.py b/kindlecomicconverter/comic2ebook.py index 610249c6..570da4c5 100755 --- a/kindlecomicconverter/comic2ebook.py +++ b/kindlecomicconverter/comic2ebook.py @@ -501,22 +501,16 @@ def buildEPUB(path, chapternames, tomenumber): chapter = False dirnames, filenames = walkSort(dirnames, filenames) for afile in filenames: - if options.coverfile: - if (getImageFileName(afile)[0] == 'cover-kcc'): - if (os.path.isfile(os.path.join(dirpath, 'cover-kcc' + getImageFileName(afile)[1]))): - cover = os.path.join(os.path.join(path, 'OEBPS', 'Images'), - 'cover' + getImageFileName(afile)[1]) - options.covers.append((image.Cover(os.path.join(dirpath, afile), - cover, options, tomenumber), options.uuid)) - if options.coverpage: - os.remove(os.path.join(dirpath, afile)) - continue - elif cover is None: + if cover is None: cover = os.path.join(os.path.join(path, 'OEBPS', 'Images'), 'cover' + getImageFileName(afile)[1]) options.covers.append((image.Cover(os.path.join(dirpath, afile), cover, options, tomenumber), options.uuid)) - if options.coverpage: + if options.usecoverfile: + if (os.path.isfile(os.path.join(dirpath, 'cover-kcc' + getImageFileName(afile)[1]))): + options.covers.append((image.Cover(os.path.join(dirpath, 'cover-kcc' + getImageFileName(afile)[1]), + cover, options, tomenumber), options.uuid)) + if options.nocoverpage: os.remove(os.path.join(dirpath, afile)) continue filelist.append(buildHTML(dirpath, afile, os.path.join(dirpath, afile))) @@ -995,9 +989,9 @@ def makeParser(): output_options.add_argument("-b", "--batchsplit", type=int, dest="batchsplit", default="0", help="Split output into multiple files. 0: Don't split 1: Automatic mode " "2: Consider every subdirectory as separate volume [Default=0]") - output_options.add_argument("--prefercoverfile", action="store_true", dest="coverfile", default=False, + output_options.add_argument("--prefercoverfile", action="store_true", dest="usecoverfile", default=False, help="Use cover.jpeg as cover if it exists") - output_options.add_argument("--nocoveraspage", action="store_true", dest="coverpage", default=False, + output_options.add_argument("--nocoveraspage", action="store_true", dest="nocoverpage", default=False, help="Don't create a page for the cover inside the book") processing_options.add_argument("-n", "--noprocessing", action="store_true", dest="noprocessing", default=False, From b245fa7e0d7b3bde47f6f6c12fda6f97217b52d4 Mon Sep 17 00:00:00 2001 From: Bruno Resende Date: Thu, 20 Jul 2023 19:17:47 -0300 Subject: [PATCH 04/12] Revert "cover checks only run once" This reverts commit ad7b3cc106dca0945c853acf0bd971352c3aa1a8. --- kindlecomicconverter/comic2ebook.py | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/kindlecomicconverter/comic2ebook.py b/kindlecomicconverter/comic2ebook.py index 570da4c5..610249c6 100755 --- a/kindlecomicconverter/comic2ebook.py +++ b/kindlecomicconverter/comic2ebook.py @@ -501,16 +501,22 @@ def buildEPUB(path, chapternames, tomenumber): chapter = False dirnames, filenames = walkSort(dirnames, filenames) for afile in filenames: - if cover is None: + if options.coverfile: + if (getImageFileName(afile)[0] == 'cover-kcc'): + if (os.path.isfile(os.path.join(dirpath, 'cover-kcc' + getImageFileName(afile)[1]))): + cover = os.path.join(os.path.join(path, 'OEBPS', 'Images'), + 'cover' + getImageFileName(afile)[1]) + options.covers.append((image.Cover(os.path.join(dirpath, afile), + cover, options, tomenumber), options.uuid)) + if options.coverpage: + os.remove(os.path.join(dirpath, afile)) + continue + elif cover is None: cover = os.path.join(os.path.join(path, 'OEBPS', 'Images'), 'cover' + getImageFileName(afile)[1]) options.covers.append((image.Cover(os.path.join(dirpath, afile), cover, options, tomenumber), options.uuid)) - if options.usecoverfile: - if (os.path.isfile(os.path.join(dirpath, 'cover-kcc' + getImageFileName(afile)[1]))): - options.covers.append((image.Cover(os.path.join(dirpath, 'cover-kcc' + getImageFileName(afile)[1]), - cover, options, tomenumber), options.uuid)) - if options.nocoverpage: + if options.coverpage: os.remove(os.path.join(dirpath, afile)) continue filelist.append(buildHTML(dirpath, afile, os.path.join(dirpath, afile))) @@ -989,9 +995,9 @@ def makeParser(): output_options.add_argument("-b", "--batchsplit", type=int, dest="batchsplit", default="0", help="Split output into multiple files. 0: Don't split 1: Automatic mode " "2: Consider every subdirectory as separate volume [Default=0]") - output_options.add_argument("--prefercoverfile", action="store_true", dest="usecoverfile", default=False, + output_options.add_argument("--prefercoverfile", action="store_true", dest="coverfile", default=False, help="Use cover.jpeg as cover if it exists") - output_options.add_argument("--nocoveraspage", action="store_true", dest="nocoverpage", default=False, + output_options.add_argument("--nocoveraspage", action="store_true", dest="coverpage", default=False, help="Don't create a page for the cover inside the book") processing_options.add_argument("-n", "--noprocessing", action="store_true", dest="noprocessing", default=False, From b24c4a139071305d15ebf894468c77e737da9bef Mon Sep 17 00:00:00 2001 From: Alex Xu Date: Sat, 16 Mar 2024 09:56:50 -0700 Subject: [PATCH 05/12] split off author portion --- kindlecomicconverter/comic2ebook.py | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/kindlecomicconverter/comic2ebook.py b/kindlecomicconverter/comic2ebook.py index 610249c6..5aa2a750 100755 --- a/kindlecomicconverter/comic2ebook.py +++ b/kindlecomicconverter/comic2ebook.py @@ -690,6 +690,7 @@ def getOutputFilename(srcpath, wantedname, ext, tomenumber): def getComicInfo(path, originalpath): xmlPath = os.path.join(path, 'ComicInfo.xml') options.chapters = [] + options.authors = ['KCC'] options.summary = '' titleSuffix = '' if options.title == 'defaulttitle': @@ -699,7 +700,7 @@ def getComicInfo(path, originalpath): else: options.title = os.path.splitext(os.path.basename(originalpath))[0] else: - defaultTitle = False + defaultTitle = False if options.author == 'defaultauthor': defaultAuthor = True options.authors = ['KCC'] @@ -712,6 +713,7 @@ def getComicInfo(path, originalpath): except Exception: os.remove(xmlPath) return + options.authors = [] if xml.data['Title']: options.title = hescape(xml.data['Title']) elif defaultTitle: @@ -722,17 +724,14 @@ def getComicInfo(path, originalpath): if xml.data['Number']: titleSuffix += ' #' + xml.data['Number'].zfill(3) options.title += titleSuffix - if defaultAuthor: - options.authors = [] - for field in ['Writers', 'Pencillers', 'Inkers', 'Colorists']: - for person in xml.data[field]: - options.authors.append(hescape(person)) - if len(options.authors) > 0: - options.authors = list(set(options.authors)) - options.authors.sort() - else: - options.authors = ['KCC'] - + for field in ['Writers', 'Pencillers', 'Inkers', 'Colorists']: + for person in xml.data[field]: + options.authors.append(hescape(person)) + if len(options.authors) > 0: + options.authors = list(set(options.authors)) + options.authors.sort() + else: + options.authors = ['KCC'] if xml.data['Bookmarks']: options.chapters = xml.data['Bookmarks'] if xml.data['Summary']: @@ -987,8 +986,6 @@ def makeParser(): help="Output generated file to specified directory or file") output_options.add_argument("-t", "--title", action="store", dest="title", default="defaulttitle", help="Comic title [Default=filename or directory name]") - output_options.add_argument("-a", "--author", action="store", dest="author", default="defaultauthor", - help="Author name [Default=KCC]") output_options.add_argument("-f", "--format", action="store", dest="format", default="Auto", help="Output format (Available options: Auto, MOBI, EPUB, CBZ, KFX, MOBI+EPUB) " "[Default=Auto]") From 848de31605eadeabfec101856423746a7f500f96 Mon Sep 17 00:00:00 2001 From: Alex Xu Date: Sat, 16 Mar 2024 09:57:48 -0700 Subject: [PATCH 06/12] split off author --- kindlecomicconverter/comic2ebook.py | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/kindlecomicconverter/comic2ebook.py b/kindlecomicconverter/comic2ebook.py index 5aa2a750..3c270426 100755 --- a/kindlecomicconverter/comic2ebook.py +++ b/kindlecomicconverter/comic2ebook.py @@ -689,8 +689,8 @@ def getOutputFilename(srcpath, wantedname, ext, tomenumber): def getComicInfo(path, originalpath): xmlPath = os.path.join(path, 'ComicInfo.xml') - options.chapters = [] options.authors = ['KCC'] + options.chapters = [] options.summary = '' titleSuffix = '' if options.title == 'defaulttitle': @@ -701,12 +701,6 @@ def getComicInfo(path, originalpath): options.title = os.path.splitext(os.path.basename(originalpath))[0] else: defaultTitle = False - if options.author == 'defaultauthor': - defaultAuthor = True - options.authors = ['KCC'] - else: - defaultAuthor = False - options.authors = [options.author] if os.path.exists(xmlPath): try: xml = metadata.MetadataParser(xmlPath) From 2500ff8c809f7fab53f82c754422de08619323c1 Mon Sep 17 00:00:00 2001 From: Alex Xu Date: Sat, 16 Mar 2024 11:53:24 -0700 Subject: [PATCH 07/12] remove prefercover --- kindlecomicconverter/comic2ebook.py | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/kindlecomicconverter/comic2ebook.py b/kindlecomicconverter/comic2ebook.py index 3c270426..30f37dc8 100755 --- a/kindlecomicconverter/comic2ebook.py +++ b/kindlecomicconverter/comic2ebook.py @@ -501,17 +501,7 @@ def buildEPUB(path, chapternames, tomenumber): chapter = False dirnames, filenames = walkSort(dirnames, filenames) for afile in filenames: - if options.coverfile: - if (getImageFileName(afile)[0] == 'cover-kcc'): - if (os.path.isfile(os.path.join(dirpath, 'cover-kcc' + getImageFileName(afile)[1]))): - cover = os.path.join(os.path.join(path, 'OEBPS', 'Images'), - 'cover' + getImageFileName(afile)[1]) - options.covers.append((image.Cover(os.path.join(dirpath, afile), - cover, options, tomenumber), options.uuid)) - if options.coverpage: - os.remove(os.path.join(dirpath, afile)) - continue - elif cover is None: + if cover is None: cover = os.path.join(os.path.join(path, 'OEBPS', 'Images'), 'cover' + getImageFileName(afile)[1]) options.covers.append((image.Cover(os.path.join(dirpath, afile), cover, options, @@ -986,8 +976,6 @@ def makeParser(): output_options.add_argument("-b", "--batchsplit", type=int, dest="batchsplit", default="0", help="Split output into multiple files. 0: Don't split 1: Automatic mode " "2: Consider every subdirectory as separate volume [Default=0]") - output_options.add_argument("--prefercoverfile", action="store_true", dest="coverfile", default=False, - help="Use cover.jpeg as cover if it exists") output_options.add_argument("--nocoveraspage", action="store_true", dest="coverpage", default=False, help="Don't create a page for the cover inside the book") From 63f648a220bd5138d77ef7e4636ffd913578db24 Mon Sep 17 00:00:00 2001 From: Alex Xu Date: Sat, 16 Mar 2024 11:56:57 -0700 Subject: [PATCH 08/12] whitespace fixes --- kindlecomicconverter/comic2ebook.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kindlecomicconverter/comic2ebook.py b/kindlecomicconverter/comic2ebook.py index 30f37dc8..a4073473 100755 --- a/kindlecomicconverter/comic2ebook.py +++ b/kindlecomicconverter/comic2ebook.py @@ -508,7 +508,7 @@ def buildEPUB(path, chapternames, tomenumber): tomenumber), options.uuid)) if options.coverpage: os.remove(os.path.join(dirpath, afile)) - continue + continue filelist.append(buildHTML(dirpath, afile, os.path.join(dirpath, afile))) if not chapter: chapterlist.append((dirpath.replace('Images', 'Text'), filelist[-1][1])) From 90b31348df66f76abf8517d20c5693c77d1307c5 Mon Sep 17 00:00:00 2001 From: Alex Xu Date: Sat, 16 Mar 2024 12:14:52 -0700 Subject: [PATCH 09/12] rename to duplicatecover --- kindlecomicconverter/comic2ebook.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/kindlecomicconverter/comic2ebook.py b/kindlecomicconverter/comic2ebook.py index a4073473..20d9833a 100755 --- a/kindlecomicconverter/comic2ebook.py +++ b/kindlecomicconverter/comic2ebook.py @@ -506,7 +506,7 @@ def buildEPUB(path, chapternames, tomenumber): 'cover' + getImageFileName(afile)[1]) options.covers.append((image.Cover(os.path.join(dirpath, afile), cover, options, tomenumber), options.uuid)) - if options.coverpage: + if not options.duplicatecover: os.remove(os.path.join(dirpath, afile)) continue filelist.append(buildHTML(dirpath, afile, os.path.join(dirpath, afile))) @@ -976,8 +976,8 @@ def makeParser(): output_options.add_argument("-b", "--batchsplit", type=int, dest="batchsplit", default="0", help="Split output into multiple files. 0: Don't split 1: Automatic mode " "2: Consider every subdirectory as separate volume [Default=0]") - output_options.add_argument("--nocoveraspage", action="store_true", dest="coverpage", default=False, - help="Don't create a page for the cover inside the book") + output_options.add_argument("--duplicatecover", action="store_true", dest="duplicatecover", default=False, + help="Duplicate the cover as the first page in the book") processing_options.add_argument("-n", "--noprocessing", action="store_true", dest="noprocessing", default=False, help="Do not modify image and ignore any profil or processing option") From 5ecdecbd65a5997ec9486511362936c24d18a246 Mon Sep 17 00:00:00 2001 From: Alex Xu Date: Sat, 16 Mar 2024 12:23:28 -0700 Subject: [PATCH 10/12] whitespace fixes --- kindlecomicconverter/comic2ebook.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kindlecomicconverter/comic2ebook.py b/kindlecomicconverter/comic2ebook.py index 4e196a63..2e21d956 100755 --- a/kindlecomicconverter/comic2ebook.py +++ b/kindlecomicconverter/comic2ebook.py @@ -974,7 +974,7 @@ def makeParser(): help="Split output into multiple files. 0: Don't split 1: Automatic mode " "2: Consider every subdirectory as separate volume [Default=0]") output_options.add_argument("--duplicatecover", action="store_true", dest="duplicatecover", default=False, - help="Duplicate the cover as the first page in the book") + help="Duplicate the cover as the first page in the book") processing_options.add_argument("-n", "--noprocessing", action="store_true", dest="noprocessing", default=False, help="Do not modify image and ignore any profil or processing option") From ff265ec59b703ad656d6b4290ecb86c3da028ae7 Mon Sep 17 00:00:00 2001 From: Alex Xu Date: Sat, 16 Mar 2024 12:25:39 -0700 Subject: [PATCH 11/12] rename to dedupecover --- kindlecomicconverter/comic2ebook.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/kindlecomicconverter/comic2ebook.py b/kindlecomicconverter/comic2ebook.py index 2e21d956..db12e284 100755 --- a/kindlecomicconverter/comic2ebook.py +++ b/kindlecomicconverter/comic2ebook.py @@ -509,7 +509,7 @@ def buildEPUB(path, chapternames, tomenumber): 'cover' + getImageFileName(afile)[1]) options.covers.append((image.Cover(os.path.join(dirpath, afile), cover, options, tomenumber), options.uuid)) - if not options.duplicatecover: + if options.dedupecover: os.remove(os.path.join(dirpath, afile)) continue filelist.append(buildHTML(dirpath, afile, os.path.join(dirpath, afile))) @@ -973,8 +973,8 @@ def makeParser(): output_options.add_argument("-b", "--batchsplit", type=int, dest="batchsplit", default="0", help="Split output into multiple files. 0: Don't split 1: Automatic mode " "2: Consider every subdirectory as separate volume [Default=0]") - output_options.add_argument("--duplicatecover", action="store_true", dest="duplicatecover", default=False, - help="Duplicate the cover as the first page in the book") + output_options.add_argument("--dedupecover", action="store_true", dest="dedupecover", default=False, + help="De-duplicate the cover as the first page in the book") processing_options.add_argument("-n", "--noprocessing", action="store_true", dest="noprocessing", default=False, help="Do not modify image and ignore any profil or processing option") From a7d2de8f4367763a3959bd90feeb5861515d102e Mon Sep 17 00:00:00 2001 From: Alex Xu Date: Sat, 16 Mar 2024 13:24:10 -0700 Subject: [PATCH 12/12] add dedupe to UI --- gui/KCC.ui | 112 +++++++++++---------- kindlecomicconverter/KCC_gui.py | 3 + kindlecomicconverter/KCC_rc.py | 38 ++++---- kindlecomicconverter/KCC_ui.py | 135 ++++++++++++++------------ kindlecomicconverter/KCC_ui_editor.py | 2 +- 5 files changed, 156 insertions(+), 134 deletions(-) diff --git a/gui/KCC.ui b/gui/KCC.ui index bcc1d20f..c7ed2017 100644 --- a/gui/KCC.ui +++ b/gui/KCC.ui @@ -37,79 +37,79 @@ 0 - - + + - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Unchecked - Nothing<br/></span>Images smaller than device resolution will not be resized.</p><p><span style=" font-weight:600; text-decoration: underline;">Indeterminate - Stretching<br/></span>Images smaller than device resolution will be resized. Aspect ratio will be not preserved.</p><p><span style=" font-weight:600; text-decoration: underline;">Checked - Upscaling<br/></span>Images smaller than device resolution will be resized. Aspect ratio will be preserved.</p></body></html> + <html><head/><body><p style='white-space:pre'><span style=" font-weight:600; text-decoration: underline;">Unchecked - 4 panels<br/></span>Zoom each corner separately.</p><p style='white-space:pre'><span style=" font-weight:600; text-decoration: underline;">Indeterminate - 2 panels<br/></span>Zoom only the top and bottom of the page.</p><p><span style=" font-weight:600; text-decoration: underline;">Checked - 4 high-quality panels<br/></span>Zoom each corner separately. Try to increase the quality of magnification. Check wiki for more details.</p></body></html> - Stretch/Upscale + Panel View 4/2/HQ true - - + + - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Unchecked - Split<br/></span>Double page spreads will be cut into two separate pages.</p><p><span style=" font-weight:600; text-decoration: underline;">Indeterminate - Rotate and split<br/></span>Double page spreads will be displayed twice. First rotated and then split. </p><p><span style=" font-weight:600; text-decoration: underline;">Checked - Rotate<br/></span>Double page spreads will be rotated.</p></body></html> + Delete input file(s) or directory. It's not recoverable! - Spread splitter - - - true + Delete input - - + + - <html><head/><body><p style='white-space:pre'><span style=" font-weight:600; text-decoration: underline;">Unchecked - Automatic mode<br/></span>The output will be split automatically.</p><p style='white-space:pre'><span style=" font-weight:600; text-decoration: underline;">Checked - Volume mode<br/></span>Every subdirectory will be considered as a separate volume.</p></body></html> + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Unchecked - 1x4<br/></span>Keep format 1x4 panels strips.</p><p><span style=" font-weight:600; text-decoration: underline;">Checked - 2x2<br/></span>Turn 1x4 strips to 2x2 to maximize screen usage.</p></body></html> - Output split + 1x4 to 2x2 strips - - + + - <html><head/><body><p style='white-space:pre'>Enable special parsing mode for Korean Webtoons.</p></body></html> + <html><head/><body><p style='white-space:pre'>Disable automatic gamma correction.</p></body></html> - Webtoon mode + Custom gamma - - + + - <html><head/><body><p style='white-space:pre'>Disable conversion to grayscale.</p></body></html> + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Unchecked - Autodetection<br/></span>The color of margins fill will be detected automatically.</p><p><span style=" font-weight:600; text-decoration: underline;">Indeterminate - White<br/></span>Margins will be filled with white color.</p><p><span style=" font-weight:600; text-decoration: underline;">Checked - Black<br/></span>Margins will be filled with black color.</p></body></html> - Color mode + W/B margins + + + true - - + + - <html><head/><body><p style='white-space:pre'>Disable automatic gamma correction.</p></body></html> + <html><head/><body><p style='white-space:pre'>Enable special parsing mode for Korean Webtoons.</p></body></html> - Custom gamma + Webtoon mode - - + + - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Unchecked - Autodetection<br/></span>The color of margins fill will be detected automatically.</p><p><span style=" font-weight:600; text-decoration: underline;">Indeterminate - White<br/></span>Margins will be filled with white color.</p><p><span style=" font-weight:600; text-decoration: underline;">Checked - Black<br/></span>Margins will be filled with black color.</p></body></html> + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Unchecked - Nothing<br/></span>Images smaller than device resolution will not be resized.</p><p><span style=" font-weight:600; text-decoration: underline;">Indeterminate - Stretching<br/></span>Images smaller than device resolution will be resized. Aspect ratio will be not preserved.</p><p><span style=" font-weight:600; text-decoration: underline;">Checked - Upscaling<br/></span>Images smaller than device resolution will be resized. Aspect ratio will be preserved.</p></body></html> - W/B margins + Stretch/Upscale true @@ -126,62 +126,62 @@ - - + + - <html><head/><body><p style='white-space:pre'><span style=" font-weight:600; text-decoration: underline;">Unchecked - 4 panels<br/></span>Zoom each corner separately.</p><p style='white-space:pre'><span style=" font-weight:600; text-decoration: underline;">Indeterminate - 2 panels<br/></span>Zoom only the top and bottom of the page.</p><p><span style=" font-weight:600; text-decoration: underline;">Checked - 4 high-quality panels<br/></span>Zoom each corner separately. Try to increase the quality of magnification. Check wiki for more details.</p></body></html> + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Unchecked - Split<br/></span>Double page spreads will be cut into two separate pages.</p><p><span style=" font-weight:600; text-decoration: underline;">Indeterminate - Rotate and split<br/></span>Double page spreads will be displayed twice. First rotated and then split. </p><p><span style=" font-weight:600; text-decoration: underline;">Checked - Rotate<br/></span>Double page spreads will be rotated.</p></body></html> - Panel View 4/2/HQ + Spread splitter true - - + + - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Unchecked - JPEG<br/></span>Use JPEG files</p><p><span style=" font-weight:600; text-decoration: underline;">Indeterminate - force PNG<br/></span>Create PNG files instead JPEG</p><p><span style=" font-weight:600; text-decoration: underline;">Checked - mozJpeg<br/></span>10-20% smaller JPEG file, with the same image quality, but processing time multiplied by 2</p></body></html> + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Unchecked - Disabled</span></p><p>Disabled</p><p><span style=" font-weight:600; text-decoration: underline;">Indeterminate - Margins<br/></span>Margins</p><p><span style=" font-weight:600; text-decoration: underline;">Checked - Margins + page numbers<br/></span>Margins +page numbers</p></body></html> - JPEG/PNG/mozJpeg + Cropping mode true - - + + - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Unchecked - 1x4<br/></span>Keep format 1x4 panels strips.</p><p><span style=" font-weight:600; text-decoration: underline;">Checked - 2x2<br/></span>Turn 1x4 strips to 2x2 to maximize screen usage.</p></body></html> + <html><head/><body><p style='white-space:pre'><span style=" font-weight:600; text-decoration: underline;">Unchecked - Automatic mode<br/></span>The output will be split automatically.</p><p style='white-space:pre'><span style=" font-weight:600; text-decoration: underline;">Checked - Volume mode<br/></span>Every subdirectory will be considered as a separate volume.</p></body></html> - 1x4 to 2x2 strips + Output split - - + + - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Unchecked - Disabled</span></p><p>Disabled</p><p><span style=" font-weight:600; text-decoration: underline;">Indeterminate - Margins<br/></span>Margins</p><p><span style=" font-weight:600; text-decoration: underline;">Checked - Margins + page numbers<br/></span>Margins +page numbers</p></body></html> + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Unchecked - JPEG<br/></span>Use JPEG files</p><p><span style=" font-weight:600; text-decoration: underline;">Indeterminate - force PNG<br/></span>Create PNG files instead JPEG</p><p><span style=" font-weight:600; text-decoration: underline;">Checked - mozJpeg<br/></span>10-20% smaller JPEG file, with the same image quality, but processing time multiplied by 2</p></body></html> - Cropping mode + JPEG/PNG/mozJpeg true - - + + - Delete input file(s) or directory. It's not recoverable! + <html><head/><body><p style='white-space:pre'>Disable conversion to grayscale.</p></body></html> - Delete input + Color mode @@ -195,6 +195,16 @@ + + + + <html><head/><body><p>Don't duplicate the first page as the cover. Useful for 2 page spread alignment.</p></body></html> + + + De-dupe cover + + + diff --git a/kindlecomicconverter/KCC_gui.py b/kindlecomicconverter/KCC_gui.py index 2f7d2155..7dd4861f 100644 --- a/kindlecomicconverter/KCC_gui.py +++ b/kindlecomicconverter/KCC_gui.py @@ -254,6 +254,8 @@ def run(self): options.noprocessing = True if GUI.deleteBox.isChecked(): options.delete = True + if GUI.dedupeCoverBox.isChecked(): + options.dedupecover = True if GUI.mozJpegBox.checkState() == Qt.CheckState.PartiallyChecked: options.forcepng = True elif GUI.mozJpegBox.checkState() == Qt.CheckState.Checked: @@ -787,6 +789,7 @@ def saveSettings(self, event): 'widthBox': GUI.widthBox.value(), 'heightBox': GUI.heightBox.value(), 'deleteBox': GUI.deleteBox.checkState().value, + 'dedupeCoverBox': GUI.dedupeCoverBox.checkState().value, 'maximizeStrips': GUI.maximizeStrips.checkState().value, 'gammaSlider': float(self.gammaValue) * 100}) self.settings.sync() diff --git a/kindlecomicconverter/KCC_rc.py b/kindlecomicconverter/KCC_rc.py index 758b5ee6..f7b740d6 100644 --- a/kindlecomicconverter/KCC_rc.py +++ b/kindlecomicconverter/KCC_rc.py @@ -1,6 +1,6 @@ # Resource object code (Python 3) # Created by: object code -# Created by: The Resource Compiler for Qt version 6.5.1 +# Created by: The Resource Compiler for Qt version 6.5.2 # WARNING! All changes made in this file will be lost! from PySide6 import QtCore @@ -11476,49 +11476,49 @@ \x00\x00\x00X\x00\x02\x00\x00\x00\x04\x00\x00\x00\x07\ \x00\x00\x00\x00\x00\x00\x00\x00\ \x00\x00\x01\xac\x00\x00\x00\x00\x00\x01\x00\x02&\xd7\ -\x00\x00\x01\x89\x0c\xe8\xc1\x86\ +\x00\x00\x01\x88;p\xbcB\ \x00\x00\x01\xea\x00\x00\x00\x00\x00\x01\x00\x02{q\ -\x00\x00\x01\x89\x0c\xe8\xc1\x85\ +\x00\x00\x01\x88;p\xbcB\ \x00\x00\x01\xd6\x00\x00\x00\x00\x00\x01\x00\x02Qv\ -\x00\x00\x01\x89\x0c\xe8\xc1\x84\ +\x00\x00\x01\x88;p\xbcB\ \x00\x00\x01\xc2\x00\x00\x00\x00\x00\x01\x00\x02F\x13\ -\x00\x00\x01\x89\x0c\xe8\xc1\x85\ +\x00\x00\x01\x89\x89D9.\ \x00\x00\x00X\x00\x02\x00\x00\x00\x03\x00\x00\x00\x0c\ \x00\x00\x00\x00\x00\x00\x00\x00\ \x00\x00\x00\xa6\x00\x00\x00\x00\x00\x01\x00\x01(\x97\ -\x00\x00\x01\x89\x0c\xe8\xc1\x86\ +\x00\x00\x01\x88;p\xbcB\ \x00\x00\x00\x8c\x00\x00\x00\x00\x00\x01\x00\x01\x1d\x90\ -\x00\x00\x01\x89\x0c\xe8\xc1\x86\ +\x00\x00\x01\x88;p\xbcB\ \x00\x00\x00\xbc\x00\x00\x00\x00\x00\x01\x00\x011\xef\ -\x00\x00\x01\x89\x0c\xe8\xc1\x87\ +\x00\x00\x01\x88;p\xbcB\ \x00\x00\x00X\x00\x02\x00\x00\x00\x03\x00\x00\x00\x10\ \x00\x00\x00\x00\x00\x00\x00\x00\ \x00\x00\x02.\x00\x00\x00\x00\x00\x01\x00\x02\xad\xbd\ -\x00\x00\x01\x89\x0c\xe8\xc1\x9a\ +\x00\x00\x01\x88;p\xbcJ\ \x00\x00\x02\x00\x00\x00\x00\x00\x00\x01\x00\x02\x97\xc0\ -\x00\x00\x01\x89\x0c\xe8\xc1\x98\ +\x00\x00\x01\x88;p\xbcI\ \x00\x00\x02\x16\x00\x00\x00\x00\x00\x01\x00\x02\xa1\x1d\ -\x00\x00\x01\x89\x0c\xe8\xc1\x97\ +\x00\x00\x01\x88;p\xbcI\ \x00\x00\x00X\x00\x02\x00\x00\x00\x07\x00\x00\x00\x14\ \x00\x00\x00\x00\x00\x00\x00\x00\ \x00\x00\x01\x08\x00\x00\x00\x00\x00\x01\x00\x01H\x9b\ -\x00\x00\x01\x89\x0c\xe8\xc1\x9b\ +\x00\x00\x01\x88;p\xbcJ\ \x00\x00\x01\x1e\x00\x00\x00\x00\x00\x01\x00\x01qC\ -\x00\x00\x01\x89\x0c\xe8\xc1\x97\ +\x00\x00\x01\x88;p\xbcI\ \x00\x00\x01\x80\x00\x00\x00\x00\x00\x01\x00\x01\xca\x17\ -\x00\x00\x01\x89\x0c\xe8\xc1\x98\ +\x00\x00\x01\x88;p\xbcI\ \x00\x00\x01f\x00\x00\x00\x00\x00\x01\x00\x01\x84\xd0\ -\x00\x00\x01\x89\x0c\xe8\xc1\x97\ +\x00\x00\x01\x88;p\xbcH\ \x00\x00\x00\xf0\x00\x00\x00\x00\x00\x01\x00\x01D<\ -\x00\x00\x01\x89\x0c\xe8\xc1\x8f\ +\x00\x00\x01\x88;p\xbcF\ \x00\x00\x00\xd4\x00\x00\x00\x00\x00\x01\x00\x017\xd3\ -\x00\x00\x01\x89\x0c\xe8\xc1\x96\ +\x00\x00\x01\x88;p\xbcH\ \x00\x00\x01@\x00\x00\x00\x00\x00\x01\x00\x01z\x9a\ -\x00\x00\x01\x89\x0c\xe8\xc1\x96\ +\x00\x00\x01\x88;p\xbcH\ \x00\x00\x00X\x00\x02\x00\x00\x00\x01\x00\x00\x00\x1c\ \x00\x00\x00\x00\x00\x00\x00\x00\ \x00\x00\x00h\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\ -\x00\x00\x01\x89\x0c\xe8\xc1\x96\ +\x00\x00\x01\x88;p\xbcH\ " def qInitResources(): diff --git a/kindlecomicconverter/KCC_ui.py b/kindlecomicconverter/KCC_ui.py index 0e37c8ef..4c8cf3cb 100644 --- a/kindlecomicconverter/KCC_ui.py +++ b/kindlecomicconverter/KCC_ui.py @@ -3,7 +3,7 @@ ################################################################################ ## Form generated from reading UI file 'KCC.ui' ## -## Created by: Qt User Interface Compiler version 6.5.1 +## Created by: Qt User Interface Compiler version 6.5.2 ## ## WARNING! All changes made in this file will be lost when recompiling UI file! ################################################################################ @@ -40,32 +40,21 @@ def setupUi(self, mainWindow): self.gridLayout_2 = QGridLayout(self.optionWidget) self.gridLayout_2.setObjectName(u"gridLayout_2") self.gridLayout_2.setContentsMargins(0, 0, 0, 0) - self.upscaleBox = QCheckBox(self.optionWidget) - self.upscaleBox.setObjectName(u"upscaleBox") - self.upscaleBox.setTristate(True) - - self.gridLayout_2.addWidget(self.upscaleBox, 1, 1, 1, 1) - - self.rotateBox = QCheckBox(self.optionWidget) - self.rotateBox.setObjectName(u"rotateBox") - self.rotateBox.setTristate(True) - - self.gridLayout_2.addWidget(self.rotateBox, 0, 1, 1, 1) - - self.outputSplit = QCheckBox(self.optionWidget) - self.outputSplit.setObjectName(u"outputSplit") + self.qualityBox = QCheckBox(self.optionWidget) + self.qualityBox.setObjectName(u"qualityBox") + self.qualityBox.setTristate(True) - self.gridLayout_2.addWidget(self.outputSplit, 2, 1, 1, 1) + self.gridLayout_2.addWidget(self.qualityBox, 0, 2, 1, 1) - self.webtoonBox = QCheckBox(self.optionWidget) - self.webtoonBox.setObjectName(u"webtoonBox") + self.deleteBox = QCheckBox(self.optionWidget) + self.deleteBox.setObjectName(u"deleteBox") - self.gridLayout_2.addWidget(self.webtoonBox, 1, 0, 1, 1) + self.gridLayout_2.addWidget(self.deleteBox, 4, 1, 1, 1) - self.colorBox = QCheckBox(self.optionWidget) - self.colorBox.setObjectName(u"colorBox") + self.maximizeStrips = QCheckBox(self.optionWidget) + self.maximizeStrips.setObjectName(u"maximizeStrips") - self.gridLayout_2.addWidget(self.colorBox, 2, 2, 1, 1) + self.gridLayout_2.addWidget(self.maximizeStrips, 3, 1, 1, 1) self.gammaBox = QCheckBox(self.optionWidget) self.gammaBox.setObjectName(u"gammaBox") @@ -78,27 +67,27 @@ def setupUi(self, mainWindow): self.gridLayout_2.addWidget(self.borderBox, 2, 0, 1, 1) - self.mangaBox = QCheckBox(self.optionWidget) - self.mangaBox.setObjectName(u"mangaBox") + self.webtoonBox = QCheckBox(self.optionWidget) + self.webtoonBox.setObjectName(u"webtoonBox") - self.gridLayout_2.addWidget(self.mangaBox, 0, 0, 1, 1) + self.gridLayout_2.addWidget(self.webtoonBox, 1, 0, 1, 1) - self.qualityBox = QCheckBox(self.optionWidget) - self.qualityBox.setObjectName(u"qualityBox") - self.qualityBox.setTristate(True) + self.upscaleBox = QCheckBox(self.optionWidget) + self.upscaleBox.setObjectName(u"upscaleBox") + self.upscaleBox.setTristate(True) - self.gridLayout_2.addWidget(self.qualityBox, 0, 2, 1, 1) + self.gridLayout_2.addWidget(self.upscaleBox, 1, 1, 1, 1) - self.mozJpegBox = QCheckBox(self.optionWidget) - self.mozJpegBox.setObjectName(u"mozJpegBox") - self.mozJpegBox.setTristate(True) + self.mangaBox = QCheckBox(self.optionWidget) + self.mangaBox.setObjectName(u"mangaBox") - self.gridLayout_2.addWidget(self.mozJpegBox, 3, 0, 1, 1) + self.gridLayout_2.addWidget(self.mangaBox, 0, 0, 1, 1) - self.maximizeStrips = QCheckBox(self.optionWidget) - self.maximizeStrips.setObjectName(u"maximizeStrips") + self.rotateBox = QCheckBox(self.optionWidget) + self.rotateBox.setObjectName(u"rotateBox") + self.rotateBox.setTristate(True) - self.gridLayout_2.addWidget(self.maximizeStrips, 3, 1, 1, 1) + self.gridLayout_2.addWidget(self.rotateBox, 0, 1, 1, 1) self.croppingBox = QCheckBox(self.optionWidget) self.croppingBox.setObjectName(u"croppingBox") @@ -106,16 +95,32 @@ def setupUi(self, mainWindow): self.gridLayout_2.addWidget(self.croppingBox, 3, 2, 1, 1) - self.deleteBox = QCheckBox(self.optionWidget) - self.deleteBox.setObjectName(u"deleteBox") + self.outputSplit = QCheckBox(self.optionWidget) + self.outputSplit.setObjectName(u"outputSplit") - self.gridLayout_2.addWidget(self.deleteBox, 4, 1, 1, 1) + self.gridLayout_2.addWidget(self.outputSplit, 2, 1, 1, 1) + + self.mozJpegBox = QCheckBox(self.optionWidget) + self.mozJpegBox.setObjectName(u"mozJpegBox") + self.mozJpegBox.setTristate(True) + + self.gridLayout_2.addWidget(self.mozJpegBox, 3, 0, 1, 1) + + self.colorBox = QCheckBox(self.optionWidget) + self.colorBox.setObjectName(u"colorBox") + + self.gridLayout_2.addWidget(self.colorBox, 2, 2, 1, 1) self.disableProcessingBox = QCheckBox(self.optionWidget) self.disableProcessingBox.setObjectName(u"disableProcessingBox") self.gridLayout_2.addWidget(self.disableProcessingBox, 4, 2, 1, 1) + self.dedupeCoverBox = QCheckBox(self.optionWidget) + self.dedupeCoverBox.setObjectName(u"dedupeCoverBox") + + self.gridLayout_2.addWidget(self.dedupeCoverBox, 4, 0, 1, 1) + self.gridLayout.addWidget(self.optionWidget, 5, 0, 1, 2) @@ -355,25 +360,17 @@ def setupUi(self, mainWindow): def retranslateUi(self, mainWindow): mainWindow.setWindowTitle(QCoreApplication.translate("mainWindow", u"Kindle Comic Converter", None)) #if QT_CONFIG(tooltip) - self.upscaleBox.setToolTip(QCoreApplication.translate("mainWindow", u"

Unchecked - Nothing
Images smaller than device resolution will not be resized.

Indeterminate - Stretching
Images smaller than device resolution will be resized. Aspect ratio will be not preserved.

Checked - Upscaling
Images smaller than device resolution will be resized. Aspect ratio will be preserved.

", None)) -#endif // QT_CONFIG(tooltip) - self.upscaleBox.setText(QCoreApplication.translate("mainWindow", u"Stretch/Upscale", None)) -#if QT_CONFIG(tooltip) - self.rotateBox.setToolTip(QCoreApplication.translate("mainWindow", u"

Unchecked - Split
Double page spreads will be cut into two separate pages.

Indeterminate - Rotate and split
Double page spreads will be displayed twice. First rotated and then split.

Checked - Rotate
Double page spreads will be rotated.

", None)) -#endif // QT_CONFIG(tooltip) - self.rotateBox.setText(QCoreApplication.translate("mainWindow", u"Spread splitter", None)) -#if QT_CONFIG(tooltip) - self.outputSplit.setToolTip(QCoreApplication.translate("mainWindow", u"

Unchecked - Automatic mode
The output will be split automatically.

Checked - Volume mode
Every subdirectory will be considered as a separate volume.

", None)) + self.qualityBox.setToolTip(QCoreApplication.translate("mainWindow", u"

Unchecked - 4 panels
Zoom each corner separately.

Indeterminate - 2 panels
Zoom only the top and bottom of the page.

Checked - 4 high-quality panels
Zoom each corner separately. Try to increase the quality of magnification. Check wiki for more details.

", None)) #endif // QT_CONFIG(tooltip) - self.outputSplit.setText(QCoreApplication.translate("mainWindow", u"Output split", None)) + self.qualityBox.setText(QCoreApplication.translate("mainWindow", u"Panel View 4/2/HQ", None)) #if QT_CONFIG(tooltip) - self.webtoonBox.setToolTip(QCoreApplication.translate("mainWindow", u"

Enable special parsing mode for Korean Webtoons.

", None)) + self.deleteBox.setToolTip(QCoreApplication.translate("mainWindow", u"Delete input file(s) or directory. It's not recoverable!", None)) #endif // QT_CONFIG(tooltip) - self.webtoonBox.setText(QCoreApplication.translate("mainWindow", u"Webtoon mode", None)) + self.deleteBox.setText(QCoreApplication.translate("mainWindow", u"Delete input", None)) #if QT_CONFIG(tooltip) - self.colorBox.setToolTip(QCoreApplication.translate("mainWindow", u"

Disable conversion to grayscale.

", None)) + self.maximizeStrips.setToolTip(QCoreApplication.translate("mainWindow", u"

Unchecked - 1x4
Keep format 1x4 panels strips.

Checked - 2x2
Turn 1x4 strips to 2x2 to maximize screen usage.

", None)) #endif // QT_CONFIG(tooltip) - self.colorBox.setText(QCoreApplication.translate("mainWindow", u"Color mode", None)) + self.maximizeStrips.setText(QCoreApplication.translate("mainWindow", u"1x4 to 2x2 strips", None)) #if QT_CONFIG(tooltip) self.gammaBox.setToolTip(QCoreApplication.translate("mainWindow", u"

Disable automatic gamma correction.

", None)) #endif // QT_CONFIG(tooltip) @@ -383,33 +380,45 @@ def retranslateUi(self, mainWindow): #endif // QT_CONFIG(tooltip) self.borderBox.setText(QCoreApplication.translate("mainWindow", u"W/B margins", None)) #if QT_CONFIG(tooltip) - self.mangaBox.setToolTip(QCoreApplication.translate("mainWindow", u"

Enable right-to-left reading.

", None)) + self.webtoonBox.setToolTip(QCoreApplication.translate("mainWindow", u"

Enable special parsing mode for Korean Webtoons.

", None)) #endif // QT_CONFIG(tooltip) - self.mangaBox.setText(QCoreApplication.translate("mainWindow", u"Manga mode", None)) + self.webtoonBox.setText(QCoreApplication.translate("mainWindow", u"Webtoon mode", None)) #if QT_CONFIG(tooltip) - self.qualityBox.setToolTip(QCoreApplication.translate("mainWindow", u"

Unchecked - 4 panels
Zoom each corner separately.

Indeterminate - 2 panels
Zoom only the top and bottom of the page.

Checked - 4 high-quality panels
Zoom each corner separately. Try to increase the quality of magnification. Check wiki for more details.

", None)) + self.upscaleBox.setToolTip(QCoreApplication.translate("mainWindow", u"

Unchecked - Nothing
Images smaller than device resolution will not be resized.

Indeterminate - Stretching
Images smaller than device resolution will be resized. Aspect ratio will be not preserved.

Checked - Upscaling
Images smaller than device resolution will be resized. Aspect ratio will be preserved.

", None)) #endif // QT_CONFIG(tooltip) - self.qualityBox.setText(QCoreApplication.translate("mainWindow", u"Panel View 4/2/HQ", None)) + self.upscaleBox.setText(QCoreApplication.translate("mainWindow", u"Stretch/Upscale", None)) #if QT_CONFIG(tooltip) - self.mozJpegBox.setToolTip(QCoreApplication.translate("mainWindow", u"

Unchecked - JPEG
Use JPEG files

Indeterminate - force PNG
Create PNG files instead JPEG

Checked - mozJpeg
10-20% smaller JPEG file, with the same image quality, but processing time multiplied by 2

", None)) + self.mangaBox.setToolTip(QCoreApplication.translate("mainWindow", u"

Enable right-to-left reading.

", None)) #endif // QT_CONFIG(tooltip) - self.mozJpegBox.setText(QCoreApplication.translate("mainWindow", u"JPEG/PNG/mozJpeg", None)) + self.mangaBox.setText(QCoreApplication.translate("mainWindow", u"Manga mode", None)) #if QT_CONFIG(tooltip) - self.maximizeStrips.setToolTip(QCoreApplication.translate("mainWindow", u"

Unchecked - 1x4
Keep format 1x4 panels strips.

Checked - 2x2
Turn 1x4 strips to 2x2 to maximize screen usage.

", None)) + self.rotateBox.setToolTip(QCoreApplication.translate("mainWindow", u"

Unchecked - Split
Double page spreads will be cut into two separate pages.

Indeterminate - Rotate and split
Double page spreads will be displayed twice. First rotated and then split.

Checked - Rotate
Double page spreads will be rotated.

", None)) #endif // QT_CONFIG(tooltip) - self.maximizeStrips.setText(QCoreApplication.translate("mainWindow", u"1x4 to 2x2 strips", None)) + self.rotateBox.setText(QCoreApplication.translate("mainWindow", u"Spread splitter", None)) #if QT_CONFIG(tooltip) self.croppingBox.setToolTip(QCoreApplication.translate("mainWindow", u"

Unchecked - Disabled

Disabled

Indeterminate - Margins
Margins

Checked - Margins + page numbers
Margins +page numbers

", None)) #endif // QT_CONFIG(tooltip) self.croppingBox.setText(QCoreApplication.translate("mainWindow", u"Cropping mode", None)) #if QT_CONFIG(tooltip) - self.deleteBox.setToolTip(QCoreApplication.translate("mainWindow", u"Delete input file(s) or directory. It's not recoverable!", None)) + self.outputSplit.setToolTip(QCoreApplication.translate("mainWindow", u"

Unchecked - Automatic mode
The output will be split automatically.

Checked - Volume mode
Every subdirectory will be considered as a separate volume.

", None)) #endif // QT_CONFIG(tooltip) - self.deleteBox.setText(QCoreApplication.translate("mainWindow", u"Delete input", None)) + self.outputSplit.setText(QCoreApplication.translate("mainWindow", u"Output split", None)) +#if QT_CONFIG(tooltip) + self.mozJpegBox.setToolTip(QCoreApplication.translate("mainWindow", u"

Unchecked - JPEG
Use JPEG files

Indeterminate - force PNG
Create PNG files instead JPEG

Checked - mozJpeg
10-20% smaller JPEG file, with the same image quality, but processing time multiplied by 2

", None)) +#endif // QT_CONFIG(tooltip) + self.mozJpegBox.setText(QCoreApplication.translate("mainWindow", u"JPEG/PNG/mozJpeg", None)) +#if QT_CONFIG(tooltip) + self.colorBox.setToolTip(QCoreApplication.translate("mainWindow", u"

Disable conversion to grayscale.

", None)) +#endif // QT_CONFIG(tooltip) + self.colorBox.setText(QCoreApplication.translate("mainWindow", u"Color mode", None)) #if QT_CONFIG(tooltip) self.disableProcessingBox.setToolTip(QCoreApplication.translate("mainWindow", u"
Do not process any image, ignore profile and processing options
", None)) #endif // QT_CONFIG(tooltip) self.disableProcessingBox.setText(QCoreApplication.translate("mainWindow", u"Disable processing", None)) +#if QT_CONFIG(tooltip) + self.dedupeCoverBox.setToolTip(QCoreApplication.translate("mainWindow", u"

Don't duplicate the first page as the cover. Useful for 2 page spread alignment.

", None)) +#endif // QT_CONFIG(tooltip) + self.dedupeCoverBox.setText(QCoreApplication.translate("mainWindow", u"De-dupe cover", None)) self.gammaLabel.setText(QCoreApplication.translate("mainWindow", u"Gamma: Auto", None)) self.croppingPowerLabel.setText(QCoreApplication.translate("mainWindow", u"Cropping power:", None)) #if QT_CONFIG(tooltip) diff --git a/kindlecomicconverter/KCC_ui_editor.py b/kindlecomicconverter/KCC_ui_editor.py index 2b5c2acb..6729adcb 100644 --- a/kindlecomicconverter/KCC_ui_editor.py +++ b/kindlecomicconverter/KCC_ui_editor.py @@ -3,7 +3,7 @@ ################################################################################ ## Form generated from reading UI file 'MetaEditor.ui' ## -## Created by: Qt User Interface Compiler version 6.5.1 +## Created by: Qt User Interface Compiler version 6.5.2 ## ## WARNING! All changes made in this file will be lost when recompiling UI file! ################################################################################