Bläddra i källkod

abort retry if the resource has changed

Gil Pedersen 13 år sedan
förälder
incheckning
9ec0fe9752
2 ändrade filer med 16 tillägg och 8 borttagningar
  1. 14 7
      lib/uristream.js
  2. 2 1
      package.json

+ 14 - 7
lib/uristream.js

@@ -5,6 +5,7 @@ var util = require('util'),
 
 var request = require('request'),
     extend = require('xtend'),
+    equal = require('deep-equal'),
     oncemore = require('./oncemore'),
     debug = require('debug')('hls:uristream');
 
@@ -150,13 +151,19 @@ function setupHttp(uri, options, dst) {
         });
       }
 
-      if (!dst.meta) {
-        // extract meta information from header
-        var typeparts = /^(.+?\/.+?)(?:;\w*.*)?$/.exec(res.headers['content-type']) || [null, 'application/octet-stream'],
-            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:filesize, modified:modified};
+      // extract meta information from header
+      var typeparts = /^(.+?\/.+?)(?:;\w*.*)?$/.exec(res.headers['content-type']) || [null, 'application/octet-stream'],
+          mimetype = typeparts[1].toLowerCase(),
+          modified = res.headers['last-modified'] ? new Date(res.headers['last-modified']) : null;
+
+      var meta = { url:url.format(req.uri), mime:mimetype, size:filesize, modified:modified };
+      if (dst.meta) {
+        if (!equal(dst.meta, meta)) {
+          tries = 0;
+          failOrRetry(new Error('File has changed'));
+        }
+      } else  {
+        dst.meta = meta;
         dst.emit('meta', dst.meta);
       }
     }

+ 2 - 1
package.json

@@ -30,7 +30,8 @@
     "commander": "~1.1.1",
     "readable-stream": "~1.0.0",
     "request": "~2.16.0",
-    "xtend": "~2.0.3"
+    "xtend": "~2.0.3",
+    "deep-equal": "0.0.0"
   },
   "devDependencies": {
     "mocha": "~1.7.4",