UNPKG

ptt-client

Version:

A Node client for fetching data from ptt.cc.

395 lines (322 loc) 11.7 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = exports.ArticleSelectQueryBuilder = exports.WhereType = exports.Article = void 0; var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator")); 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 Article = /*#__PURE__*/ function () { (0, _createClass2["default"])(Article, [{ key: "data", get: function get() { return this._data; }, set: function set(data) { this._data = data.slice(); } /** * @deprecated */ }, { key: "lines", get: function get() { return this.data; } /** * @deprecated */ , set: function set(data) { this.data = data; } /** * @deprecated */ }, { key: "sn", get: function get() { return this.id; } }]); function Article() { (0, _classCallCheck2["default"])(this, Article); (0, _defineProperty2["default"])(this, "boardname", void 0); (0, _defineProperty2["default"])(this, "id", void 0); (0, _defineProperty2["default"])(this, "push", void 0); (0, _defineProperty2["default"])(this, "date", void 0); (0, _defineProperty2["default"])(this, "timestamp", void 0); (0, _defineProperty2["default"])(this, "author", void 0); (0, _defineProperty2["default"])(this, "status", void 0); (0, _defineProperty2["default"])(this, "title", void 0); (0, _defineProperty2["default"])(this, "fixed", void 0); (0, _defineProperty2["default"])(this, "_data", []); } (0, _createClass2["default"])(Article, [{ key: "hasHeader", value: function hasHeader() { if (this.data.length === 0) { return false; } var authorArea = (0, _char.substrWidth)('dbcs', this.data[0], 0, 6).trim(); return authorArea === '作者'; } }], [{ key: "fromLine", value: function fromLine(line) { var article = new Article(); article.id = +(0, _char.substrWidth)('dbcs', line, 1, 7).trim(); article.push = (0, _char.substrWidth)('dbcs', line, 9, 2).trim(); article.date = (0, _char.substrWidth)('dbcs', line, 11, 5).trim(); article.author = (0, _char.substrWidth)('dbcs', line, 17, 12).trim(); article.status = (0, _char.substrWidth)('dbcs', line, 30, 2).trim(); article.title = (0, _char.substrWidth)('dbcs', line, 32).trim(); article.fixed = (0, _char.substrWidth)('dbcs', line, 1, 7).trim().includes('★'); return article; } }, { key: "select", value: function select(bot) { return new ArticleSelectQueryBuilder(bot); } }]); return Article; }(); exports.Article = Article; var WhereType; exports.WhereType = WhereType; (function (WhereType) { WhereType["Boardname"] = "boardname"; WhereType["Id"] = "id"; WhereType["Push"] = "push"; WhereType["Author"] = "author"; WhereType["Title"] = "title"; })(WhereType || (exports.WhereType = WhereType = {})); var ArticleSelectQueryBuilder = /*#__PURE__*/ function (_SelectQueryBuilder) { (0, _inherits2["default"])(ArticleSelectQueryBuilder, _SelectQueryBuilder); function ArticleSelectQueryBuilder(bot) { var _this; (0, _classCallCheck2["default"])(this, ArticleSelectQueryBuilder); _this = (0, _possibleConstructorReturn2["default"])(this, (0, _getPrototypeOf2["default"])(ArticleSelectQueryBuilder).call(this)); (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "bot", void 0); (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "boardname", ''); (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "wheres", []); (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "id", 0); _this.bot = bot; return _this; } (0, _createClass2["default"])(ArticleSelectQueryBuilder, [{ key: "where", value: function where(type, condition) { switch (type) { case WhereType.Boardname: if (this.boardname !== '') { console.warn("Cannot call where with type \"".concat(type, "\" multiple times")); } else { this.boardname = condition; } break; case WhereType.Id: this.id = +condition; break; case WhereType.Push: this.wheres.push({ type: 'Z', condition: condition }); break; case WhereType.Author: this.wheres.push({ type: 'a', condition: condition }); break; case WhereType.Title: this.wheres.push({ type: '/', condition: condition }); break; default: throw new Error("Invalid type: ".concat(type)); } return this; } }, { key: "getQuery", value: function getQuery() { return this.wheres.map(function (_ref) { var type = _ref.type, condition = _ref.condition; return "".concat(type).concat(condition).concat(_utils.keymap.Enter); }).join(); } }, { key: "get", value: function () { var _get = (0, _asyncToGenerator2["default"])( /*#__PURE__*/ _regenerator["default"].mark(function _callee() { var found, id, articles, i, line, article, _i, _i2; return _regenerator["default"].wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: _context.next = 2; return this.bot.enterBoardByName(this.boardname); case 2: _context.next = 4; return this.bot.send(this.getQuery()); case 4: found = _context.sent; if (found) { _context.next = 7; break; } return _context.abrupt("return", []); case 7: if (!(this.id > 0)) { _context.next = 11; break; } id = Math.max(this.id - 9, 1); _context.next = 11; return this.bot.send("".concat(_utils.keymap.End).concat(_utils.keymap.End).concat(id).concat(_utils.keymap.Enter)); case 11: articles = []; i = 3; case 13: if (!(i <= 22)) { _context.next = 23; break; } line = this.bot.getLine(i).str; if (!(line.trim() === '')) { _context.next = 17; break; } return _context.abrupt("break", 23); case 17: article = Article.fromLine(line); article.boardname = this.boardname; articles.push(article); case 20: i++; _context.next = 13; break; case 23: if (!(articles.length >= 2 && articles[0].id === 0)) { _context.next = 32; break; } _i = 1; case 25: if (!(_i < articles.length)) { _context.next = 32; break; } if (!(articles[_i].id !== 0)) { _context.next = 29; break; } articles[0].id = articles[_i].id - _i; return _context.abrupt("break", 32); case 29: _i++; _context.next = 25; break; case 32: for (_i2 = 1; _i2 < articles.length; _i2++) { articles[_i2].id = articles[_i2 - 1].id + 1; } _context.next = 35; return this.bot.enterIndex(); case 35: return _context.abrupt("return", articles.reverse()); case 36: 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 found, article; return _regenerator["default"].wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: _context2.next = 2; return this.bot.enterBoardByName(this.boardname); case 2: _context2.next = 4; return this.bot.send(this.getQuery()); case 4: found = _context2.sent; if (found) { _context2.next = 7; break; } return _context2.abrupt("return", void 0); case 7: _context2.next = 9; return this.bot.send("".concat(this.id).concat(_utils.keymap.Enter).concat(_utils.keymap.Enter)); case 9: article = new Article(); article.id = this.id; article.boardname = this.boardname; _context2.next = 14; return this.bot.getLines(); case 14: article.data = _context2.sent; if (article.hasHeader()) { article.author = (0, _char.substrWidth)('dbcs', this.bot.getLine(0).str, 7, 50).trim(); article.title = (0, _char.substrWidth)('dbcs', this.bot.getLine(1).str, 7).trim(); article.timestamp = (0, _char.substrWidth)('dbcs', this.bot.getLine(2).str, 7).trim(); } _context2.next = 18; return this.bot.enterIndex(); case 18: return _context2.abrupt("return", article); case 19: case "end": return _context2.stop(); } } }, _callee2, this); })); function getOne() { return _getOne.apply(this, arguments); } return getOne; }() }]); return ArticleSelectQueryBuilder; }(_SelectQueryBuilder2.SelectQueryBuilder); exports.ArticleSelectQueryBuilder = ArticleSelectQueryBuilder; var _default = Article; exports["default"] = _default;