From 8ac58e361f9316e8502ab1cd0a42d78c0797ad3f Mon Sep 17 00:00:00 2001 From: Alex Xu Date: Wed, 3 Dec 2025 10:23:00 -0800 Subject: [PATCH 01/15] Bump version to 9.3.4 --- kindlecomicconverter/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kindlecomicconverter/__init__.py b/kindlecomicconverter/__init__.py index f08fbbe..aabd09c 100644 --- a/kindlecomicconverter/__init__.py +++ b/kindlecomicconverter/__init__.py @@ -1,4 +1,4 @@ -__version__ = '9.3.3' +__version__ = '9.3.4' __license__ = 'ISC' __copyright__ = '2012-2022, Ciro Mattia Gonano , Pawel Jastrzebski , darodi' __docformat__ = 'restructuredtext en' From 9fcacd7ae613781618a2dfcaf67733f67733f1fa Mon Sep 17 00:00:00 2001 From: Alex Xu Date: Wed, 3 Dec 2025 19:13:19 -0800 Subject: [PATCH 02/15] fix comicinfo detection in corner case (9.3.4 regression) (#1185) --- kindlecomicconverter/comic2ebook.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/kindlecomicconverter/comic2ebook.py b/kindlecomicconverter/comic2ebook.py index 0fdc4af..8cb784f 100755 --- a/kindlecomicconverter/comic2ebook.py +++ b/kindlecomicconverter/comic2ebook.py @@ -905,7 +905,9 @@ def getWorkFolder(afile): os.path.join(fullPath, tdir[0], 'ComicInfo.xml') ) if len(tdir) == 1 and os.path.isdir(os.path.join(fullPath, tdir[0])): - path = os.path.join(fullPath, tdir[0]) + for file in os.listdir(os.path.join(fullPath, tdir[0])): + move(os.path.join(fullPath, tdir[0], file), fullPath) + os.rmdir(os.path.join(fullPath, tdir[0])) return workdir except OSError as e: From 74fee9346c6caa59d81e64d15244599b261f0d43 Mon Sep 17 00:00:00 2001 From: Alex Xu Date: Wed, 3 Dec 2025 19:15:45 -0800 Subject: [PATCH 03/15] Bump version to 9.3.5 --- kindlecomicconverter/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kindlecomicconverter/__init__.py b/kindlecomicconverter/__init__.py index aabd09c..299ef5e 100644 --- a/kindlecomicconverter/__init__.py +++ b/kindlecomicconverter/__init__.py @@ -1,4 +1,4 @@ -__version__ = '9.3.4' +__version__ = '9.3.5' __license__ = 'ISC' __copyright__ = '2012-2022, Ciro Mattia Gonano , Pawel Jastrzebski , darodi' __docformat__ = 'restructuredtext en' From 988fc93dc566e0809591bc8776092bf1c15666cb Mon Sep 17 00:00:00 2001 From: Alex Xu Date: Mon, 8 Dec 2025 18:08:16 -0800 Subject: [PATCH 04/15] Fix macOS 10.14+ legacy compatibility (#1187) * Update requirements-osx-legacy.txt * upgrade macos-13 to macos-15-intel * upgrade macos-13 to macos-15-intel --- .github/workflows/package-macos.yml | 2 +- .github/workflows/package-osx-legacy.yml | 2 +- requirements-osx-legacy.txt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/package-macos.yml b/.github/workflows/package-macos.yml index 2e87e17..d1d206b 100644 --- a/.github/workflows/package-macos.yml +++ b/.github/workflows/package-macos.yml @@ -25,7 +25,7 @@ jobs: build: strategy: matrix: - os: [ macos-13, macos-14 ] + os: [ macos-15-intel, macos-14 ] runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v6 diff --git a/.github/workflows/package-osx-legacy.yml b/.github/workflows/package-osx-legacy.yml index 15124b7..2422229 100644 --- a/.github/workflows/package-osx-legacy.yml +++ b/.github/workflows/package-osx-legacy.yml @@ -23,7 +23,7 @@ jobs: build: strategy: matrix: - os: [ macos-13 ] + os: [ macos-15-intel ] runs-on: ${{ matrix.os }} env: # We need the official Python, because the GA ones only support newer macOS versions diff --git a/requirements-osx-legacy.txt b/requirements-osx-legacy.txt index 018a600..6e4d643 100644 --- a/requirements-osx-legacy.txt +++ b/requirements-osx-legacy.txt @@ -1,4 +1,4 @@ -PySide6==6.5.2 +PySide6==6.4.3 Pillow>=11.3.0 psutil>=5.9.5 requests>=2.31.0 From db4eb7896322282ed76d016a77455927fdeccf61 Mon Sep 17 00:00:00 2001 From: Alex Xu Date: Mon, 8 Dec 2025 19:15:47 -0800 Subject: [PATCH 05/15] Bump version to 9.3.6 --- kindlecomicconverter/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kindlecomicconverter/__init__.py b/kindlecomicconverter/__init__.py index 299ef5e..1bffabc 100644 --- a/kindlecomicconverter/__init__.py +++ b/kindlecomicconverter/__init__.py @@ -1,4 +1,4 @@ -__version__ = '9.3.5' +__version__ = '9.3.6' __license__ = 'ISC' __copyright__ = '2012-2022, Ciro Mattia Gonano , Pawel Jastrzebski , darodi' __docformat__ = 'restructuredtext en' From 5ad23d9629608bf6ee3ef0365009af37b69d279d Mon Sep 17 00:00:00 2001 From: Alex Xu Date: Mon, 8 Dec 2025 19:50:34 -0800 Subject: [PATCH 06/15] mention color --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 29ef973..04bb6c8 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ [![Github All Releases](https://img.shields.io/github/downloads/ciromattia/kcc/total.svg)](https://github.com/ciromattia/kcc/releases) -**Kindle Comic Converter** optimizes black & white comics and manga for E-ink ereaders +**Kindle Comic Converter** optimizes black & white or color comics and manga for E-ink ereaders like Kindle, Kobo, ReMarkable, and more. Pages display in fullscreen without margins, with proper fixed layout support. From 4733c6348b3c24179f8ab142f9aa8b5c4b65c092 Mon Sep 17 00:00:00 2001 From: Alex Xu Date: Mon, 8 Dec 2025 20:58:15 -0800 Subject: [PATCH 07/15] specify macOS 12 minimum for standard builds (#1188) --- .github/workflows/package-macos.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/package-macos.yml b/.github/workflows/package-macos.yml index d1d206b..045d2e6 100644 --- a/.github/workflows/package-macos.yml +++ b/.github/workflows/package-macos.yml @@ -27,6 +27,8 @@ jobs: matrix: os: [ macos-15-intel, macos-14 ] runs-on: ${{ matrix.os }} + env: + MACOSX_DEPLOYMENT_TARGET: '12' steps: - uses: actions/checkout@v6 - name: Set up Python From 3f4ef3e21e8dd4891f7cb5dfe3dfaae2bbb8f9d6 Mon Sep 17 00:00:00 2001 From: Alex Xu Date: Mon, 8 Dec 2025 20:59:26 -0800 Subject: [PATCH 08/15] Bump version to 9.3.7 --- kindlecomicconverter/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kindlecomicconverter/__init__.py b/kindlecomicconverter/__init__.py index 1bffabc..749d3e7 100644 --- a/kindlecomicconverter/__init__.py +++ b/kindlecomicconverter/__init__.py @@ -1,4 +1,4 @@ -__version__ = '9.3.6' +__version__ = '9.3.7' __license__ = 'ISC' __copyright__ = '2012-2022, Ciro Mattia Gonano , Pawel Jastrzebski , darodi' __docformat__ = 'restructuredtext en' From a017cfd00d86bf2aa57fcc91a9e4c5e5f2b2d791 Mon Sep 17 00:00:00 2001 From: Alex Xu Date: Mon, 8 Dec 2025 21:31:38 -0800 Subject: [PATCH 09/15] specify 12.0 instead of 12 --- .github/workflows/package-macos.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/package-macos.yml b/.github/workflows/package-macos.yml index 045d2e6..4160d05 100644 --- a/.github/workflows/package-macos.yml +++ b/.github/workflows/package-macos.yml @@ -28,7 +28,7 @@ jobs: os: [ macos-15-intel, macos-14 ] runs-on: ${{ matrix.os }} env: - MACOSX_DEPLOYMENT_TARGET: '12' + MACOSX_DEPLOYMENT_TARGET: '12.0' steps: - uses: actions/checkout@v6 - name: Set up Python From 8870898a87837c4cff637a77fb94afdab9be9040 Mon Sep 17 00:00:00 2001 From: Alex Xu Date: Mon, 8 Dec 2025 22:25:59 -0800 Subject: [PATCH 10/15] macOS 14 minimum for non legacy builds (#1189) --- .github/workflows/package-macos.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/package-macos.yml b/.github/workflows/package-macos.yml index 4160d05..a132ce0 100644 --- a/.github/workflows/package-macos.yml +++ b/.github/workflows/package-macos.yml @@ -28,7 +28,7 @@ jobs: os: [ macos-15-intel, macos-14 ] runs-on: ${{ matrix.os }} env: - MACOSX_DEPLOYMENT_TARGET: '12.0' + MACOSX_DEPLOYMENT_TARGET: '14.0' steps: - uses: actions/checkout@v6 - name: Set up Python From ce8998375cb9167acd72a30c61b2d2f7aef38e5e Mon Sep 17 00:00:00 2001 From: Alex Xu Date: Mon, 8 Dec 2025 22:27:40 -0800 Subject: [PATCH 11/15] macOS 14 minimum for non legacy --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 04bb6c8..d63761a 100644 --- a/README.md +++ b/README.md @@ -92,7 +92,7 @@ Click on **Assets** of the latest release. You probably want either - `KCC_*.*.*.exe` (Windows) - `kcc_macos_arm_*.*.*.dmg` (recent Mac with Apple Silicon M1 chip or later) -- `kcc_macos_i386_*.*.*.dmg` (older Mac with Intel chip macOS 12+) +- `kcc_macos_i386_*.*.*.dmg` (older Mac with Intel chip macOS 14+) There are also legacy macOS 10.14+ and Windows 7 experimental versions available. From f47d1427f0c921023e2141bfe3b82ca58b1af984 Mon Sep 17 00:00:00 2001 From: Alex Xu Date: Tue, 9 Dec 2025 23:22:31 -0800 Subject: [PATCH 12/15] Update README.md Clarified description of Kindle Comic Converter's capabilities. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d63761a..0055e6c 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ [![Github All Releases](https://img.shields.io/github/downloads/ciromattia/kcc/total.svg)](https://github.com/ciromattia/kcc/releases) -**Kindle Comic Converter** optimizes black & white or color comics and manga for E-ink ereaders +**Kindle Comic Converter** optimizes black & white (or color) comics and manga for E-ink ereaders like Kindle, Kobo, ReMarkable, and more. Pages display in fullscreen without margins, with proper fixed layout support. From 9992ca4d26edcd02b477c6e639dd5d48a3c8804d Mon Sep 17 00:00:00 2001 From: Alex Xu Date: Wed, 10 Dec 2025 22:00:56 -0800 Subject: [PATCH 13/15] fix mac legacy build naming --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index d818459..bd17012 100644 --- a/setup.py +++ b/setup.py @@ -41,7 +41,7 @@ class BuildBinaryCommand(setuptools.Command): os.system('pyinstaller --hidden-import=_cffi_backend -y -D -i icons/comic2ebook.icns -n "Kindle Comic Converter" -w -s kcc.py') # TODO /usr/bin/codesign --force -s "$MACOS_CERTIFICATE_NAME" --options runtime dist/Applications/Kindle\ Comic\ Converter.app -v min_os = os.getenv('MACOSX_DEPLOYMENT_TARGET') - if min_os: + if min_os.startswith('10.1'): os.system(f'appdmg kcc.json dist/kcc_osx_{min_os.replace(".", "_")}_legacy_{VERSION}.dmg') else: os.system(f'appdmg kcc.json dist/kcc_macos_{platform.processor()}_{VERSION}.dmg') From 7e94861fa1c7a698ec0fc66b3d60b197d1ab7922 Mon Sep 17 00:00:00 2001 From: Alex Xu Date: Sun, 14 Dec 2025 16:13:24 -0800 Subject: [PATCH 14/15] input folder multiselect (#1195) --- gui/KCC.ui | 90 ++++++++++++--------- kindlecomicconverter/KCC_gui.py | 25 +++++- kindlecomicconverter/KCC_ui.py | 135 +++++++++++++++++--------------- 3 files changed, 149 insertions(+), 101 deletions(-) diff --git a/gui/KCC.ui b/gui/KCC.ui index cb9fccb..3bc01a5 100644 --- a/gui/KCC.ui +++ b/gui/KCC.ui @@ -348,6 +348,51 @@ + + + + + + + + 0 + 0 + + + + <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Unchecked - next to source<br/></span>Place output files next to source files</p><p><span style=" font-weight:600; text-decoration: underline;">Indeterminate - folder next to source<br/></span>Place output files in a folder next to source files</p><p><span style=" font-weight:600; text-decoration: underline;">Checked - Custom<br/></span>Place output files in custom directory specified by right button</p></body></html> + + + Output Folder + + + true + + + + + + + + 0 + 30 + + + + <html><head/><body><p>Use this to select the default output directory.</p></body></html> + + + + + + + :/Other/icons/folder_new.png:/Other/icons/folder_new.png + + + + + + @@ -747,7 +792,7 @@ <html><head/><body><p style='white-space:pre'>Add CBR, CBZ, CB7 or PDF file to queue.</p></body></html> - Add file(s) + Add input file(s) @@ -755,19 +800,13 @@ - - - - - 0 - 30 - - + + - <html><head/><body><p>Use this to select the default output directory.</p></body></html> + <html><head/><body><p style='white-space:pre'>Add directory containing JPG, PNG or GIF files to queue.<br/><span style=" font-weight:600;">CBR, CBZ and CB7 files inside will not be processed!</span></p></body></html> - + Add input folder(s) @@ -775,26 +814,7 @@ - - - - - 0 - 0 - - - - <html><head/><body><p><span style=" font-weight:600; text-decoration: underline;">Unchecked - next to source<br/></span>Place output files next to source files</p><p><span style=" font-weight:600; text-decoration: underline;">Indeterminate - folder next to source<br/></span>Place output files in a folder next to source files</p><p><span style=" font-weight:600; text-decoration: underline;">Checked - Custom<br/></span>Place output files in custom directory specified by right button</p></body></html> - - - Output Folder - - - true - - - - + @@ -811,10 +831,9 @@ clearButton deviceBox convertButton - formatBox - defaultOutputFolderButton fileButton - defaultOutputFolderBox + directoryButton + formatBox @@ -901,12 +920,9 @@ jobList fileButton clearButton - defaultOutputFolderButton - defaultOutputFolderBox deviceBox widthBox heightBox - formatBox convertButton mangaBox rotateBox diff --git a/kindlecomicconverter/KCC_gui.py b/kindlecomicconverter/KCC_gui.py index 5ec3371..f86b02d 100644 --- a/kindlecomicconverter/KCC_gui.py +++ b/kindlecomicconverter/KCC_gui.py @@ -22,7 +22,7 @@ import itertools from pathlib import Path from PySide6.QtCore import (QSize, QUrl, Qt, Signal, QIODeviceBase, QEvent, QThread, QSettings) from PySide6.QtGui import (QColor, QIcon, QPixmap, QDesktopServices) -from PySide6.QtWidgets import (QApplication, QLabel, QListWidgetItem, QMainWindow, QSystemTrayIcon, QFileDialog, QMessageBox, QDialog) +from PySide6.QtWidgets import (QApplication, QLabel, QListWidgetItem, QMainWindow, QSystemTrayIcon, QFileDialog, QMessageBox, QDialog, QTreeView, QAbstractItemView) from PySide6.QtNetwork import (QLocalSocket, QLocalServer) import os @@ -610,12 +610,30 @@ class KCCGUI(KCC_ui.Ui_mainWindow): 'Comic (*.pdf);;All (*.*)') for fname in fnames[0]: if fname != '': - if sys.platform.startswith('win'): - fname = fname.replace('/', '\\') self.lastPath = os.path.abspath(os.path.join(fname, os.pardir)) GUI.jobList.addItem(fname) GUI.jobList.scrollToBottom() + def selectDir(self): + if self.needClean: + self.needClean = False + GUI.jobList.clear() + + dialog = QFileDialog(MW, 'Select input folder(s)', self.lastPath) + dialog.setFileMode(QFileDialog.FileMode.Directory) + dialog.setOption(QFileDialog.Option.ShowDirsOnly, True) + dialog.setOption(QFileDialog.Option.DontUseNativeDialog, True) + dialog.findChild(QTreeView).setSelectionMode(QAbstractItemView.ExtendedSelection) + + if dialog.exec(): + dnames = dialog.selectedFiles() + for dname in dnames: + if dname != '': + self.lastPath = os.path.abspath(os.path.join(dname, os.pardir)) + GUI.jobList.addItem(dname) + GUI.jobList.scrollToBottom() + + def selectFileMetaEditor(self, sname): if not sname: if QApplication.keyboardModifiers() == Qt.ShiftModifier: @@ -1319,6 +1337,7 @@ class KCCGUI(KCC_ui.Ui_mainWindow): GUI.defaultOutputFolderButton.clicked.connect(self.selectDefaultOutputFolder) GUI.clearButton.clicked.connect(self.clearJobs) GUI.fileButton.clicked.connect(self.selectFile) + GUI.directoryButton.clicked.connect(self.selectDir) GUI.editorButton.clicked.connect(self.selectFileMetaEditor) GUI.wikiButton.clicked.connect(self.openWiki) GUI.kofiButton.clicked.connect(self.openKofi) diff --git a/kindlecomicconverter/KCC_ui.py b/kindlecomicconverter/KCC_ui.py index df16860..36f09d6 100644 --- a/kindlecomicconverter/KCC_ui.py +++ b/kindlecomicconverter/KCC_ui.py @@ -190,6 +190,33 @@ class Ui_mainWindow(object): self.gridLayout_2.addWidget(self.autocontrastBox, 9, 2, 1, 1) + self.outputFolderWidget = QWidget(self.optionWidget) + self.outputFolderWidget.setObjectName(u"outputFolderWidget") + self.horizontalLayout_3 = QHBoxLayout(self.outputFolderWidget) + self.horizontalLayout_3.setObjectName(u"horizontalLayout_3") + self.defaultOutputFolderBox = QCheckBox(self.outputFolderWidget) + self.defaultOutputFolderBox.setObjectName(u"defaultOutputFolderBox") + sizePolicy1 = QSizePolicy(QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Fixed) + sizePolicy1.setHorizontalStretch(0) + sizePolicy1.setVerticalStretch(0) + sizePolicy1.setHeightForWidth(self.defaultOutputFolderBox.sizePolicy().hasHeightForWidth()) + self.defaultOutputFolderBox.setSizePolicy(sizePolicy1) + self.defaultOutputFolderBox.setTristate(True) + + self.horizontalLayout_3.addWidget(self.defaultOutputFolderBox) + + self.defaultOutputFolderButton = QPushButton(self.outputFolderWidget) + self.defaultOutputFolderButton.setObjectName(u"defaultOutputFolderButton") + self.defaultOutputFolderButton.setMinimumSize(QSize(0, 30)) + icon1 = QIcon() + icon1.addFile(u":/Other/icons/folder_new.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off) + self.defaultOutputFolderButton.setIcon(icon1) + + self.horizontalLayout_3.addWidget(self.defaultOutputFolderButton) + + + self.gridLayout_2.addWidget(self.outputFolderWidget, 0, 2, 1, 1) + self.gridLayout.addWidget(self.optionWidget, 5, 0, 1, 2) @@ -211,11 +238,11 @@ class Ui_mainWindow(object): self.gridLayout_3.setContentsMargins(0, 0, 0, 0) self.hLabel = QLabel(self.customWidget) self.hLabel.setObjectName(u"hLabel") - sizePolicy1 = QSizePolicy(QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Preferred) - sizePolicy1.setHorizontalStretch(0) - sizePolicy1.setVerticalStretch(0) - sizePolicy1.setHeightForWidth(self.hLabel.sizePolicy().hasHeightForWidth()) - self.hLabel.setSizePolicy(sizePolicy1) + sizePolicy2 = QSizePolicy(QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Preferred) + sizePolicy2.setHorizontalStretch(0) + sizePolicy2.setVerticalStretch(0) + sizePolicy2.setHeightForWidth(self.hLabel.sizePolicy().hasHeightForWidth()) + self.hLabel.setSizePolicy(sizePolicy2) self.gridLayout_3.addWidget(self.hLabel, 0, 2, 1, 1) @@ -227,8 +254,8 @@ class Ui_mainWindow(object): self.wLabel = QLabel(self.customWidget) self.wLabel.setObjectName(u"wLabel") - sizePolicy1.setHeightForWidth(self.wLabel.sizePolicy().hasHeightForWidth()) - self.wLabel.setSizePolicy(sizePolicy1) + sizePolicy2.setHeightForWidth(self.wLabel.sizePolicy().hasHeightForWidth()) + self.wLabel.setSizePolicy(sizePolicy2) self.gridLayout_3.addWidget(self.wLabel, 0, 0, 1, 1) @@ -271,18 +298,18 @@ class Ui_mainWindow(object): self.editorButton = QPushButton(self.toolWidget) self.editorButton.setObjectName(u"editorButton") self.editorButton.setMinimumSize(QSize(0, 30)) - icon1 = QIcon() - icon1.addFile(u":/Other/icons/editor.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off) - self.editorButton.setIcon(icon1) + icon2 = QIcon() + icon2.addFile(u":/Other/icons/editor.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off) + self.editorButton.setIcon(icon2) self.horizontalLayout.addWidget(self.editorButton) self.kofiButton = QPushButton(self.toolWidget) self.kofiButton.setObjectName(u"kofiButton") self.kofiButton.setMinimumSize(QSize(0, 30)) - icon2 = QIcon() - icon2.addFile(u":/Brand/icons/kofi_symbol.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off) - self.kofiButton.setIcon(icon2) + icon3 = QIcon() + icon3.addFile(u":/Brand/icons/kofi_symbol.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off) + self.kofiButton.setIcon(icon3) self.kofiButton.setIconSize(QSize(19, 16)) self.horizontalLayout.addWidget(self.kofiButton) @@ -290,9 +317,9 @@ class Ui_mainWindow(object): self.wikiButton = QPushButton(self.toolWidget) self.wikiButton.setObjectName(u"wikiButton") self.wikiButton.setMinimumSize(QSize(0, 30)) - icon3 = QIcon() - icon3.addFile(u":/Other/icons/wiki.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off) - self.wikiButton.setIcon(icon3) + icon4 = QIcon() + icon4.addFile(u":/Other/icons/wiki.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off) + self.wikiButton.setIcon(icon4) self.horizontalLayout.addWidget(self.wikiButton) @@ -336,11 +363,8 @@ class Ui_mainWindow(object): self.preserveMarginBox = QSpinBox(self.croppingWidget) self.preserveMarginBox.setObjectName(u"preserveMarginBox") - sizePolicy2 = QSizePolicy(QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Fixed) - sizePolicy2.setHorizontalStretch(0) - sizePolicy2.setVerticalStretch(0) - sizePolicy2.setHeightForWidth(self.preserveMarginBox.sizePolicy().hasHeightForWidth()) - self.preserveMarginBox.setSizePolicy(sizePolicy2) + sizePolicy1.setHeightForWidth(self.preserveMarginBox.sizePolicy().hasHeightForWidth()) + self.preserveMarginBox.setSizePolicy(sizePolicy1) self.preserveMarginBox.setMaximum(99) self.preserveMarginBox.setSingleStep(5) self.preserveMarginBox.setValue(0) @@ -364,18 +388,18 @@ class Ui_mainWindow(object): self.convertButton.setObjectName(u"convertButton") self.convertButton.setMinimumSize(QSize(0, 30)) self.convertButton.setFont(font) - icon4 = QIcon() - icon4.addFile(u":/Other/icons/convert.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off) - self.convertButton.setIcon(icon4) + icon5 = QIcon() + icon5.addFile(u":/Other/icons/convert.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off) + self.convertButton.setIcon(icon5) self.gridLayout_4.addWidget(self.convertButton, 1, 3, 1, 1) self.clearButton = QPushButton(self.buttonWidget) self.clearButton.setObjectName(u"clearButton") self.clearButton.setMinimumSize(QSize(0, 30)) - icon5 = QIcon() - icon5.addFile(u":/Other/icons/clear.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off) - self.clearButton.setIcon(icon5) + icon6 = QIcon() + icon6.addFile(u":/Other/icons/clear.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off) + self.clearButton.setIcon(icon6) self.gridLayout_4.addWidget(self.clearButton, 0, 3, 1, 1) @@ -388,42 +412,30 @@ class Ui_mainWindow(object): self.fileButton = QPushButton(self.buttonWidget) self.fileButton.setObjectName(u"fileButton") self.fileButton.setMinimumSize(QSize(0, 30)) - icon6 = QIcon() - icon6.addFile(u":/Other/icons/document_new.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off) - self.fileButton.setIcon(icon6) + icon7 = QIcon() + icon7.addFile(u":/Other/icons/document_new.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off) + self.fileButton.setIcon(icon7) self.gridLayout_4.addWidget(self.fileButton, 0, 1, 1, 1) - self.defaultOutputFolderButton = QPushButton(self.buttonWidget) - self.defaultOutputFolderButton.setObjectName(u"defaultOutputFolderButton") - self.defaultOutputFolderButton.setMinimumSize(QSize(0, 30)) - icon7 = QIcon() - icon7.addFile(u":/Other/icons/folder_new.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off) - self.defaultOutputFolderButton.setIcon(icon7) + self.directoryButton = QPushButton(self.buttonWidget) + self.directoryButton.setObjectName(u"directoryButton") + self.directoryButton.setIcon(icon1) - self.gridLayout_4.addWidget(self.defaultOutputFolderButton, 0, 5, 1, 1) - - self.defaultOutputFolderBox = QCheckBox(self.buttonWidget) - self.defaultOutputFolderBox.setObjectName(u"defaultOutputFolderBox") - sizePolicy2.setHeightForWidth(self.defaultOutputFolderBox.sizePolicy().hasHeightForWidth()) - self.defaultOutputFolderBox.setSizePolicy(sizePolicy2) - self.defaultOutputFolderBox.setTristate(True) - - self.gridLayout_4.addWidget(self.defaultOutputFolderBox, 0, 4, 1, 1) + self.gridLayout_4.addWidget(self.directoryButton, 0, 4, 1, 1) self.formatBox = QComboBox(self.buttonWidget) self.formatBox.setObjectName(u"formatBox") self.formatBox.setMinimumSize(QSize(0, 28)) - self.gridLayout_4.addWidget(self.formatBox, 1, 4, 1, 2) + self.gridLayout_4.addWidget(self.formatBox, 1, 4, 1, 1) self.clearButton.raise_() self.deviceBox.raise_() self.convertButton.raise_() - self.formatBox.raise_() - self.defaultOutputFolderButton.raise_() self.fileButton.raise_() - self.defaultOutputFolderBox.raise_() + self.directoryButton.raise_() + self.formatBox.raise_() self.gridLayout.addWidget(self.buttonWidget, 3, 0, 1, 2) @@ -471,13 +483,10 @@ class Ui_mainWindow(object): mainWindow.setStatusBar(self.statusBar) QWidget.setTabOrder(self.jobList, self.fileButton) QWidget.setTabOrder(self.fileButton, self.clearButton) - QWidget.setTabOrder(self.clearButton, self.defaultOutputFolderButton) - QWidget.setTabOrder(self.defaultOutputFolderButton, self.defaultOutputFolderBox) - QWidget.setTabOrder(self.defaultOutputFolderBox, self.deviceBox) + QWidget.setTabOrder(self.clearButton, self.deviceBox) QWidget.setTabOrder(self.deviceBox, self.widthBox) QWidget.setTabOrder(self.widthBox, self.heightBox) - QWidget.setTabOrder(self.heightBox, self.formatBox) - QWidget.setTabOrder(self.formatBox, self.convertButton) + QWidget.setTabOrder(self.heightBox, self.convertButton) QWidget.setTabOrder(self.convertButton, self.mangaBox) QWidget.setTabOrder(self.mangaBox, self.rotateBox) QWidget.setTabOrder(self.rotateBox, self.qualityBox) @@ -621,6 +630,14 @@ class Ui_mainWindow(object): self.autocontrastBox.setToolTip(QCoreApplication.translate("mainWindow", u"

Unchecked - BW only
Only autocontrast bw pages. Ignored for pages where near blacks or whites don't exist.

Indeterminate - Disabled
Disable autocontrast

Checked - BW and Color
BW and color images will be autocontrasted. Ignored for pages where near blacks or whites don't exist.

", None)) #endif // QT_CONFIG(tooltip) self.autocontrastBox.setText(QCoreApplication.translate("mainWindow", u"Autocontrast", None)) +#if QT_CONFIG(tooltip) + self.defaultOutputFolderBox.setToolTip(QCoreApplication.translate("mainWindow", u"

Unchecked - next to source
Place output files next to source files

Indeterminate - folder next to source
Place output files in a folder next to source files

Checked - Custom
Place output files in custom directory specified by right button

", None)) +#endif // QT_CONFIG(tooltip) + self.defaultOutputFolderBox.setText(QCoreApplication.translate("mainWindow", u"Output Folder", None)) +#if QT_CONFIG(tooltip) + self.defaultOutputFolderButton.setToolTip(QCoreApplication.translate("mainWindow", u"

Use this to select the default output directory.

", None)) +#endif // QT_CONFIG(tooltip) + self.defaultOutputFolderButton.setText("") #if QT_CONFIG(tooltip) self.jobList.setToolTip(QCoreApplication.translate("mainWindow", u"

Double click on source to open it in metadata editor.

", None)) #endif // QT_CONFIG(tooltip) @@ -661,15 +678,11 @@ class Ui_mainWindow(object): #if QT_CONFIG(tooltip) self.fileButton.setToolTip(QCoreApplication.translate("mainWindow", u"

Add CBR, CBZ, CB7 or PDF file to queue.

", None)) #endif // QT_CONFIG(tooltip) - self.fileButton.setText(QCoreApplication.translate("mainWindow", u"Add file(s)", None)) + self.fileButton.setText(QCoreApplication.translate("mainWindow", u"Add input file(s)", None)) #if QT_CONFIG(tooltip) - self.defaultOutputFolderButton.setToolTip(QCoreApplication.translate("mainWindow", u"

Use this to select the default output directory.

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

Add directory containing JPG, PNG or GIF files to queue.
CBR, CBZ and CB7 files inside will not be processed!

", None)) #endif // QT_CONFIG(tooltip) - self.defaultOutputFolderButton.setText("") -#if QT_CONFIG(tooltip) - self.defaultOutputFolderBox.setToolTip(QCoreApplication.translate("mainWindow", u"

Unchecked - next to source
Place output files next to source files

Indeterminate - folder next to source
Place output files in a folder next to source files

Checked - Custom
Place output files in custom directory specified by right button

", None)) -#endif // QT_CONFIG(tooltip) - self.defaultOutputFolderBox.setText(QCoreApplication.translate("mainWindow", u"Output Folder", None)) + self.directoryButton.setText(QCoreApplication.translate("mainWindow", u"Add input folder(s)", None)) #if QT_CONFIG(tooltip) self.formatBox.setToolTip(QCoreApplication.translate("mainWindow", u"

Output format.

", None)) #endif // QT_CONFIG(tooltip) From 2e65bee7b2099439978e0cfda8bc90b00c8c2d99 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 14 Dec 2025 17:05:33 -0800 Subject: [PATCH 15/15] Bump actions/upload-artifact from 5 to 6 (#1196) Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 5 to 6. - [Release notes](https://github.com/actions/upload-artifact/releases) - [Commits](https://github.com/actions/upload-artifact/compare/v5...v6) --- updated-dependencies: - dependency-name: actions/upload-artifact dependency-version: '6' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/package-linux.yml | 2 +- .github/workflows/package-macos.yml | 2 +- .github/workflows/package-osx-legacy.yml | 2 +- .github/workflows/package-windows.yml | 2 +- .github/workflows/package-windows7.yml | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/package-linux.yml b/.github/workflows/package-linux.yml index afa1c42..72b95a4 100644 --- a/.github/workflows/package-linux.yml +++ b/.github/workflows/package-linux.yml @@ -59,7 +59,7 @@ jobs: env: UPDATE_INFO: gh-releases-zsync|ciromattia|kcc|latest|*x86_64.AppImage.zsync - name: upload artifact - uses: actions/upload-artifact@v5 + uses: actions/upload-artifact@v6 with: name: AppImage path: './*.AppImage*' diff --git a/.github/workflows/package-macos.yml b/.github/workflows/package-macos.yml index a132ce0..66187a6 100644 --- a/.github/workflows/package-macos.yml +++ b/.github/workflows/package-macos.yml @@ -80,7 +80,7 @@ jobs: run: | python setup.py build_binary - name: upload build - uses: actions/upload-artifact@v5 + uses: actions/upload-artifact@v6 with: name: mac-os-build-${{ runner.arch }} path: dist/*.dmg diff --git a/.github/workflows/package-osx-legacy.yml b/.github/workflows/package-osx-legacy.yml index 2422229..086e7f4 100644 --- a/.github/workflows/package-osx-legacy.yml +++ b/.github/workflows/package-osx-legacy.yml @@ -51,7 +51,7 @@ jobs: run: | python3 setup.py build_binary - name: upload build - uses: actions/upload-artifact@v5 + uses: actions/upload-artifact@v6 with: name: osx-build-${{ runner.arch }} path: dist/*.dmg diff --git a/.github/workflows/package-windows.yml b/.github/workflows/package-windows.yml index 1d4bf92..34148a9 100644 --- a/.github/workflows/package-windows.yml +++ b/.github/workflows/package-windows.yml @@ -53,7 +53,7 @@ jobs: python setup.py ${{ matrix.command }} - name: upload-unsigned-artifact id: upload-unsigned-artifact - uses: actions/upload-artifact@v5 + uses: actions/upload-artifact@v6 with: name: windows-build-${{ matrix.entry }} path: dist/*.exe diff --git a/.github/workflows/package-windows7.yml b/.github/workflows/package-windows7.yml index cfa2df0..9ea0782 100644 --- a/.github/workflows/package-windows7.yml +++ b/.github/workflows/package-windows7.yml @@ -46,7 +46,7 @@ jobs: python setup.py build_binary - name: upload-unsigned-artifact id: upload-unsigned-artifact - uses: actions/upload-artifact@v5 + uses: actions/upload-artifact@v6 with: name: windows7-build path: dist/*.exe