diff --git a/cps/comic.py b/cps/comic.py
index 05ffef9b..91cb325d 100644
--- a/cps/comic.py
+++ b/cps/comic.py
@@ -24,21 +24,34 @@ import uploader
def extractCover(tmp_file_name, original_file_extension):
+ cover_data = None
if original_file_extension.upper() == '.CBZ':
cf = zipfile.ZipFile(tmp_file_name)
- compressed_name = cf.namelist()[0]
- cover_data = cf.read(compressed_name)
+ for name in cf.namelist():
+ ext = os.path.splitext(name)
+ if len(ext) > 1:
+ extension = ext[1].lower()
+ if extension == '.jpg':
+ cover_data = cf.read(name)
+ break
elif original_file_extension.upper() == '.CBT':
cf = tarfile.TarFile(tmp_file_name)
- compressed_name = cf.getnames()[0]
- cover_data = cf.extractfile(compressed_name).read()
+ for name in cf.getnames():
+ ext = os.path.splitext(name)
+ if len(ext) > 1:
+ extension = ext[1].lower()
+ if extension == '.jpg':
+ cover_data = cf.extractfile(name).read()
+ break
prefix = os.path.dirname(tmp_file_name)
-
- tmp_cover_name = prefix + '/cover' + os.path.splitext(compressed_name)[1]
- image = open(tmp_cover_name, 'wb')
- image.write(cover_data)
- image.close()
+ if cover_data:
+ tmp_cover_name = prefix + '/cover' + extension
+ image = open(tmp_cover_name, 'wb')
+ image.write(cover_data)
+ image.close()
+ else:
+ tmp_cover_name = None
return tmp_cover_name
diff --git a/cps/static/js/kthoom.js b/cps/static/js/kthoom.js
index 6a107b9a..49ceae42 100644
--- a/cps/static/js/kthoom.js
+++ b/cps/static/js/kthoom.js
@@ -106,7 +106,7 @@ var createURLFromArray = function(array, mimeType) {
if (mimeType === 'image/xml+svg') {
const xmlStr = new TextDecoder('utf-8').decode(array);
return 'data:image/svg+xml;UTF-8,' + encodeURIComponent(xmlStr);
- }
+ }
// TODO: Move all this browser support testing to a common place
// and do it just once.
@@ -137,11 +137,13 @@ var createURLFromArray = function(array, mimeType) {
kthoom.ImageFile = function(file) {
this.filename = file.filename;
var fileExtension = file.filename.split(".").pop().toLowerCase();
- var mimeType = fileExtension === "png" ? "image/png" :
+ this.mimeType = fileExtension === "png" ? "image/png" :
(fileExtension === "jpg" || fileExtension === "jpeg") ? "image/jpeg" :
fileExtension === "gif" ? "image/gif" : fileExtension == 'svg' ? 'image/xml+svg' : undefined;
- this.dataURI = createURLFromArray(file.fileData, mimeType);
- this.data = file;
+ if ( this.mimeType !== undefined) {
+ this.dataURI = createURLFromArray(file.fileData, this.mimeType);
+ this.data = file;
+ }
};
@@ -169,34 +171,42 @@ function loadFromArrayBuffer(ab) {
unarchiver.addEventListener(bitjs.archive.UnarchiveEvent.Type.PROGRESS,
function(e) {
var percentage = e.currentBytesUnarchived / e.totalUncompressedBytesInArchive;
- totalImages = e.totalFilesInArchive;
+ if (totalImages === 0) {
+ totalImages = e.totalFilesInArchive;
+ }
updateProgress(percentage *100);
lastCompletion = percentage * 100;
});
unarchiver.addEventListener(bitjs.archive.UnarchiveEvent.Type.EXTRACT,
function(e) {
- // convert DecompressedFile into a bunch of ImageFiles
+ // convert DecompressedFile into a bunch of ImageFiles
if (e.unarchivedFile) {
var f = e.unarchivedFile;
// add any new pages based on the filename
if (imageFilenames.indexOf(f.filename) === -1) {
- imageFilenames.push(f.filename);
- imageFiles.push(new kthoom.ImageFile(f));
- // add thumbnails to the TOC list
- $("#thumbnails").append(
- "
" +
- "" +
- "" +
- "" + imageFiles.length + "" +
- "" +
- ""
- );
+ var test = new kthoom.ImageFile(f);
+ if ( test.mimeType !== undefined) {
+ imageFilenames.push(f.filename);
+ imageFiles.push(test);
+ // add thumbnails to the TOC list
+ $("#thumbnails").append(
+ "" +
+ "" +
+ "" +
+ "" + imageFiles.length + "" +
+ "" +
+ ""
+ );
+ // display first page if we haven't yet
+ if (imageFiles.length === currentImage + 1) {
+ updatePage(lastCompletion);
+ }
+ }
+ else {
+ totalImages--;
+ }
}
}
- // display first page if we haven't yet
- if (imageFiles.length === currentImage + 1) {
- updatePage(lastCompletion);
- }
});
unarchiver.addEventListener(bitjs.archive.UnarchiveEvent.Type.FINISH,
function() {
diff --git a/cps/static/js/unzip.js b/cps/static/js/unzip.js
index f0370f53..2938c834 100644
--- a/cps/static/js/unzip.js
+++ b/cps/static/js/unzip.js
@@ -68,23 +68,23 @@ var ZipLocalFile = function(bstream) {
this.filename = bstream.readString(this.fileNameLength);
}
- info("Zip Local File Header:");
- info(" version=" + this.version);
- info(" general purpose=" + this.generalPurpose);
- info(" compression method=" + this.compressionMethod);
- info(" last mod file time=" + this.lastModFileTime);
- info(" last mod file date=" + this.lastModFileDate);
- info(" crc32=" + this.crc32);
- info(" compressed size=" + this.compressedSize);
- info(" uncompressed size=" + this.uncompressedSize);
- info(" file name length=" + this.fileNameLength);
- info(" extra field length=" + this.extraFieldLength);
- info(" filename = '" + this.filename + "'");
+ console.log("Zip Local File Header:");
+ console.log(" version=" + this.version);
+ console.log(" general purpose=" + this.generalPurpose);
+ console.log(" compression method=" + this.compressionMethod);
+ console.log(" last mod file time=" + this.lastModFileTime);
+ console.log(" last mod file date=" + this.lastModFileDate);
+ console.log(" crc32=" + this.crc32);
+ console.log(" compressed size=" + this.compressedSize);
+ console.log(" uncompressed size=" + this.uncompressedSize);
+ console.log(" file name length=" + this.fileNameLength);
+ console.log(" extra field length=" + this.extraFieldLength);
+ console.log(" filename = '" + this.filename + "'");
this.extraField = null;
if (this.extraFieldLength > 0) {
this.extraField = bstream.readString(this.extraFieldLength);
- info(" extra field=" + this.extraField);
+ console.log(" extra field=" + this.extraField);
}
// read in the compressed data
@@ -110,13 +110,13 @@ ZipLocalFile.prototype.unzip = function() {
// Zip Version 1.0, no compression (store only)
if (this.compressionMethod == 0 ) {
- info("ZIP v" + this.version + ", store only: " + this.filename + " (" + this.compressedSize + " bytes)");
+ console.log("ZIP v" + this.version + ", store only: " + this.filename + " (" + this.compressedSize + " bytes)");
currentBytesUnarchivedInFile = this.compressedSize;
currentBytesUnarchived += this.compressedSize;
}
// version == 20, compression method == 8 (DEFLATE)
else if (this.compressionMethod == 8) {
- info("ZIP v2.0, DEFLATE: " + this.filename + " (" + this.compressedSize + " bytes)");
+ console.log("ZIP v2.0, DEFLATE: " + this.filename + " (" + this.compressedSize + " bytes)");
this.fileData = inflate(this.fileData, this.uncompressedSize);
}
else {
@@ -164,7 +164,7 @@ var unzip = function(arrayBuffer) {
// archive extra data record
if (bstream.peekNumber(4) == zArchiveExtraDataSignature) {
- info(" Found an Archive Extra Data Signature");
+ console.log(" Found an Archive Extra Data Signature");
// skipping this record for now
bstream.readNumber(4);
@@ -175,7 +175,7 @@ var unzip = function(arrayBuffer) {
// central directory structure
// TODO: handle the rest of the structures (Zip64 stuff)
if (bstream.peekNumber(4) == zCentralFileHeaderSignature) {
- info(" Found a Central File Header");
+ console.log(" Found a Central File Header");
// read all file headers
while (bstream.peekNumber(4) == zCentralFileHeaderSignature) {
@@ -205,7 +205,7 @@ var unzip = function(arrayBuffer) {
// digital signature
if (bstream.peekNumber(4) == zDigitalSignatureSignature) {
- info(" Found a Digital Signature");
+ console.log(" Found a Digital Signature");
bstream.readNumber(4);
var sizeOfSignature = bstream.readNumber(2);