2025-01-15 19:42:35 +01:00

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;