node-aurora
Version:
Provides an interface to the Aurora Dreamband.
308 lines (218 loc) • 13.2 kB
JavaScript
'use strict';
var _regenerator = require('babel-runtime/regenerator');
var _regenerator2 = _interopRequireDefault(_regenerator);
var _assign = require('babel-runtime/core-js/object/assign');
var _assign2 = _interopRequireDefault(_assign);
var _getIterator2 = require('babel-runtime/core-js/get-iterator');
var _getIterator3 = _interopRequireDefault(_getIterator2);
var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator');
var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);
var _AuroraTransformObject = require('./AuroraTransformObject');
var _AuroraTransformObject2 = _interopRequireDefault(_AuroraTransformObject);
var _AuroraSessionParser = require('./AuroraSessionParser');
var _AuroraSessionParser2 = _interopRequireDefault(_AuroraSessionParser);
var _moment = require('moment');
var _moment2 = _interopRequireDefault(_moment);
var _stream = require('stream');
var _stream2 = _interopRequireDefault(_stream);
var _util = require('./util');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
module.exports = function () {
var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee() {
var _this = this;
var connector = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'any';
var sessions, dirReadCmd, sessionDirs, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _loop, _iterator, _step, _ret;
return _regenerator2.default.wrap(function _callee$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
sessions = [];
dirReadCmd = void 0;
_context2.prev = 2;
_context2.next = 5;
return this.queueCmd('sd-dir-read sessions', connector);
case 5:
dirReadCmd = _context2.sent;
_context2.next = 11;
break;
case 8:
_context2.prev = 8;
_context2.t0 = _context2['catch'](2);
return _context2.abrupt('return', []);
case 11:
sessionDirs = dirReadCmd.response;
_iteratorNormalCompletion = true;
_didIteratorError = false;
_iteratorError = undefined;
_context2.prev = 15;
_loop = /*#__PURE__*/_regenerator2.default.mark(function _loop() {
var sessionDir, readSessionTxtCmd, sessionDirFiles, sessionDirReadCmd, sessionTxtFile, session, sessionTxtObject, sessionTxtStream, parsedSession, _loop2, i, _ret2;
return _regenerator2.default.wrap(function _loop$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
sessionDir = _step.value;
readSessionTxtCmd = void 0;
sessionDirFiles = void 0;
_context.prev = 3;
if (!sessionDir.isFile) {
_context.next = 6;
break;
}
return _context.abrupt('return', 'continue');
case 6:
_context.next = 8;
return _this.queueCmd('sd-dir-read ' + sessionDir.name + ' 1');
case 8:
sessionDirReadCmd = _context.sent;
sessionDirFiles = sessionDirReadCmd.response;
sessionTxtFile = sessionDirFiles.find(function (file) {
return file.name == 'session.txt';
});
//make sure text file exists and it's size is reasonable
if (!(!sessionTxtFile || sessionTxtFile.size < 75 || sessionTxtFile.size > 512 * 1024)) {
_context.next = 13;
break;
}
return _context.abrupt('return', 'continue');
case 13:
_context.next = 15;
return _this.readFile(sessionDir.name + '/session.txt', false, connector);
case 15:
readSessionTxtCmd = _context.sent;
_context.next = 21;
break;
case 18:
_context.prev = 18;
_context.t0 = _context['catch'](3);
return _context.abrupt('return', 'continue');
case 21:
session = {
name: sessionDir.name.split('/').pop(),
auroraDir: sessionDir.name,
content: readSessionTxtCmd.output,
streams: []
};
_context.prev = 22;
sessionTxtObject = void 0;
sessionTxtStream = new _stream2.default.Readable();
sessionTxtStream._read = function () {};
sessionTxtStream.push(session.content);
sessionTxtStream.push(null);
sessionTxtStream = sessionTxtStream.pipe(new _AuroraTransformObject2.default());
sessionTxtStream.on('data', function (data) {
sessionTxtObject = data;
});
_context.next = 32;
return (0, _util.promisifyStream)(sessionTxtStream);
case 32:
_context.next = 34;
return _AuroraSessionParser2.default.parseSessionTxtObject(sessionTxtObject);
case 34:
parsedSession = _context.sent;
(0, _assign2.default)(session, parsedSession);
//make sure sessions actually exist on disk and that the size is reasonable
_loop2 = function _loop2(i) {
var streamFile = sessionDirFiles.find(function (file) {
return file.name == session.streams[i].file;
});
if (!streamFile || !streamFile.size || streamFile.size > 100 * 1024 * 1024) {
delete session.streams[i];
return 'continue';
}
session.streams[i].size = streamFile.size;
};
i = 0;
case 38:
if (!(i < session.streams.length)) {
_context.next = 45;
break;
}
_ret2 = _loop2(i);
if (!(_ret2 === 'continue')) {
_context.next = 42;
break;
}
return _context.abrupt('continue', 42);
case 42:
i++;
_context.next = 38;
break;
case 45:
_context.next = 51;
break;
case 47:
_context.prev = 47;
_context.t1 = _context['catch'](22);
//infer the date from the name of the session if we have to
if (!_context.t1.date || typeof _context.t1 != 'number') {
_context.t1.date = +_moment2.default.utc(session.name, 'YYYY-MM-DD@HHmm');
}
//TODO consider logging this event.
//otherwise we still want to report this session
(0, _assign2.default)(session, _context.t1);
case 51:
sessions.push(session);
case 52:
case 'end':
return _context.stop();
}
}
}, _loop, _this, [[3, 18], [22, 47]]);
});
_iterator = (0, _getIterator3.default)(sessionDirs);
case 18:
if (_iteratorNormalCompletion = (_step = _iterator.next()).done) {
_context2.next = 26;
break;
}
return _context2.delegateYield(_loop(), 't1', 20);
case 20:
_ret = _context2.t1;
if (!(_ret === 'continue')) {
_context2.next = 23;
break;
}
return _context2.abrupt('continue', 23);
case 23:
_iteratorNormalCompletion = true;
_context2.next = 18;
break;
case 26:
_context2.next = 32;
break;
case 28:
_context2.prev = 28;
_context2.t2 = _context2['catch'](15);
_didIteratorError = true;
_iteratorError = _context2.t2;
case 32:
_context2.prev = 32;
_context2.prev = 33;
if (!_iteratorNormalCompletion && _iterator.return) {
_iterator.return();
}
case 35:
_context2.prev = 35;
if (!_didIteratorError) {
_context2.next = 38;
break;
}
throw _iteratorError;
case 38:
return _context2.finish(35);
case 39:
return _context2.finish(32);
case 40:
return _context2.abrupt('return', sessions);
case 41:
case 'end':
return _context2.stop();
}
}
}, _callee, this, [[2, 8], [15, 28, 32, 40], [33,, 35, 39]]);
}));
return function () {
return _ref.apply(this, arguments);
};
}();