novel-opds-now
Version:
按需生成 epub,此模組不使用排程任務來生成 epub
84 lines • 3.81 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.readEpubProcessCache = exports.saveEpubProcessCache = exports._saveEpubProcessCache = exports.appendEpubProcessCache = exports._merge = exports.replaceEpubProcessCacheRow = exports.removeEpubProcessCacheRow = exports.getEpubProcessCacheRow = exports.epubProcessCacheKey = exports.epubProcessCache = exports.__epubProcessCacheFile = void 0;
const tslib_1 = require("tslib");
const path_1 = require("path");
const const_1 = require("../const");
const fs_extra_1 = require("fs-extra");
const ndjson_1 = require("ndjson");
const bluebird_1 = (0, tslib_1.__importDefault)(require("bluebird"));
const streamToPromise_1 = require("../util/streamToPromise");
const lodash_1 = require("lodash");
const logger_1 = (0, tslib_1.__importDefault)(require("debug-color2/logger"));
exports.__epubProcessCacheFile = (0, path_1.join)(const_1.OUTPUT_DIR, '.novel-cache-map.ndjson');
exports.epubProcessCache = new Map();
function epubProcessCacheKey(IDKEY, novel_id) {
if (IDKEY !== null && typeof IDKEY === 'object') {
return `${IDKEY.siteID}##${IDKEY.novel_id}`;
}
return `${IDKEY}##${novel_id}`;
}
exports.epubProcessCacheKey = epubProcessCacheKey;
function getEpubProcessCacheRow(...argv) {
return exports.epubProcessCache.get(epubProcessCacheKey(...argv));
}
exports.getEpubProcessCacheRow = getEpubProcessCacheRow;
function removeEpubProcessCacheRow(...argv) {
return exports.epubProcessCache.delete(epubProcessCacheKey(...argv));
}
exports.removeEpubProcessCacheRow = removeEpubProcessCacheRow;
function replaceEpubProcessCacheRow(IDKEY, novel_id, data) {
return exports.epubProcessCache.set(epubProcessCacheKey(...argv), _merge(IDKEY, novel_id, data));
}
exports.replaceEpubProcessCacheRow = replaceEpubProcessCacheRow;
function _merge(IDKEY, novel_id, data) {
data = {
siteID: IDKEY,
novel_id,
...data,
};
data.siteID = IDKEY;
data.novel_id = novel_id;
return data;
}
exports._merge = _merge;
exports.appendEpubProcessCache = bluebird_1.default.method((IDKEY, novel_id, data) => {
data = _merge(IDKEY, novel_id, data);
data.timestamp = Date.now();
let line = JSON.stringify(data);
return (0, fs_extra_1.appendFile)(exports.__epubProcessCacheFile, line + '\n');
});
function _saveEpubProcessCache() {
return bluebird_1.default.resolve((0, fs_extra_1.truncate)(exports.__epubProcessCacheFile))
.catchReturn(null)
.then(() => {
const stream = (0, ndjson_1.stringify)();
stream.pipe((0, fs_extra_1.createWriteStream)(exports.__epubProcessCacheFile, {
flags: 'a',
}));
for (const data of exports.epubProcessCache.values()) {
stream.write(data);
}
stream.end();
return (0, streamToPromise_1.streamToPromise)(stream).tap(() => exports.epubProcessCache.clear());
})
.catch(e => {
logger_1.default.error(`發生錯誤,無法寫入緩存檔案 ${exports.__epubProcessCacheFile}`, String(e));
});
}
exports._saveEpubProcessCache = _saveEpubProcessCache;
exports.saveEpubProcessCache = (0, lodash_1.debounce)(_saveEpubProcessCache, 10 * 60 * 1000);
function readEpubProcessCache() {
return (0, streamToPromise_1.streamToPromise)((0, fs_extra_1.createReadStream)(exports.__epubProcessCacheFile)
.pipe((0, ndjson_1.parse)())
.on('data', (data) => {
const key = epubProcessCacheKey(data);
exports.epubProcessCache.set(key, _merge(data.siteID, data.novel_id, {
...exports.epubProcessCache.get(key),
...data,
}));
}))
.thenReturn(exports.epubProcessCache);
}
exports.readEpubProcessCache = readEpubProcessCache;
//# sourceMappingURL=epubProcessCache.js.map
;