ptt-client
Version:
A Node client for fetching data from ptt.cc.
548 lines (434 loc) • 16 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = exports.BoardSelectQueryBuilder = exports.Entry = exports.WhereType = exports.Board = void 0;
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _SelectQueryBuilder2 = require("../../../utils/query-builder/SelectQueryBuilder");
var _utils = require("../../../utils");
var _char = require("../../../utils/char");
var Board =
/*#__PURE__*/
function () {
(0, _createClass2["default"])(Board, [{
key: "bn",
/**
* @deprecated
*/
get: function get() {
return this.id;
}
/**
* @deprecated
*/
}, {
key: "boardname",
get: function get() {
return this.name;
}
/**
* @deprecated
*/
}, {
key: "read",
get: function get() {
return !this.unread;
}
}]);
function Board() {
var name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
(0, _classCallCheck2["default"])(this, Board);
(0, _defineProperty2["default"])(this, "name", '');
(0, _defineProperty2["default"])(this, "id", 0);
(0, _defineProperty2["default"])(this, "unread", false);
(0, _defineProperty2["default"])(this, "category", '');
(0, _defineProperty2["default"])(this, "flag", '');
(0, _defineProperty2["default"])(this, "title", '');
(0, _defineProperty2["default"])(this, "users", '');
(0, _defineProperty2["default"])(this, "admin", '');
(0, _defineProperty2["default"])(this, "folder", false);
(0, _defineProperty2["default"])(this, "divider", false);
this.name = name;
}
(0, _createClass2["default"])(Board, null, [{
key: "fromLine",
value: function fromLine(line) {
var board = new Board();
board.id = +(0, _char.substrWidth)('dbcs', line, 3, 4).trim();
board.unread = (0, _char.substrWidth)('dbcs', line, 8, 2).trim() === 'ˇ';
board.name = (0, _char.substrWidth)('dbcs', line, 10, 12).trim();
board.category = (0, _char.substrWidth)('dbcs', line, 23, 4).trim();
board.flag = (0, _char.substrWidth)('dbcs', line, 28, 2).trim();
switch (board.flag) {
case '□':
board.title = (0, _char.substrWidth)('dbcs', line, 30).replace(/\s+$/, '');
board.folder = true;
break;
case '--':
board.divider = true;
break;
case 'Σ':
board.title = (0, _char.substrWidth)('dbcs', line, 30, 31).replace(/\s+$/, '');
board.users = (0, _char.substrWidth)('dbcs', line, 62, 5).trim();
board.admin = (0, _char.substrWidth)('dbcs', line, 67).trim();
board.folder = true;
break;
case '◎':
board.title = (0, _char.substrWidth)('dbcs', line, 30, 31).replace(/\s+$/, '');
board.users = (0, _char.substrWidth)('dbcs', line, 62, 5).trim();
board.admin = (0, _char.substrWidth)('dbcs', line, 67).trim();
break;
default:
console.warn("Unknown board flag. line: \"".concat(line, "\""));
}
return board;
}
}, {
key: "fromClassLine",
value: function fromClassLine(line) {
var board = new Board();
board.id = +(0, _char.substrWidth)('dbcs', line, 15, 2);
board.title = (0, _char.substrWidth)('dbcs', line, 20, 29).replace(/\s+$/, '');
board.admin = (0, _char.substrWidth)('dbcs', line, 61).trim();
board.folder = true;
return board;
}
}, {
key: "select",
value: function select(bot) {
return new BoardSelectQueryBuilder(bot);
}
}]);
return Board;
}();
exports.Board = Board;
var WhereType;
exports.WhereType = WhereType;
(function (WhereType) {
WhereType["Entry"] = "entry";
WhereType["Prefix"] = "prefix";
WhereType["Offset"] = "offset";
WhereType["Offsets"] = "offsets";
})(WhereType || (exports.WhereType = WhereType = {}));
var Entry;
exports.Entry = Entry;
(function (Entry) {
Entry["Class"] = "class";
Entry["Favorite"] = "favorite";
Entry["Hot"] = "hot";
})(Entry || (exports.Entry = Entry = {}));
var BoardSelectQueryBuilder =
/*#__PURE__*/
function (_SelectQueryBuilder) {
(0, _inherits2["default"])(BoardSelectQueryBuilder, _SelectQueryBuilder);
function BoardSelectQueryBuilder(bot) {
var _this;
(0, _classCallCheck2["default"])(this, BoardSelectQueryBuilder);
_this = (0, _possibleConstructorReturn2["default"])(this, (0, _getPrototypeOf2["default"])(BoardSelectQueryBuilder).call(this));
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "bot", void 0);
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "entry", Entry.Class);
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "prefix", '');
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "offsets", []);
_this.bot = bot;
return _this;
}
(0, _createClass2["default"])(BoardSelectQueryBuilder, [{
key: "where",
value: function where(type, condition) {
switch (type.toLowerCase()) {
case WhereType.Entry:
this.entry = condition.toLowerCase();
break;
case WhereType.Prefix:
this.prefix = condition;
break;
case WhereType.Offset:
this.offsets.push(condition);
break;
case WhereType.Offsets:
this.offsets = condition.slice();
break;
default:
throw new Error("Invalid type: ".concat(type));
break;
}
return this;
}
}, {
key: "get",
value: function () {
var _get = (0, _asyncToGenerator2["default"])(
/*#__PURE__*/
_regenerator["default"].mark(function _callee() {
var found, boards, i, line, board, stopLoop, _i, _line, _board;
return _regenerator["default"].wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
if (!(this.prefix !== '')) {
_context.next = 4;
break;
}
_context.next = 3;
return this.getByPrefix(this.prefix);
case 3:
return _context.abrupt("return", _context.sent);
case 4:
_context.t0 = this.entry;
_context.next = _context.t0 === Entry.Class ? 7 : _context.t0 === Entry.Favorite ? 11 : _context.t0 === Entry.Hot ? 15 : 19;
break;
case 7:
_context.next = 9;
return this.bot.enterBoardByOffset(this.offsets);
case 9:
found = _context.sent;
return _context.abrupt("break", 19);
case 11:
_context.next = 13;
return this.bot.enterFavorite(this.offsets);
case 13:
found = _context.sent;
return _context.abrupt("break", 19);
case 15:
_context.next = 17;
return this.bot.enterBoardByOffset([-1].concat((0, _toConsumableArray2["default"])(this.offsets)));
case 17:
found = _context.sent;
return _context.abrupt("break", 19);
case 19:
boards = [];
if (!found) {
_context.next = 56;
break;
}
if (!(this.entry === Entry.Class && this.offsets.length === 0)) {
_context.next = 34;
break;
}
i = 7;
case 23:
if (!(i < 23)) {
_context.next = 32;
break;
}
line = this.bot.getLine(i).str;
if (!(line.trim() === '')) {
_context.next = 27;
break;
}
return _context.abrupt("break", 32);
case 27:
board = Board.fromClassLine(line);
boards.push(board);
case 29:
i++;
_context.next = 23;
break;
case 32:
_context.next = 56;
break;
case 34:
if (!true) {
_context.next = 56;
break;
}
stopLoop = false;
_i = 3;
case 37:
if (!(_i < 23)) {
_context.next = 50;
break;
}
_line = this.bot.getLine(_i).str;
if (!(_line.trim() === '')) {
_context.next = 42;
break;
}
stopLoop = true;
return _context.abrupt("break", 50);
case 42:
_board = Board.fromLine(_line);
if (!(_board.id !== boards.length + 1)) {
_context.next = 46;
break;
}
stopLoop = true;
return _context.abrupt("break", 50);
case 46:
boards.push(_board);
case 47:
_i++;
_context.next = 37;
break;
case 50:
if (!stopLoop) {
_context.next = 52;
break;
}
return _context.abrupt("break", 56);
case 52:
_context.next = 54;
return this.bot.send(_utils.keymap.PgDown);
case 54:
_context.next = 34;
break;
case 56:
_context.next = 58;
return this.bot.enterIndex();
case 58:
return _context.abrupt("return", boards);
case 59:
case "end":
return _context.stop();
}
}
}, _callee, this);
}));
function get() {
return _get.apply(this, arguments);
}
return get;
}()
}, {
key: "getOne",
value: function () {
var _getOne = (0, _asyncToGenerator2["default"])(
/*#__PURE__*/
_regenerator["default"].mark(function _callee2() {
var res;
return _regenerator["default"].wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
_context2.next = 2;
return this.get();
case 2:
res = _context2.sent;
return _context2.abrupt("return", res.length ? res[0] : void 0);
case 4:
case "end":
return _context2.stop();
}
}
}, _callee2, this);
}));
function getOne() {
return _getOne.apply(this, arguments);
}
return getOne;
}()
}, {
key: "getByPrefix",
value: function () {
var _getByPrefix = (0, _asyncToGenerator2["default"])(
/*#__PURE__*/
_regenerator["default"].mark(function _callee3(prefix) {
var boards, resultLine0, col, row, width, line, boardname, searchLine, searchInput;
return _regenerator["default"].wrap(function _callee3$(_context3) {
while (1) {
switch (_context3.prev = _context3.next) {
case 0:
_context3.next = 2;
return this.bot.send("s".concat(prefix, " "));
case 2:
boards = [];
resultLine0 = this.bot.getLine(3).str;
if (!(resultLine0.toLowerCase().indexOf(prefix.toLowerCase()) === 0)) {
_context3.next = 33;
break;
}
col = 0, row = 0;
/* TODO: Use other way instead of the constant 15. */
width = 15;
while (width < resultLine0.length && resultLine0[width] !== ' ') {
width += 1;
}
while (width < resultLine0.length && resultLine0[width] === ' ') {
width += 1;
}
case 9:
if (!true) {
_context3.next = 31;
break;
}
line = this.bot.getLine(row + 3).str;
boardname = (0, _char.substrWidth)('dbcs', line, col * width, width).trim();
if (!(boardname !== '')) {
_context3.next = 16;
break;
}
boards.push(new Board(boardname));
_context3.next = 17;
break;
case 16:
return _context3.abrupt("break", 31);
case 17:
row += 1;
if (!(row == 20)) {
_context3.next = 29;
break;
}
col += 1;
row = 0;
/* TODO: Use other way instead of the constant 80. */
if (!((col + 1) * width > 80)) {
_context3.next = 29;
break;
}
if (!this.bot.getLine(23).str.includes('按任意鍵繼續')) {
_context3.next = 28;
break;
}
col = row = 0;
_context3.next = 26;
return this.bot.send(' ');
case 26:
_context3.next = 29;
break;
case 28:
return _context3.abrupt("break", 31);
case 29:
_context3.next = 9;
break;
case 31:
_context3.next = 36;
break;
case 33:
searchLine = this.bot.getLine(1).str;
searchInput = (0, _char.substrWidth)('dbcs', searchLine, 34, 15).trim();
if (searchInput.toLowerCase().indexOf(prefix.toLowerCase()) === 0) {
boards.push(new Board(searchInput));
}
case 36:
_context3.next = 38;
return this.bot.send(_utils.keymap.CtrlC);
case 38:
return _context3.abrupt("return", boards);
case 39:
case "end":
return _context3.stop();
}
}
}, _callee3, this);
}));
function getByPrefix(_x) {
return _getByPrefix.apply(this, arguments);
}
return getByPrefix;
}()
}]);
return BoardSelectQueryBuilder;
}(_SelectQueryBuilder2.SelectQueryBuilder);
exports.BoardSelectQueryBuilder = BoardSelectQueryBuilder;
var _default = Board;
exports["default"] = _default;