node-aurora
Version:
Provides an interface to the Aurora Dreamband.
58 lines (38 loc) • 1.81 kB
JavaScript
;
var _promise = require('babel-runtime/core-js/promise');
var _promise2 = _interopRequireDefault(_promise);
var _stream = require('stream');
var _stream2 = _interopRequireDefault(_stream);
var _bufferCrc = require('buffer-crc32');
var _bufferCrc2 = _interopRequireDefault(_bufferCrc);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
module.exports = function (destPath, dataOrReadStream) {
var _this = this;
var rename = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
var connector = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'any';
var destPathSegments = destPath.split('/');
var destFileName = destPathSegments.pop();
var destFileDir = destPathSegments.length ? destPathSegments.join('/') : '/';
var crc = void 0;
var stream = dataOrReadStream;
//convert to stream in case of string or buffer
if (typeof dataOrReadStream == 'string' || Buffer.isBuffer(dataOrReadStream)) {
stream = new _stream2.default.Readable();
stream._read = function () {};
stream.push(dataOrReadStream.toString());
stream.push(null);
}
stream.pause();
stream.on('data', function (chunk) {
crc = _bufferCrc2.default.unsigned(chunk, crc);
});
return this.queueCmd('sd-file-write ' + destFileName + ' ' + destFileDir + ' ' + (rename ? 1 : 0) + ' 1 500', connector, function (cmd) {
_this.once('cmdInputRequested', function (inputStream) {
stream.pipe(inputStream);
stream.resume();
});
}).then(function (cmdWithResponse) {
if (cmdWithResponse.response.crc != crc) return _promise2.default.reject('CRC failed.');
return cmdWithResponse;
});
};