var $ = require("cheerio"); var request = require('request'); var agent = require("socks5-http-client/lib/Agent"); var fs = require('fs'); var ListHandler = require('./listhandler.js'); require('./config.js'); var ComicHandler = { NowIndex:0, ListTree:[], start:function(fromComicID){ if(!this.ListTree.length) this.ListTree = ListLib.tree; if(fromComicID){ for(var i in this.ListTree){ if(this.ListTree[i]==fromComicID); this.NowIndex = i; break; } } if(this.NowIndex==this.ListTree.length){ console.log('Comic Download Complete'); }else{ var comicID = this.ListTree[this.NowIndex]; new ComicSaver(comicID); this.NowIndex++; } } } var ComicSaver = function(comicID){ var ep = 0; var nowEp = 0; var imgLength = 0; var imgDownloaded = 0; var retryTimes = {}; var comicOBJ = ListLib[comicID]; if(!comicOBJ){ console.log('ComicID '+comicID+' wrong!'); return; } console.log('[BEGIN] Start Download Comic [ '+comicID+' ]'); console.log('Creating directory for [ '+comicOBJ.name+' ]'); var comicPath = './save/'+comicOBJ.id+'-'+comicOBJ.name+'/'; if(!fs.existsSync(comicPath)){ fs.mkdirSync(comicPath); } var options = { url:ApiURL.comicEp.replace('{ComicID}',comicOBJ.id) } console.log('Analysing......'); request(options,function(error,response,body){ if(!error && body){ var data = JSON.parse(body); ep = data['ep_count']; nowEp = 1; console.log('Analysie Success!'); console.log('Comic [ '+comicOBJ.id+' ] has [ '+ep+' ] EP!!!'); downloadEP(); }else{ console.log('Comic [ '+comicOBJ.id+' ] analysie error!!!'); } }); function downloadEP(){ if(nowEp>ep){ finished(); return; } var opt = { url:ApiURL.comic.replace('{ComicID}',comicOBJ.id).replace('{EP}',nowEp) } console.log('Comic [ '+comicOBJ.id+' ] start download!!!'); var epPath = comicPath+nowEp+'/'; if(!fs.existsSync(epPath)){ fs.mkdirSync(epPath); } request(opt,function(error,response,body){ if(!error && body){ var data = JSON.parse(body); imgLength = data.length; console.log('Comic [ '+comicOBJ.id+' ] EP [ '+nowEp+' ] has [ '+imgLength+' ] images!!!'); console.log('Comic [ '+comicOBJ.id+' ] EP [ '+nowEp+' ] images start download!!!'); for(var i in data){ retryTimes[data[i]['url']] = 0; saveImg(data[i]['url']); } }else{ console.log(error); console.log(body); console.log('Comic [ '+comicOBJ.id+' ] download error!!!'); } }); } function saveImg(imgSrc){ if(!imgSrc){ console.log('Comic [ '+comicOBJ.id+' ] image download error!!!'); console.log('Image [ '+imgSrc+' ] error'); } var splitURL = imgSrc.split('/'); var opt = { url:imgSrc, encoding:'binary' } request(opt,function(error,response,body){ if(!error && body){ var data = body; var name = splitURL[splitURL.length-1]; var savePath = comicPath+nowEp+'/'+name; fs.writeFileSync(savePath,data,'binary'); imgDownloaded++; if(imgDownloaded==(imgLength-1)){ nowEp++; downloadEP(); } }else{ if(retryTimes[imgSrc]==3){ console.log('Comic [ '+comicOBJ.id+' ] image download error!!!'); console.log('Image [ '+imgSrc+' ] error'); }else{ retryTimes[imgSrc]++; saveImg(imgSrc); console.log('Image [ '+imgSrc+' ] redownload!'); } } }); } function finished(){ console.log('[FINISH] Comic [ '+comicOBJ.id+' ] All File Downloaded!!!'); } } module.exports = ComicHandler;