|
@@ -10,123 +10,162 @@ require('./config.js');
|
|
|
var ComicHandler = {
|
|
|
NowIndex:0,
|
|
|
ListTree:[],
|
|
|
- start:function(fromComicID){
|
|
|
+ start:function(fromComic){
|
|
|
+ // console.log(this);
|
|
|
+ // return;
|
|
|
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;
|
|
|
+ var fromEp = 1;
|
|
|
+ if(fromComic){
|
|
|
+ var fromComicID = fromComic.id;
|
|
|
+ if(fromComicID){
|
|
|
+ for(var i in this.ListTree){
|
|
|
+ if(this.ListTree[i]==fromComicID){
|
|
|
+ this.NowIndex = i;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
+ if(fromComic.ep) fromEp = fromComic.ep;
|
|
|
}
|
|
|
if(this.NowIndex==this.ListTree.length){
|
|
|
console.log('Comic Download Complete');
|
|
|
}else{
|
|
|
var comicID = this.ListTree[this.NowIndex];
|
|
|
- new ComicSaver(comicID);
|
|
|
+ new ComicSaver(comicID,fromEp);
|
|
|
this.NowIndex++;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-var ComicSaver = function(comicID){
|
|
|
- var ep = 0;
|
|
|
- var nowEp = 0;
|
|
|
- var imgLength = 0;
|
|
|
- var imgDownloaded = 0;
|
|
|
- var retryTimes = {};
|
|
|
+var ComicSaver = function(comicID,fromEp){
|
|
|
+ var _this=this;
|
|
|
+ _this.ep = 0;
|
|
|
+ _this.nowEp = 0;
|
|
|
+ _this.imgLength = 0;
|
|
|
+ _this.imgDownloaded = 0;
|
|
|
+ _this.retryTimes = {};
|
|
|
+ _this.imgLib = [];
|
|
|
|
|
|
- var comicOBJ = ListLib[comicID];
|
|
|
- if(!comicOBJ){
|
|
|
+ // console.log(this);
|
|
|
+ // return;
|
|
|
+ _this.comicOBJ = ListLib[comicID];
|
|
|
+ if(!_this.comicOBJ){
|
|
|
console.log('ComicID '+comicID+' wrong!');
|
|
|
return;
|
|
|
}
|
|
|
-
|
|
|
+ console.log('----------------------------------------------');
|
|
|
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);
|
|
|
+ console.log('Creating directory for [ '+_this.comicOBJ.name+' ]');
|
|
|
+ _this.comicPath = './save/'+_this.comicOBJ.id+'-'+_this.comicOBJ.name+'/';
|
|
|
+ if(!fs.existsSync(_this.comicPath)){
|
|
|
+ fs.mkdirSync(_this.comicPath);
|
|
|
}
|
|
|
|
|
|
var options = {
|
|
|
- url:ApiURL.comicEp.replace('{ComicID}',comicOBJ.id)
|
|
|
+ url:ApiURL.comicEp.replace('{ComicID}',_this.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;
|
|
|
+ if(!error && body && response.statusCode==200){
|
|
|
+ var data;
|
|
|
+ try{
|
|
|
+ data = JSON.parse(body);
|
|
|
+ }catch(e){
|
|
|
+ console.log(e,body);
|
|
|
+ new ComicSaver(ComicID,fromEp);
|
|
|
+ delete _this;
|
|
|
+ return;
|
|
|
+ // downloadEP();
|
|
|
+ }
|
|
|
+ _this.ep = data['ep_count'];
|
|
|
+ _this.nowEp = fromEp?fromEp:1;
|
|
|
console.log('Analysie Success!');
|
|
|
- console.log('Comic [ '+comicOBJ.id+' ] has [ '+ep+' ] EP!!!');
|
|
|
+ console.log('Comic [ '+_this.comicOBJ.id+' ] has [ '+_this.ep+' ] EP!!!');
|
|
|
downloadEP();
|
|
|
}else{
|
|
|
- console.log('Comic [ '+comicOBJ.id+' ] analysie error!!!');
|
|
|
+ console.log('Comic [ '+_this.comicOBJ.id+' ] analysie error!!! Retry!!!');
|
|
|
+ new ComicSaver(ComicID,fromEp);
|
|
|
+ delete _this;
|
|
|
+ return;
|
|
|
}
|
|
|
});
|
|
|
|
|
|
function downloadEP(){
|
|
|
- if(nowEp>ep){
|
|
|
+ if(_this.nowEp>_this.ep){
|
|
|
finished();
|
|
|
return;
|
|
|
}
|
|
|
var opt = {
|
|
|
- url:ApiURL.comic.replace('{ComicID}',comicOBJ.id).replace('{EP}',nowEp)
|
|
|
+ url:ApiURL.comic.replace('{ComicID}',_this.comicOBJ.id).replace('{EP}',_this.nowEp)
|
|
|
}
|
|
|
- console.log('Comic [ '+comicOBJ.id+' ] start download!!!');
|
|
|
- var epPath = comicPath+nowEp+'/';
|
|
|
+ console.log('Comic [ '+_this.comicOBJ.id+' ] EP [ '+_this.nowEp+' ]start download!!!');
|
|
|
+ var epPath = _this.comicPath+_this.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!!!');
|
|
|
+ // console.log(body);
|
|
|
+ if(!error && body && response.statusCode==200){
|
|
|
+ var data;
|
|
|
+ try{
|
|
|
+ data = JSON.parse(body);
|
|
|
+ }catch(e){
|
|
|
+ console.log(e,body);
|
|
|
+ downloadEP();
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ _this.imgLength = data.length;
|
|
|
+ _this.imgDownloaded = 0;
|
|
|
+ console.log('Comic [ '+_this.comicOBJ.id+' ] EP [ '+_this.nowEp+' ] has [ '+_this.imgLength+' ] images!!!');
|
|
|
+ console.log('Comic [ '+_this.comicOBJ.id+' ] EP [ '+_this.nowEp+' ] images start download!!!');
|
|
|
for(var i in data){
|
|
|
- retryTimes[data[i]['url']] = 0;
|
|
|
- saveImg(data[i]['url']);
|
|
|
+ _this.retryTimes[data[i]['url']] = 0;
|
|
|
+ // saveImg(data[i]['url']);
|
|
|
+ _this.imgLib.push(data[i]['url']);
|
|
|
}
|
|
|
+ saveImg();
|
|
|
}else{
|
|
|
- console.log(error);
|
|
|
- console.log(body);
|
|
|
- console.log('Comic [ '+comicOBJ.id+' ] download error!!!');
|
|
|
+ console.log('Comic [ '+_this.comicOBJ.id+' ] EP [ '+_this.nowEp+' ] download error!!!Retry!!!');
|
|
|
+ downloadEP();
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
|
|
|
- function saveImg(imgSrc){
|
|
|
+ function saveImg(){
|
|
|
+ var imgSrc = _this.imgLib[_this.imgDownloaded];
|
|
|
if(!imgSrc){
|
|
|
- console.log('Comic [ '+comicOBJ.id+' ] image download error!!!');
|
|
|
+ console.log('Comic [ '+_this.comicOBJ.id+' ] image download error!!!');
|
|
|
console.log('Image [ '+imgSrc+' ] error');
|
|
|
}
|
|
|
var splitURL = imgSrc.split('/');
|
|
|
var opt = {
|
|
|
url:imgSrc,
|
|
|
- encoding:'binary'
|
|
|
+ encoding:'binary',
|
|
|
+ timeout:6000
|
|
|
}
|
|
|
request(opt,function(error,response,body){
|
|
|
if(!error && body){
|
|
|
var data = body;
|
|
|
var name = splitURL[splitURL.length-1];
|
|
|
- var savePath = comicPath+nowEp+'/'+name;
|
|
|
+ var savePath = _this.comicPath+_this.nowEp+'/'+name;
|
|
|
fs.writeFileSync(savePath,data,'binary');
|
|
|
- imgDownloaded++;
|
|
|
- if(imgDownloaded==(imgLength-1)){
|
|
|
- nowEp++;
|
|
|
+ data=null;
|
|
|
+ _this.imgDownloaded++;
|
|
|
+ if(_this.imgDownloaded==_this.imgLength){
|
|
|
+ _this.nowEp++;
|
|
|
downloadEP();
|
|
|
+ }else{
|
|
|
+ saveImg();
|
|
|
}
|
|
|
}else{
|
|
|
- if(retryTimes[imgSrc]==3){
|
|
|
- console.log('Comic [ '+comicOBJ.id+' ] image download error!!!');
|
|
|
+ if(_this.retryTimes[imgSrc]==3){
|
|
|
+ console.log('Comic [ '+_this.comicOBJ.id+' ] image download error!!!');
|
|
|
console.log('Image [ '+imgSrc+' ] error');
|
|
|
}else{
|
|
|
- retryTimes[imgSrc]++;
|
|
|
- saveImg(imgSrc);
|
|
|
+ _this.retryTimes[imgSrc]++;
|
|
|
+ saveImg();
|
|
|
console.log('Image [ '+imgSrc+' ] redownload!');
|
|
|
}
|
|
|
|
|
@@ -135,7 +174,10 @@ var ComicSaver = function(comicID){
|
|
|
}
|
|
|
|
|
|
function finished(){
|
|
|
- console.log('[FINISH] Comic [ '+comicOBJ.id+' ] All File Downloaded!!!');
|
|
|
+ console.log('[FINISH] Comic [ '+_this.comicOBJ.id+' ] All File Downloaded!!!');
|
|
|
+ console.log('----------------------------------------------');
|
|
|
+ delete _this;
|
|
|
+ ComicHandler.start();
|
|
|
}
|
|
|
}
|
|
|
|