js: Use ReadableBlobStream module to stream chunks from file system to
display.

Change-Id: Ibaca1342e396a6d124dd2ceb30c745f4a99b7d83
diff --git a/js/package.json b/js/package.json
index 2f579a7..d7cd5c9 100644
--- a/js/package.json
+++ b/js/package.json
@@ -8,6 +8,7 @@
   "dependencies": {
     "domready": "~1.0.8",
     "format": "~0.2.1",
+    "readable-blob-stream": "0.0.0",
     "inherits": "~2.0.1"
   },
   "devDependencies": {
diff --git a/js/src/file-emitter.js b/js/src/file-emitter.js
index b31d522..c66df5d 100644
--- a/js/src/file-emitter.js
+++ b/js/src/file-emitter.js
@@ -5,6 +5,7 @@
 var EE = require('events').EventEmitter;
 var format = require('format');
 var inherits = require('inherits');
+var ReadableBlobStream = require('readable-blob-stream');
 
 module.exports = FileEmitter;
 
@@ -13,7 +14,6 @@
 
   // TODO(nlacasse): Consider making these an argument to FileEmitter;
   this._allowedTypes = ['audio', 'image', 'video'];
-  this._maxSize = 10 * 1000 * 1000; // 10MB
 
   input.addEventListener('change', this._onFileChange.bind(this), false);
 }
@@ -46,27 +46,10 @@
     return;
   }
 
-  // TODO(nlacasse): Consider removing the file size limit.
-  if (file.size > this._maxSize) {
-    this.emit('error', format('File too large.'));
-    return;
-  }
-
-  var reader = new FileReader();
-
-  var self = this;
-  reader.addEventListener('error', function(ev) {
-    self.emit('error', ev);
+  this.emit('file', {
+    name: file.name,
+    size: file.size,
+    type: file.type,
+    stream: new ReadableBlobStream(file)
   });
-
-  reader.addEventListener('load', function() {
-    self.emit('file', {
-      name: file.name,
-      type: file.type,
-      size: file.size,
-      bytes: new Uint8Array(reader.result)
-    });
-  });
-
-  reader.readAsArrayBuffer(file);
 };
diff --git a/js/src/index.js b/js/src/index.js
index 61c3f44..062c73f 100644
--- a/js/src/index.js
+++ b/js/src/index.js
@@ -57,10 +57,8 @@
     var promise = s.displayBytes(ctx, file.type);
     promise.catch(cb);
     promise.stream.on('error', cb);
-    promise.stream.on('finish', function() { cb(null); });
+    promise.stream.on('finish', cb);
 
-    // TODO(nlacasse): Chunk these bytes! Currently we send the file in one big
-    // chunk.
-    promise.stream.end(file.bytes);
+    file.stream.pipe(promise.stream);
   });
 }