UNPKG

comic-book-dl

Version:
53 lines (52 loc) 1.81 kB
import { writeFileSync } from 'node:fs'; import { readdir, stat, readFile } from 'node:fs/promises'; import { join } from 'node:path'; import pLimit from 'p-limit'; import { logger, notEmpty } from '../utils/index.js'; export async function writeBookInfoFile(bookInfo, bookDistPath, parseInstance) { const coverPicPath = await parseInstance.saveImg(bookDistPath, bookInfo.coverUrl, 'cover').catch(e => { logger.error('封面图下载失败', e.message); return ''; }); bookInfo.coverPath = coverPicPath; writeFileSync(`${bookDistPath}/bookInfo.json`, JSON.stringify(bookInfo, null, 2)); } export async function scanFolder(distPath) { const LIMIT_MAX = 6; let folderList; try { folderList = await readdir(distPath); } catch (e) { folderList = []; } const limit = pLimit(LIMIT_MAX); const promiseList = folderList.map((folder) => { return limit(async () => { const curBookPath = join(distPath, folder); const itemStat = await stat(curBookPath); if (!itemStat.isDirectory()) return null; try { const bookInfoStr = await readFile(`${curBookPath}/bookInfo.json`, { encoding: 'utf-8' }); const bookInfo = JSON.parse(bookInfoStr); return bookInfo; } catch (e) { return null; } }); }); const bookInfoList = await Promise.all(promiseList); return bookInfoList.filter(notEmpty); } export async function readConfig(distPath) { try { const configStr = await readFile(`${distPath}/config.json`, { encoding: 'utf-8' }); const config = JSON.parse(configStr); return config; } catch (e) { return {}; } }