ptt-client
Version:
A Node client for fetching data from ptt.cc.
395 lines (322 loc) • 11.7 kB
JavaScript
"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;