diff --git a/README.md b/README.md
index 9f62e71..4441ed4 100644
--- a/README.md
+++ b/README.md
@@ -47,13 +47,14 @@ You can find the latest released binary at the following links:
### Important tips:
* Use high quality source files. **This little detail have a major impact on the final result.**
* Read tooltip of _High/Ultra quality_ option. There are many important informations there.
+* **Uploading with Calibre will work only if file will not be modified by any of Calibre converters.**
* When converting images smaller than device resolution remember to enable upscaling.
* Panel View (auto zooming every part of page) can be disabled directly on Kindle. There is no KCC option to do that.
* If you're converting color images and the end result is not satisfactory, experiment with gamma correction option (check 1.0 setting first).
* Check our [wiki](https://github.com/ciromattia/kcc/wiki/Other-devices) for a list of tested Non-Kindle E-Readers.
* The first image found will be set as the comic's cover.
* All files/directories will be added to EPUB in alphabetical order.
-* Output MOBI file should be uploaded via USB. Other methods might corrupt it.
+* ComicRack metadata will be parsed only if they are saved in *ComicInfo.xml* file.
### GUI
diff --git a/kcc/comic2ebook.py b/kcc/comic2ebook.py
index 449abbc..52bc833 100755
--- a/kcc/comic2ebook.py
+++ b/kcc/comic2ebook.py
@@ -32,6 +32,7 @@ import string
from shutil import move, copyfile, copytree, rmtree, make_archive
from optparse import OptionParser, OptionGroup
from multiprocessing import Pool, freeze_support
+from xml.dom.minidom import parse
try:
from PyQt4 import QtCore
except ImportError:
@@ -216,9 +217,10 @@ def buildOPF(dstdir, title, filelist, cover=None):
"xmlns:dc=\"http://purl.org/dc/elements/1.1/\">\n",
"", title.encode('utf-8'), "\n",
"en-US\n",
- "", options.uuid, "\n",
- "KCC\n",
- "\n",
+ "", options.uuid, "\n"])
+ for author in options.authors:
+ f.writelines(["", author.encode('utf-8'), "\n"])
+ f.writelines(["\n",
"\n",
"\n",
"\n",
@@ -573,6 +575,47 @@ def getWorkFolder(afile):
return path
+def checkComicInfo(path):
+ xmlPath = os.path.join(path, 'ComicInfo.xml')
+ options.authors = ['KCC']
+ if os.path.exists(xmlPath):
+ try:
+ xml = parse(xmlPath)
+ except StandardError:
+ os.remove(xmlPath)
+ return
+ options.authors = []
+ if options.title == 'defaulttitle':
+ if len(xml.getElementsByTagName('Series')) != 0:
+ options.title = xml.getElementsByTagName('Series')[0].firstChild.nodeValue
+ if len(xml.getElementsByTagName('Volume')) != 0:
+ options.title += ' V' + xml.getElementsByTagName('Volume')[0].firstChild.nodeValue
+ if len(xml.getElementsByTagName('Number')) != 0:
+ options.title += ' #' + xml.getElementsByTagName('Number')[0].firstChild.nodeValue
+ if len(xml.getElementsByTagName('Writer')) != 0:
+ authorsTemp = string.split(xml.getElementsByTagName('Writer')[0].firstChild.nodeValue, ', ')
+ for author in authorsTemp:
+ options.authors.append(author)
+ if len(xml.getElementsByTagName('Penciller')) != 0:
+ authorsTemp = string.split(xml.getElementsByTagName('Penciller')[0].firstChild.nodeValue, ', ')
+ for author in authorsTemp:
+ options.authors.append(author)
+ if len(xml.getElementsByTagName('Inker')) != 0:
+ authorsTemp = string.split(xml.getElementsByTagName('Inker')[0].firstChild.nodeValue, ', ')
+ for author in authorsTemp:
+ options.authors.append(author)
+ if len(xml.getElementsByTagName('Colorist')) != 0:
+ authorsTemp = string.split(xml.getElementsByTagName('Colorist')[0].firstChild.nodeValue, ', ')
+ for author in authorsTemp:
+ options.authors.append(author)
+ if len(options.authors) > 0:
+ options.authors = list(set(options.authors))
+ options.authors.sort()
+ else:
+ options.authors = ['KCC']
+ os.remove(xmlPath)
+
+
def slugify(value):
# Normalizes string, converts to lowercase, removes non-alpha characters and converts spaces to hyphens.
import unicodedata
@@ -853,6 +896,7 @@ def main(argv=None, qtGUI=None):
parser.print_help()
return
path = getWorkFolder(args[0])
+ checkComicInfo(path + "/OEBPS/Images/")
if options.webtoon:
if GUI:
GUI.emit(QtCore.SIGNAL("progressBarTick"), 'status', 'Splitting images')
@@ -880,18 +924,18 @@ def main(argv=None, qtGUI=None):
else:
GUI.emit(QtCore.SIGNAL("progressBarTick"), 'status', 'Compressing EPUB files')
GUI.emit(QtCore.SIGNAL("progressBarTick"), len(tomes))
+ if options.title == 'defaulttitle':
+ if os.path.isdir(args[0]):
+ options.title = os.path.basename(args[0])
+ else:
+ options.title = os.path.splitext(os.path.basename(args[0]))[0]
+ options.baseTitle = options.title
for tome in tomes:
if GUI:
GUI.emit(QtCore.SIGNAL("progressBarTick"))
- if os.path.isdir(args[0]):
- barePath = os.path.basename(args[0])
- else:
- barePath = os.path.splitext(os.path.basename(args[0]))[0]
if len(tomes) > 1:
tomeNumber += 1
- options.title = barePath + ' ' + str(tomeNumber)
- elif options.title == 'defaulttitle':
- options.title = barePath
+ options.title = options.baseTitle + ' [' + str(tomeNumber) + '/' + str(len(tomes)) + ']'
if options.cbzoutput:
# if CBZ output wanted, compress all images and return filepath
print "\nCreating CBZ file..."