Gil Pedersen 13 yıl önce
ebeveyn
işleme
22174ce179
1 değiştirilmiş dosya ile 7 ekleme ve 6 silme
  1. 7 6
      lib/uristream.js

+ 7 - 6
lib/uristream.js

@@ -44,9 +44,9 @@ function setupHttp(uri, options, dst) {
   var headers = extend(defaults, options.headers);
   var timeout = options.timeout || 60*1000;
   var probe = !!options.probe;
+  var offset = ~~options.start;
 
-  var retries = 10;
-  var metaEmitted = false;
+  var tries = 10;
   var fetch = probe ? request.head : request.get;
 
   function fetchHttp(start) {
@@ -62,7 +62,7 @@ function setupHttp(uri, options, dst) {
 
     function failOrRetry(err, temporary) {
       req.abort();
-      dst.emit('error', err);
+      return dst.emit('error', err);
     }
 
     function reqcleanup() {
@@ -82,13 +82,14 @@ function setupHttp(uri, options, dst) {
         return failOrRetry(new Error('Bad server response code: '+res.statusCode), res.statusCode >= 500 && res.statusCode !== 501);
 
       var size = res.headers['content-length'] ? parseInt(res.headers['content-length'], 10) : -1;
+      var filesize = (size >= 0) ? start + size - offset : -1;
 
       // transparently handle gzip responses
       var stream = res;
       if (res.headers['content-encoding'] === 'gzip' || res.headers['content-encoding'] === 'deflate') {
         unzip = zlib.createUnzip();
         stream = stream.pipe(inheritErrors(unzip));
-        size = -1;
+        filesize = -1;
       }
 
       // pipe it to self
@@ -138,13 +139,13 @@ function setupHttp(uri, options, dst) {
             mimetype = typeparts[1].toLowerCase(),
             modified = res.headers['last-modified'] ? new Date(res.headers['last-modified']) : null;
 
-        dst.meta = {url:url.format(req.uri), mime:mimetype, size:start+size, modified:modified};
+        dst.meta = {url:url.format(req.uri), mime:mimetype, size:filesize, modified:modified};
         dst.emit('meta', dst.meta);
       }
     }
   }
 
-  fetchHttp(options.start || 0);
+  fetchHttp(offset);
 }
 
 function UriFetchStream(uri, options) {