touhou-tagger
Version:
从 THBWiki 自动填写东方 Project CD 曲目信息.
112 lines (111 loc) • 4.27 kB
JavaScript
;
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;