61 lines
1.9 KiB
JavaScript
61 lines
1.9 KiB
JavaScript
var os = require('os');
|
|
var fs = require('fs');
|
|
var fsx = require('fs-extra')
|
|
var Download = require('download');
|
|
var downloadStatus = require('download-status');
|
|
var crypto = require('crypto');
|
|
|
|
var cacheFolder = os.homedir() + '/.haxe_cache';
|
|
if(!fs.existsSync(cacheFolder)){
|
|
fs.mkdirSync(cacheFolder);
|
|
}
|
|
|
|
var getHash = function ( data ) {
|
|
var generator = crypto.createHash('sha1');
|
|
generator.update( data )
|
|
return generator.digest('hex')
|
|
}
|
|
|
|
function Cache(){
|
|
|
|
this.download = function(url, targetFolder, callback){
|
|
console.log(url);
|
|
var hash = getHash(url);
|
|
var ref = this;
|
|
if(fs.existsSync(cacheFolder + '/' + hash)){
|
|
console.log("using cached version");
|
|
ref.extract(hash,targetFolder,callback);
|
|
} else {
|
|
console.log("Downloading...")
|
|
Download(url,cacheFolder + '/' + hash,{ extract: true, strip: 1 })
|
|
.then(() => {
|
|
console.log('done!');
|
|
ref.extract(hash,targetFolder,callback);
|
|
})
|
|
.catch((err) => {
|
|
console.error(err + " : Unable to download or extract " + url);
|
|
callback(err);
|
|
});
|
|
/*Download({ extract: true, strip: 1 })
|
|
.get( url )
|
|
.dest( cacheFolder + '/' + hash )
|
|
.use(downloadStatus())
|
|
.run( function(err,files){
|
|
if( err ) {
|
|
console.error("Unable to download or extract " + url);
|
|
callback(err);
|
|
}
|
|
ref.extract(hash,targetFolder,callback);
|
|
});*/
|
|
}
|
|
}
|
|
|
|
this.extract = function(hash, targetFolder, callback){
|
|
var url = cacheFolder + '/' + hash;
|
|
fsx.copySync(url, targetFolder);
|
|
callback();
|
|
}
|
|
}
|
|
|
|
|
|
module.exports = Cache; |