UNPKG

igir

Version:

🕹 A zero-setup ROM collection manager that sorts, filters, extracts or archives, patches, and reports on collections of any size on any OS.

65 lines (64 loc) • 2.41 kB
import path from "node:path"; import { ProgressBarSymbol } from "../console/progressBar.js"; import Disk from "../models/dats/disk.js"; import IgirHeader from "../models/dats/igirHeader.js"; import LogiqxDAT from "../models/dats/logiqx/logiqxDat.js"; import FsUtil from "../utils/fsUtil.js"; import Module from "./module.js"; class Dir2DatCreator extends Module { options; constructor(options, progressBar) { super(progressBar, Dir2DatCreator.name); this.options = options; } /** * Write the DAT. */ async create(dat, candidates) { if (!this.options.shouldDir2Dat()) { return void 0; } if (candidates.length === 0) { this.prefixedLogger.trace(`${dat.getName()}: no candidates to create dir2dat for`); return void 0; } this.prefixedLogger.trace(`${dat.getName()}: writing dir2dat`); this.progressBar.setSymbol(ProgressBarSymbol.WRITING); this.progressBar.resetProgress(1); const gamesToCandidates = candidates.reduce((map, candidate) => { if (!candidate.canWrite()) { return map; } const key = candidate.getGame(); if (map.has(key)) { map.get(key)?.push(candidate); } else { map.set(key, [candidate]); } return map; }, /* @__PURE__ */ new Map()); const gamesFromCandidates = Array.from(gamesToCandidates, ([game, candidates2]) => { const roms = candidates2.at(0)?.getRomsWithFiles().map((romWithFiles) => romWithFiles.getRom()); return game.withProps({ roms: roms?.filter((rom) => !(rom instanceof Disk)), disks: roms?.filter((rom) => rom instanceof Disk) }); }); const dir2datDir = this.options.getDir2DatOutput(); if (!await FsUtil.exists(dir2datDir)) { await FsUtil.mkdir(dir2datDir, { recursive: true }); } const header = new IgirHeader("dir2dat", dat, this.options); const dir2dat = new LogiqxDAT({ header, games: gamesFromCandidates }); const dir2datContents = dir2dat.toXmlDat(); const dir2datPath = path.join(dir2datDir, dir2dat.getFilename()); this.prefixedLogger.info(`${dir2dat.getName()}: creating dir2dat '${dir2datPath}'`); await FsUtil.writeFile(dir2datPath, dir2datContents); this.prefixedLogger.trace(`${dir2dat.getName()}: done writing dir2dat`); return dir2datPath; } } export { Dir2DatCreator as default }; //# sourceMappingURL=dir2DatCreator.js.map