UNPKG

2ch

Version:

A JavaScript library for comfortable 2ch watching.

93 lines (81 loc) 2.5 kB
(function() { var Bbs, util, _; _ = require('lodash'); util = require('./util'); module.exports = Bbs = (function() { function Bbs(bbsMenu, name) { this.bbsMenu = bbsMenu; this.name = name; } Bbs.prototype.getThreadUrl = function(number) { return "" + (this.bbsMenu.getBbsUrl(this.name)) + "dat/" + number + ".dat"; }; Bbs.prototype.fetch = function(done) { var url; url = this.bbsMenu.getBbsUrl(this.name) + 'subject.txt'; return util.requestGet(url).end(done); }; Bbs.prototype.fetchThreadHeader = function(query, done) { var _this = this; if (this.bbsMenu.updatedAt != null) { return this._fetchThreadHeader(query, done); } else { return this.bbsMenu.update(function(error) { var url; if (error) { return done(error); } url = _this.bbsMenu.getBbsUrl(_this.name); if (url == null) { return done(new Error('Unknown BBS name: ' + _this.name)); } return _this._fetchThreadHeader(query, done); }); } }; Bbs.prototype.searchThreadHeader = function(query, text) { var headers, matches, re, reStr, _this = this; if (_.isRegExp(query)) { query = query.toString().replace(/^\/|\/[igm]*$/g, ''); reStr = "^([0-9]+)\\.dat<>(.*" + query + ".*) \\(([0-9]+)\\)$"; } else { query = util.escapeRegExpChars(query); reStr = "^([0-9]+)\\.dat<>(" + query + ") \\(([0-9]+)\\)$"; } matches = text.match(new RegExp(reStr, 'img')); if (!matches) { return null; } re = new RegExp(reStr, 'im'); headers = matches.map(function(m) { var match; match = re.exec(m); return { number: Number(match[1]), title: match[2], count: Number(match[3]) }; }); headers = _.sortBy(headers, function(h) { return h.count; }).filter(function(h) { return h.count < 1000; }); headers.reverse(); return headers[0]; }; Bbs.prototype._fetchThreadHeader = function(query, done) { var _this = this; return this.fetch(function(error, res) { var header; if (error) { return done(error); } header = _this.searchThreadHeader(query, res.body.text); return done(null, header); }); }; return Bbs; })(); }).call(this);