From 1561a4abdf258a1d0d482b0f48a59e6aa59fae04 Mon Sep 17 00:00:00 2001 From: Ozzieisaacs Date: Tue, 5 Mar 2019 20:19:02 +0100 Subject: [PATCH] Comic improvments --- cps/comic.py | 31 +++++++++++++++++------- cps/static/js/kthoom.js | 52 ++++++++++++++++++++++++----------------- cps/static/js/unzip.js | 36 ++++++++++++++-------------- 3 files changed, 71 insertions(+), 48 deletions(-) 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);