Fix for #812
This commit is contained in:
parent
466af21548
commit
6f0b3bbda0
31
cps/comic.py
31
cps/comic.py
|
@ -24,21 +24,34 @@ import uploader
|
||||||
|
|
||||||
|
|
||||||
def extractCover(tmp_file_name, original_file_extension):
|
def extractCover(tmp_file_name, original_file_extension):
|
||||||
|
cover_data = None
|
||||||
if original_file_extension.upper() == '.CBZ':
|
if original_file_extension.upper() == '.CBZ':
|
||||||
cf = zipfile.ZipFile(tmp_file_name)
|
cf = zipfile.ZipFile(tmp_file_name)
|
||||||
compressed_name = cf.namelist()[0]
|
for name in cf.namelist():
|
||||||
cover_data = cf.read(compressed_name)
|
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':
|
elif original_file_extension.upper() == '.CBT':
|
||||||
cf = tarfile.TarFile(tmp_file_name)
|
cf = tarfile.TarFile(tmp_file_name)
|
||||||
compressed_name = cf.getnames()[0]
|
for name in cf.getnames():
|
||||||
cover_data = cf.extractfile(compressed_name).read()
|
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)
|
prefix = os.path.dirname(tmp_file_name)
|
||||||
|
if cover_data:
|
||||||
tmp_cover_name = prefix + '/cover' + os.path.splitext(compressed_name)[1]
|
tmp_cover_name = prefix + '/cover' + extension
|
||||||
image = open(tmp_cover_name, 'wb')
|
image = open(tmp_cover_name, 'wb')
|
||||||
image.write(cover_data)
|
image.write(cover_data)
|
||||||
image.close()
|
image.close()
|
||||||
|
else:
|
||||||
|
tmp_cover_name = None
|
||||||
return tmp_cover_name
|
return tmp_cover_name
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -99,14 +99,15 @@ kthoom.setSettings = function() {
|
||||||
};
|
};
|
||||||
|
|
||||||
var createURLFromArray = function(array, mimeType) {
|
var createURLFromArray = function(array, mimeType) {
|
||||||
var offset = array.byteOffset, len = array.byteLength;
|
var offset = array.byteOffset;
|
||||||
|
var len = array.byteLength;
|
||||||
var url;
|
var url;
|
||||||
var blob;
|
var blob;
|
||||||
|
|
||||||
if (mimeType === 'image/xml+svg') {
|
if (mimeType === 'image/xml+svg') {
|
||||||
const xmlStr = new TextDecoder('utf-8').decode(array);
|
const xmlStr = new TextDecoder('utf-8').decode(array);
|
||||||
return 'data:image/svg+xml;UTF-8,' + encodeURIComponent(xmlStr);
|
return 'data:image/svg+xml;UTF-8,' + encodeURIComponent(xmlStr);
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Move all this browser support testing to a common place
|
// TODO: Move all this browser support testing to a common place
|
||||||
// and do it just once.
|
// and do it just once.
|
||||||
|
@ -137,11 +138,13 @@ var createURLFromArray = function(array, mimeType) {
|
||||||
kthoom.ImageFile = function(file) {
|
kthoom.ImageFile = function(file) {
|
||||||
this.filename = file.filename;
|
this.filename = file.filename;
|
||||||
var fileExtension = file.filename.split(".").pop().toLowerCase();
|
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 === "jpg" || fileExtension === "jpeg") ? "image/jpeg" :
|
||||||
fileExtension === "gif" ? "image/gif" : fileExtension == 'svg' ? 'image/xml+svg' : undefined;
|
fileExtension === "gif" ? "image/gif" : fileExtension == 'svg' ? 'image/xml+svg' : undefined;
|
||||||
this.dataURI = createURLFromArray(file.fileData, mimeType);
|
if ( this.mimeType !== undefined) {
|
||||||
this.data = file;
|
this.dataURI = createURLFromArray(file.fileData, this.mimeType);
|
||||||
|
this.data = file;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -169,34 +172,42 @@ function loadFromArrayBuffer(ab) {
|
||||||
unarchiver.addEventListener(bitjs.archive.UnarchiveEvent.Type.PROGRESS,
|
unarchiver.addEventListener(bitjs.archive.UnarchiveEvent.Type.PROGRESS,
|
||||||
function(e) {
|
function(e) {
|
||||||
var percentage = e.currentBytesUnarchived / e.totalUncompressedBytesInArchive;
|
var percentage = e.currentBytesUnarchived / e.totalUncompressedBytesInArchive;
|
||||||
totalImages = e.totalFilesInArchive;
|
if (totalImages === 0) {
|
||||||
|
totalImages = e.totalFilesInArchive;
|
||||||
|
}
|
||||||
updateProgress(percentage *100);
|
updateProgress(percentage *100);
|
||||||
lastCompletion = percentage * 100;
|
lastCompletion = percentage * 100;
|
||||||
});
|
});
|
||||||
unarchiver.addEventListener(bitjs.archive.UnarchiveEvent.Type.EXTRACT,
|
unarchiver.addEventListener(bitjs.archive.UnarchiveEvent.Type.EXTRACT,
|
||||||
function(e) {
|
function(e) {
|
||||||
// convert DecompressedFile into a bunch of ImageFiles
|
// convert DecompressedFile into a bunch of ImageFiles
|
||||||
if (e.unarchivedFile) {
|
if (e.unarchivedFile) {
|
||||||
var f = e.unarchivedFile;
|
var f = e.unarchivedFile;
|
||||||
// add any new pages based on the filename
|
// add any new pages based on the filename
|
||||||
if (imageFilenames.indexOf(f.filename) === -1) {
|
if (imageFilenames.indexOf(f.filename) === -1) {
|
||||||
imageFilenames.push(f.filename);
|
var test = new kthoom.ImageFile(f);
|
||||||
imageFiles.push(new kthoom.ImageFile(f));
|
if ( test.mimeType !== undefined) {
|
||||||
// add thumbnails to the TOC list
|
imageFilenames.push(f.filename);
|
||||||
$("#thumbnails").append(
|
imageFiles.push(test);
|
||||||
"<li>" +
|
// add thumbnails to the TOC list
|
||||||
"<a data-page='" + imageFiles.length + "'>" +
|
$("#thumbnails").append(
|
||||||
"<img src='" + imageFiles[imageFiles.length - 1].dataURI + "'/>" +
|
"<li>" +
|
||||||
"<span>" + imageFiles.length + "</span>" +
|
"<a data-page='" + imageFiles.length + "'>" +
|
||||||
"</a>" +
|
"<img src='" + imageFiles[imageFiles.length - 1].dataURI + "'/>" +
|
||||||
"</li>"
|
"<span>" + imageFiles.length + "</span>" +
|
||||||
);
|
"</a>" +
|
||||||
|
"</li>"
|
||||||
|
);
|
||||||
|
// 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,
|
unarchiver.addEventListener(bitjs.archive.UnarchiveEvent.Type.FINISH,
|
||||||
function() {
|
function() {
|
||||||
|
|
|
@ -113,6 +113,7 @@ ZipLocalFile.prototype.unzip = function() {
|
||||||
info("ZIP v" + this.version + ", store only: " + this.filename + " (" + this.compressedSize + " bytes)");
|
info("ZIP v" + this.version + ", store only: " + this.filename + " (" + this.compressedSize + " bytes)");
|
||||||
currentBytesUnarchivedInFile = this.compressedSize;
|
currentBytesUnarchivedInFile = this.compressedSize;
|
||||||
currentBytesUnarchived += this.compressedSize;
|
currentBytesUnarchived += this.compressedSize;
|
||||||
|
this.fileData = zeroCompression(this.fileData, this.uncompressedSize);
|
||||||
}
|
}
|
||||||
// version == 20, compression method == 8 (DEFLATE)
|
// version == 20, compression method == 8 (DEFLATE)
|
||||||
else if (this.compressionMethod == 8) {
|
else if (this.compressionMethod == 8) {
|
||||||
|
@ -493,6 +494,16 @@ function inflateBlockData(bstream, hcLiteralTable, hcDistanceTable, buffer) {
|
||||||
return blockSize;
|
return blockSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function zeroCompression(compressedData, numDecompressedBytes) {
|
||||||
|
var bstream = new bitjs.io.BitStream(compressedData.buffer,
|
||||||
|
false /* rtl */,
|
||||||
|
compressedData.byteOffset,
|
||||||
|
compressedData.byteLength);
|
||||||
|
var buffer = new bitjs.io.ByteBuffer(numDecompressedBytes);
|
||||||
|
buffer.insertBytes(bstream.readBytes(numDecompressedBytes));
|
||||||
|
return buffer.data;
|
||||||
|
}
|
||||||
|
|
||||||
// {Uint8Array} compressedData A Uint8Array of the compressed file data.
|
// {Uint8Array} compressedData A Uint8Array of the compressed file data.
|
||||||
// compression method 8
|
// compression method 8
|
||||||
// deflate: http://tools.ietf.org/html/rfc1951
|
// deflate: http://tools.ietf.org/html/rfc1951
|
||||||
|
|
|
@ -170,7 +170,7 @@
|
||||||
replaceForm: function(html) {
|
replaceForm: function(html) {
|
||||||
var newForm;
|
var newForm;
|
||||||
var formId = this.$form.attr("id");
|
var formId = this.$form.attr("id");
|
||||||
if ( typeof(formId) !== "undefined") {
|
if ( typeof formId !== "undefined") {
|
||||||
newForm = $(html).find("#" + formId);
|
newForm = $(html).find("#" + formId);
|
||||||
} else {
|
} else {
|
||||||
newForm = $(html).find("form");
|
newForm = $(html).find("form");
|
||||||
|
|
Loading…
Reference in New Issue
Block a user