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