Browse Source

Fix here and there~

HonorLee 8 years ago
parent
commit
d6876f426e
2 changed files with 97 additions and 54 deletions
  1. 95 53
      comichandler.js
  2. 2 1
      sniffer.js

+ 95 - 53
comichandler.js

@@ -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();
     }
 }
 

+ 2 - 1
sniffer.js

@@ -9,6 +9,7 @@ require('./config.js');
 
 
 var loadCategory = 12;
+var startComic = {id:6313,ep:1};
 
 var CheckLibsTimer = setInterval(checkLibs,1000);
 setInterval(function(){},1000000);
@@ -66,7 +67,7 @@ function getTempLib(){
 function checkLibs(){
     if(CategoryLib && ListLib){
         clearInterval(CheckLibsTimer);
-        ComicHandler.start();
+        ComicHandler.start(startComic);
     }
 }