UNPKG

touhou-tagger

Version:

从 THBWiki 自动填写东方 Project CD 曲目信息.

112 lines (111 loc) 4.27 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.runBatchDump = exports.runBatchTagger = void 0; const path_1 = require("path"); const promises_1 = require("fs/promises"); const debug_1 = require("../core/debug"); const default_album_name_1 = require("./default-album-name"); const helper_1 = require("./helper"); const readFolder = async (folder, depth) => { const currentSubFolders = (await (0, promises_1.readdir)(folder, { withFileTypes: true })) .filter(dir => dir.isDirectory()) .map(dir => ({ name: dir.name, path: (0, path_1.join)(folder, dir.name), })); if (depth <= 1) { return currentSubFolders; } const allSubFolders = await (0, helper_1.asyncFlatMap)(currentSubFolders, subFolder => readFolder((0, path_1.join)(folder, subFolder.name), depth - 1)); return allSubFolders; }; const createBatchRun = async (config) => { const { folder, depth, oraOptions, onProcess } = config; const albums = await readFolder(folder, depth); const albumCount = albums.length; const { default: ora } = await Promise.resolve().then(() => __importStar(require('ora'))); for (let index = 0; index < albumCount; index++) { try { const album = await (0, default_album_name_1.getDefaultAlbumName)(albums[index].name); const spinner = ora(oraOptions).start(); spinner.prefixText = `[${album}] (${index + 1}/${albumCount})`; (0, debug_1.log)(`start processing album #${index + 1}`); await onProcess({ currentAlbum: album, workingDir: albums[index].path, spinner, index, }); (0, debug_1.log)(`processed album #${index + 1}`); } catch (error) { (0, debug_1.log)('batch error:', error.message); continue; } } process.exit(); }; const runBatchTagger = async (folder, depth) => { const { CliTagger } = await Promise.resolve().then(() => __importStar(require('./tagger'))); await createBatchRun({ folder, depth, oraOptions: { text: '搜索中', spinner: { interval: 500, frames: ['. ', '.. ', '...'], }, }, onProcess: async ({ currentAlbum, workingDir, spinner }) => { const tagger = new CliTagger(spinner); tagger.workingDir = workingDir; await tagger.run(currentAlbum); }, }); }; exports.runBatchTagger = runBatchTagger; const runBatchDump = async (folder, depth) => { const { CliDumper } = await Promise.resolve().then(() => __importStar(require('./dumper'))); await createBatchRun({ folder, depth, oraOptions: { text: '提取中', spinner: { interval: 500, frames: ['. ', '.. ', '...'], }, }, onProcess: async ({ workingDir, spinner }) => { const tagger = new CliDumper(); tagger.workingDir = workingDir; await tagger.run(); spinner.stop(); }, }); }; exports.runBatchDump = runBatchDump;