diff --git a/README.md b/README.md index fd28e1d..ea60afd 100644 --- a/README.md +++ b/README.md @@ -259,7 +259,7 @@ OUTPUT SETTINGS: Output generated file to specified directory or file -t TITLE, --title TITLE Comic title [Default=filename or directory name] - --metadatatitle Write title from ComicInfo.xml or other embedded metadata + --metadatatitle Write title using ComicInfo.xml or other embedded metadata. 0: Don't use Title from metadata 1: Combine Title with default schema 2: Use Title only [Default=0] -a AUTHOR, --author AUTHOR Author name [Default=KCC] -f FORMAT, --format FORMAT diff --git a/gui/KCC.ui b/gui/KCC.ui index 202f65d..a612533 100644 --- a/gui/KCC.ui +++ b/gui/KCC.ui @@ -516,6 +516,28 @@ + + + + 0 + 0 + + + + Qt::FocusPolicy::ClickFocus + + + <html><head/><body><p>Default Title</p></body></html> + + + Default Title + + + false + + + + @@ -593,11 +615,14 @@ - <html><head/><body><p>Write Title from ComicInfo.xml or other embedded metadata.</p></body></html> + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Unchecked - Don't use metadata Title<br/></span>Write default title.</p><p><span style=" font-weight:600; text-decoration: underline;">Indeterminate - Add metadata Title to the default schema<br/></span>Write default title with Title from ComicInfo.xml or other embedded metadata.</p><p><span style=" font-weight:600; text-decoration: underline;">Checked - Use metadata Title only<br/></span>Write Title from ComicInfo.xml or other embedded metadata.</p></body></html> Metadata Title + + true + diff --git a/kindlecomicconverter/KCC_gui.py b/kindlecomicconverter/KCC_gui.py index 717478a..a19cddb 100644 --- a/kindlecomicconverter/KCC_gui.py +++ b/kindlecomicconverter/KCC_gui.py @@ -321,8 +321,10 @@ class WorkerThread(QThread): options.maximizestrips = True if GUI.disableProcessingBox.isChecked(): options.noprocessing = True - if GUI.metadataTitleBox.isChecked(): - options.metadatatitle = True + if GUI.metadataTitleBox.checkState() == Qt.CheckState.PartiallyChecked: + options.metadatatitle = 1 + elif GUI.metadataTitleBox.checkState() == Qt.CheckState.Checked: + options.metadatatitle = 2 if GUI.deleteBox.isChecked(): options.delete = True if GUI.spreadShiftBox.isChecked(): @@ -344,6 +346,8 @@ class WorkerThread(QThread): options.customheight = str(GUI.heightBox.value()) if GUI.targetDirectory != '': options.output = GUI.targetDirectory + if GUI.titleEdit.text(): + options.title = str(GUI.titleEdit.text()) if GUI.authorEdit.text(): options.author = str(GUI.authorEdit.text()) if GUI.chunkSizeCheckBox.isChecked(): @@ -367,6 +371,11 @@ class WorkerThread(QThread): except Exception as e: print('Fusion Failed. ' + str(e)) MW.addMessage.emit('Fusion Failed. ' + str(e), 'error', True) + elif len(currentJobs) > 1 and options.title != 'defaulttitle': + currentJobs.clear() + error_message = 'Process Failed. Custom title can\'t be set when processing more than 1 source.\nDid you forget to check fusion?' + print(error_message) + MW.addMessage.emit(error_message, 'error', True) for job in currentJobs: sleep(0.5) if not self.conversionAlive: @@ -743,6 +752,21 @@ class KCCGUI(KCC_ui.Ui_mainWindow): def togglechunkSizeCheckBox(self, value): GUI.chunkSizeWidget.setVisible(value) + def toggletitleEdit(self, value): + if value: + self.metadataTitleBox.setChecked(False) + + def togglefileFusionBox(self, value): + if value: + GUI.metadataTitleBox.setChecked(False) + GUI.metadataTitleBox.setEnabled(False) + else: + GUI.metadataTitleBox.setEnabled(True) + + def togglemetadataTitleBox(self, value): + if value: + GUI.titleEdit.setText(None) + def changeGamma(self, value): valueRaw = int(5 * round(float(value) / 5)) value = '%.2f' % (float(valueRaw) / 100) @@ -1255,6 +1279,9 @@ class KCCGUI(KCC_ui.Ui_mainWindow): GUI.chunkSizeCheckBox.stateChanged.connect(self.togglechunkSizeCheckBox) GUI.deviceBox.activated.connect(self.changeDevice) GUI.formatBox.activated.connect(self.changeFormat) + GUI.titleEdit.textChanged.connect(self.toggletitleEdit) + GUI.fileFusionBox.stateChanged.connect(self.togglefileFusionBox) + GUI.metadataTitleBox.stateChanged.connect(self.togglemetadataTitleBox) MW.progressBarTick.connect(self.updateProgressbar) MW.modeConvert.connect(self.modeConvert) MW.addMessage.connect(self.addMessage) diff --git a/kindlecomicconverter/KCC_ui.py b/kindlecomicconverter/KCC_ui.py index ba94511..7db3e4f 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.9.1 +## Created by: Qt User Interface Compiler version 6.9.3 ## ## WARNING! All changes made in this file will be lost when recompiling UI file! ################################################################################ @@ -289,7 +289,16 @@ class Ui_mainWindow(object): self.authorEdit.setFocusPolicy(Qt.FocusPolicy.ClickFocus) self.authorEdit.setClearButtonEnabled(False) - self.gridLayout_2.addWidget(self.authorEdit, 0, 0, 1, 1) + self.gridLayout_2.addWidget(self.authorEdit, 0, 1, 1, 1) + + self.titleEdit = QLineEdit(self.optionWidget) + self.titleEdit.setObjectName(u"titleEdit") + sizePolicy3.setHeightForWidth(self.titleEdit.sizePolicy().hasHeightForWidth()) + self.titleEdit.setSizePolicy(sizePolicy3) + self.titleEdit.setFocusPolicy(Qt.FocusPolicy.ClickFocus) + self.titleEdit.setClearButtonEnabled(False) + + self.gridLayout_2.addWidget(self.titleEdit, 0, 0, 1, 1) self.rotateFirstBox = QCheckBox(self.optionWidget) self.rotateFirstBox.setObjectName(u"rotateFirstBox") @@ -319,6 +328,7 @@ class Ui_mainWindow(object): self.metadataTitleBox = QCheckBox(self.optionWidget) self.metadataTitleBox.setObjectName(u"metadataTitleBox") + self.metadataTitleBox.setTristate(True) self.gridLayout_2.addWidget(self.metadataTitleBox, 7, 0, 1, 1) @@ -562,6 +572,10 @@ class Ui_mainWindow(object): self.authorEdit.setToolTip(QCoreApplication.translate("mainWindow", u"Default Author is KCC", None)) #endif // QT_CONFIG(tooltip) self.authorEdit.setPlaceholderText(QCoreApplication.translate("mainWindow", u"Default Author", None)) +#if QT_CONFIG(tooltip) + self.titleEdit.setToolTip(QCoreApplication.translate("mainWindow", u"Default Title is based on filename, directory name or metadata", None)) +#endif // QT_CONFIG(tooltip) + self.titleEdit.setPlaceholderText(QCoreApplication.translate("mainWindow", u"Default Title", None)) #if QT_CONFIG(tooltip) self.rotateFirstBox.setToolTip(QCoreApplication.translate("mainWindow", u"

When the spread splitter option is partially checked,

Unchecked - Rotate Last
Put the rotated 2 page spread after the split spreads.

Checked - Rotate First
Put the rotated 2 page spread before the split spreads.

", None)) #endif // QT_CONFIG(tooltip) @@ -583,7 +597,7 @@ class Ui_mainWindow(object): #endif // QT_CONFIG(tooltip) self.outputSplit.setText(QCoreApplication.translate("mainWindow", u"Output split", None)) #if QT_CONFIG(tooltip) - self.metadataTitleBox.setToolTip(QCoreApplication.translate("mainWindow", u"

Write Title from ComicInfo.xml or other embedded metadata.

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

Unchecked - Don't use metadata Title
Write default title.

Indeterminate - Add metadata Title to the default schema
Write default title with Title from ComicInfo.xml or other embedded metadata.

Checked - Use metadata Title only
Write Title from ComicInfo.xml or other embedded metadata.

", None)) #endif // QT_CONFIG(tooltip) self.metadataTitleBox.setText(QCoreApplication.translate("mainWindow", u"Metadata Title", None)) #if QT_CONFIG(tooltip) diff --git a/kindlecomicconverter/comic2ebook.py b/kindlecomicconverter/comic2ebook.py index b528676..662f09e 100755 --- a/kindlecomicconverter/comic2ebook.py +++ b/kindlecomicconverter/comic2ebook.py @@ -958,7 +958,7 @@ def getMetadata(path, originalpath): except Exception: os.remove(xmlPath) return - if options.metadatatitle: + if options.metadatatitle == 2: options.title = xml.data['Title'] elif defaultTitle: if xml.data['Series']: @@ -967,6 +967,8 @@ def getMetadata(path, originalpath): titleSuffix += ' Vol. ' + xml.data['Volume'].zfill(2) if xml.data['Number']: titleSuffix += ' #' + xml.data['Number'].zfill(3) + if options.metadatatitle == 1 and xml.data['Title']: + titleSuffix += ': ' + xml.data['Title'] options.title += titleSuffix if defaultAuthor: options.authors = [] @@ -1290,8 +1292,9 @@ 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("--metadatatitle", action="store_true", dest="metadatatitle", default=False, - help="Write Title from ComicInfo.xml or other embedded metadata") + output_options.add_argument("--metadatatitle", type=int, dest="metadatatitle", default=0, + help="Write title using ComicInfo.xml or other embedded metadata. 1: Combine Title with default schema " + "2: Use Title only") 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",