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; |