1
0
Fork 0
mirror of https://github.com/futurepress/epub.js.git synced 2025-10-03 14:59:18 +02:00
epub.js/fpjs/render/unarchiver.js
2013-01-26 21:01:14 -08:00

77 lines
No EOL
1.7 KiB
JavaScript

FP.Unarchiver = function(url, callback){
this.libPath = "fpjs/libs/";
this.zipUrl = url;
this.callback = callback;
this.loadLib(function(){
this.getZip(this.zipUrl);
}.bind(this));
}
FP.Unarchiver.prototype.loadLib = function(callback){
if(typeof(zip) != "undefined") callback();
//-- load script
FP.core.loadScript(this.libPath+"zip.js", function(){
//-- Tell zip where it is located
zip.workerScriptsPath = this.libPath;
callback();
}.bind(this));
}
FP.Unarchiver.prototype.getZip = function(zipUrl){
var xhr = new FP.core.loadFile(zipUrl);
xhr.succeeded = function(file) {
this.getEntries(file, this.toStorage.bind(this));
}.bind(this);
xhr.failed = this.failed;
xhr.start();
}
FP.Unarchiver.prototype.getEntries = function(file, callback){
zip.createReader(new zip.BlobReader(file), function(zipReader) {
zipReader.getEntries(callback);
}, this.failed);
}
FP.Unarchiver.prototype.failed = function(error){
console.log("Error:", error);
}
FP.Unarchiver.prototype.afterSaved = function(error){
this.callback();
}
FP.Unarchiver.prototype.toStorage = function(entries){
var timeout = 0,
delay = 20,
that = this,
count = entries.length;
function callback(){
count--;
if(count == 0) that.afterSaved();
}
entries.forEach(function(entry){
setTimeout(function(entry){
that.saveEntryFileToStorage(entry, callback);
}, timeout, entry);
timeout += delay;
});
console.log("time", timeout);
//entries.forEach(this.saveEntryFileToStorage.bind(this));
}
FP.Unarchiver.prototype.saveEntryFileToStorage = function(entry, callback){
var that = this;
entry.getData(new zip.BlobWriter(), function(blob) {
FP.storage.save(entry.filename, blob, callback);
});
}