jamp3
Version:
mp3, id3v1, id3v2 - reader & writer
54 lines (44 loc) • 1.22 kB
text/typescript
import {program} from 'commander';
import fse from 'fs-extra';
import {ID3v1} from '../lib/id3v1/id3v1';
import {runTool} from '../lib/common/tool';
// eslint-disable-next-line @typescript-eslint/no-var-requires
const pack = require('../../package.json');
program
.version(pack.version, '-v, --version')
.usage('[options]')
.option('-i, --input <fileOrDir>', 'mp3 file or folder')
.option('-r, --recursive', 'dump the folder recursive')
.option('-d, --dest <file>', 'destination analyze result file')
.parse(process.argv);
const id3v1 = new ID3v1();
interface IDumpResult {
filename: string;
tag?: any;
error?: string;
}
const result: Array<IDumpResult> = [];
async function onFile(filename: string): Promise<void> {
const tag = await id3v1.read(filename);
let dump: IDumpResult;
if (tag) {
dump = {filename, tag: tag};
} else {
dump = {error: 'No tag found', filename};
}
if (program.opts().dest) {
result.push(dump);
} else {
console.log(JSON.stringify(dump, null, '\t'));
}
}
async function run(): Promise<void> {
await runTool(program, onFile);
if (program.opts().dest) {
await fse.writeJSON(program.opts().dest, result);
}
}
run()
.catch(e => {
console.error(e);
});