UNPKG

node-aurora

Version:

Provides an interface to the Aurora Dreamband.

308 lines (218 loc) 13.2 kB
'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); }; }();