diff --git a/README.md b/README.md
index edfa464..a74562f 100644
--- a/README.md
+++ b/README.md
@@ -32,7 +32,7 @@ If you find **KCC** valuable you can consider donating to the authors:
## INSTALLATION
-### BINARY RELEASES
+### DOWNLOADS
You can find the latest binary at the following link:
- **https://github.com/ciromattia/kcc/releases**
@@ -87,8 +87,6 @@ $ sudo apt-get install qt5dxcb-plugin
- CB7, 7Z *(With `7z` executable)*
- PDF *(Only extracting JPG images)*
-Add 7z to PATH via `setx path "%path%;C:\Program Files\7-Zip"`
-
## USAGE
Should be pretty self-explanatory. All options have detailed information in tooltips.
diff --git a/environment.yml b/environment.yml
index 655ea38..a87d9d0 100644
--- a/environment.yml
+++ b/environment.yml
@@ -3,7 +3,7 @@ channels:
- conda-forge
- defaults
dependencies:
- - python=3.8
+ - python=3.11
- Pillow>=5.2.0
- psutil>=5.0.0
- python-slugify>=1.2.1
diff --git a/kindlecomicconverter/KCC_gui.py b/kindlecomicconverter/KCC_gui.py
index 6f6f90b..689207a 100644
--- a/kindlecomicconverter/KCC_gui.py
+++ b/kindlecomicconverter/KCC_gui.py
@@ -112,13 +112,7 @@ class Icons:
self.CBZFormat = QtGui.QIcon()
self.CBZFormat.addPixmap(QtGui.QPixmap(":/Formats/icons/CBZ.png"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
self.EPUBFormat = QtGui.QIcon()
- self.EPUBFormat.addPixmap(QtGui.QPixmap(":/Formats/icons/EPUB.png"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
- self.KFXFormat = QtGui.QIcon()
- self.KFXFormat.addPixmap(QtGui.QPixmap(":/Formats/icons/KFX.png"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
- self.MOBIEPUBFormat = QtGui.QIcon()
- self.MOBIEPUBFormat.addPixmap(QtGui.QPixmap(":/Formats/icons/MOBI.png"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
- self.EPUB200MBFormat = QtGui.QIcon()
- self.EPUB200MBFormat.addPixmap(QtGui.QPixmap(":/Formats/icons/EPUB.png"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
+ self.EPUBFormat.addPixmap(QtGui.QPixmap(":/Formats/icons/EPUB.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.info = QtGui.QIcon()
self.info.addPixmap(QtGui.QPixmap(":/Status/icons/info.png"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
@@ -224,7 +218,8 @@ class WorkerThread(QtCore.QThread):
currentJobs = []
options.profile = GUI.profiles[str(GUI.deviceBox.currentText())]['Label']
- options.format = str(GUI.formatBox.currentText()).replace('/AZW3', '')
+ gui_current_format = GUI.formats[str(GUI.formatBox.currentText())]['format']
+ options.format = gui_current_format
if GUI.mangaBox.isChecked():
options.righttoleft = True
if GUI.rotateBox.checkState().value == 1:
@@ -280,7 +275,7 @@ class WorkerThread(QtCore.QThread):
return
self.errors = False
MW.addMessage.emit('Source: ' + job, 'info', False)
- if str(GUI.formatBox.currentText()) == 'CBZ':
+ if gui_current_format == 'CBZ':
MW.addMessage.emit('Creating CBZ files', 'info', False)
GUI.progress.content = 'Creating CBZ files'
else:
@@ -330,11 +325,11 @@ class WorkerThread(QtCore.QThread):
return
if not self.errors:
GUI.progress.content = ''
- if str(GUI.formatBox.currentText()) == 'CBZ':
+ if gui_current_format == 'CBZ':
MW.addMessage.emit('Creating CBZ files... Done!', 'info', True)
else:
MW.addMessage.emit('Creating EPUB files... Done!', 'info', True)
- if str(GUI.formatBox.currentText()) == 'MOBI/AZW3' or str(GUI.formatBox.currentText()) == 'MOBI+EPUB':
+ if 'MOBI' in gui_current_format:
MW.progressBarTick.emit('Creating MOBI files')
MW.progressBarTick.emit(str(len(outputPath) * 2 + 1))
MW.progressBarTick.emit('tick')
@@ -662,7 +657,7 @@ class KCCGUI(KCC_ui.Ui_mainWindow):
GUI.formatBox.setCurrentIndex(profile['DefaultFormat'])
if not GUI.webtoonBox.isChecked():
GUI.qualityBox.setEnabled(profile['PVOptions'])
- if str(GUI.formatBox.currentText()) == 'MOBI/AZW3':
+ if GUI.formats[str(GUI.formatBox.currentText())]['format'] == 'MOBI':
GUI.outputSplit.setEnabled(True)
else:
GUI.outputSplit.setEnabled(False)
@@ -744,7 +739,7 @@ class KCCGUI(KCC_ui.Ui_mainWindow):
self.addMessage('Target resolution is not set!', 'error')
self.needClean = True
return
- if str(GUI.formatBox.currentText()) == 'MOBI/AZW3' and not self.kindleGen:
+ if 'MOBI' in GUI.formats[str(GUI.formatBox.currentText())]['format'] and not self.kindleGen:
self.detectKindleGen()
if not self.kindleGen:
GUI.jobList.clear()
@@ -918,6 +913,16 @@ class KCCGUI(KCC_ui.Ui_mainWindow):
if self.windowSize == '0x0':
MW.resize(500, 500)
+ self.formats = { # text, icon, data/option_format
+ "MOBI/AZW3": {'icon': 'MOBI', 'format': 'MOBI'},
+ "EPUB": {'icon': 'EPUB', 'format': 'EPUB'},
+ "CBZ": {'icon': 'CBZ', 'format': 'CBZ'},
+ "EPUB (Calibre KFX)": {'icon': 'EPUB', 'format': 'KFX'},
+ "MOBI + EPUB": {'icon': 'MOBI', 'format': 'MOBI+EPUB'},
+ "EPUB (200MB limit)": {'icon': 'EPUB', 'format': 'EPUB-200MB'}
+ }
+
+
self.profiles = {
"Kindle Oasis 2/3": {'PVOptions': True, 'ForceExpert': False, 'DefaultFormat': 0,
'DefaultUpscale': True, 'Label': 'KO'},
@@ -1040,8 +1045,8 @@ class KCCGUI(KCC_ui.Ui_mainWindow):
self.sevenzip = True
else:
self.sevenzip = False
- self.addMessage('Add 7z to PATH!'
- ' Processing of archives will be disabled.', 'warning')
+ self.addMessage('Install 7z and add to PATH!!'
+ ' CBZ/CBR/ZIP/etc processing disabled.', 'warning')
self.detectKindleGen(True)
APP.messageFromOtherInstance.connect(self.handleMessage)
@@ -1082,9 +1087,8 @@ class KCCGUI(KCC_ui.Ui_mainWindow):
GUI.deviceBox.addItem(self.icons.deviceKobo, profile)
else:
GUI.deviceBox.addItem(self.icons.deviceKindle, profile)
- for f in ['MOBI/AZW3', 'EPUB', 'CBZ', 'KFX', 'MOBI+EPUB', 'EPUB-200MB']:
- format_prefix = f.replace('/AZW3', '').replace('+', '').replace('-', '')
- GUI.formatBox.addItem(eval('self.icons.' + format_prefix + 'Format'), f)
+ for f in self.formats:
+ GUI.formatBox.addItem(eval('self.icons.' + self.formats[f]['icon'] + 'Format'), f)
if self.lastDevice > GUI.deviceBox.count():
self.lastDevice = 0
if profilesGUI[self.lastDevice] == "Separator":
diff --git a/kindlecomicconverter/comic2ebook.py b/kindlecomicconverter/comic2ebook.py
index b26c839..be0b8bc 100755
--- a/kindlecomicconverter/comic2ebook.py
+++ b/kindlecomicconverter/comic2ebook.py
@@ -691,7 +691,9 @@ def getComicInfo(path, originalpath):
os.remove(xmlPath)
return
options.authors = []
- if defaultTitle:
+ if xml.data['Title']:
+ options.title = hescape(xml.data['Title'])
+ elif defaultTitle:
if xml.data['Series']:
options.title = hescape(xml.data['Series'])
if xml.data['Volume']:
diff --git a/kindlecomicconverter/metadata.py b/kindlecomicconverter/metadata.py
index b431be1..9d60616 100644
--- a/kindlecomicconverter/metadata.py
+++ b/kindlecomicconverter/metadata.py
@@ -34,7 +34,8 @@ class MetadataParser:
'Inkers': [],
'Colorists': [],
'Summary': '',
- 'Bookmarks': []}
+ 'Bookmarks': [],
+ 'Title': ''}
self.rawdata = None
self.format = None
if self.source.endswith('.xml') and os.path.exists(self.source):
@@ -58,6 +59,8 @@ class MetadataParser:
self.data['Number'] = self.rawdata.getElementsByTagName('Number')[0].firstChild.nodeValue
if len(self.rawdata.getElementsByTagName('Summary')) != 0:
self.data['Summary'] = self.rawdata.getElementsByTagName('Summary')[0].firstChild.nodeValue
+ if len(self.rawdata.getElementsByTagName('Title')) != 0:
+ self.data['Title'] = self.rawdata.getElementsByTagName('Title')[0].firstChild.nodeValue
for field in ['Writer', 'Penciller', 'Inker', 'Colorist']:
if len(self.rawdata.getElementsByTagName(field)) != 0:
for person in self.rawdata.getElementsByTagName(field)[0].firstChild.nodeValue.split(', '):
@@ -76,7 +79,8 @@ class MetadataParser:
for row in (['Series', self.data['Series']], ['Volume', self.data['Volume']],
['Number', self.data['Number']], ['Writer', ', '.join(self.data['Writers'])],
['Penciller', ', '.join(self.data['Pencillers'])], ['Inker', ', '.join(self.data['Inkers'])],
- ['Colorist', ', '.join(self.data['Colorists'])], ['Summary', self.data['Summary']]):
+ ['Colorist', ', '.join(self.data['Colorists'])], ['Summary', self.data['Summary']],
+ ['Title', self.data['Title']]):
if self.rawdata.getElementsByTagName(row[0]):
node = self.rawdata.getElementsByTagName(row[0])[0]
if row[1]:
@@ -97,7 +101,8 @@ class MetadataParser:
for row in (['Series', self.data['Series']], ['Volume', self.data['Volume']],
['Number', self.data['Number']], ['Writer', ', '.join(self.data['Writers'])],
['Penciller', ', '.join(self.data['Pencillers'])], ['Inker', ', '.join(self.data['Inkers'])],
- ['Colorist', ', '.join(self.data['Colorists'])], ['Summary', self.data['Summary']]):
+ ['Colorist', ', '.join(self.data['Colorists'])], ['Summary', self.data['Summary']],
+ ['Title', self.data['Title']]):
if row[1]:
main = doc.createElement(row[0])
root.appendChild(main)
diff --git a/requirements.txt b/requirements.txt
index 763b567..7898699 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -5,4 +5,4 @@ python-slugify>=1.2.1
raven>=6.0.0
# PyQt5-tools
mozjpeg-lossless-optimization>=1.1.2
-distro
\ No newline at end of file
+distro