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.
45 lines (44 loc) • 1.57 kB
JavaScript
import moment from 'moment';
import Package from '../../globals/package.js';
import ArrayPoly from '../../polyfill/arrayPoly.js';
import Header from '../../types/dats/logiqx/header.js';
import LogiqxDAT from '../../types/dats/logiqx/logiqxDat.js';
import Module from '../module.js';
/**
* Combine every {@link DAT} into a single {@link DAT}.
*/
export default class DATCombiner extends Module {
constructor(progressBar) {
super(progressBar, DATCombiner.name);
}
/**
* Combine the DATs.
*/
combine(dats) {
this.progressBar.logTrace(`combining ${dats.length} DAT${dats.length === 1 ? '' : 's'}`);
const newDat = new LogiqxDAT({
header: DATCombiner.generateHeader(dats),
games: dats
.flatMap((dat) => dat.getGames())
.filter(ArrayPoly.filterUniqueMapped((game) => game.hashCode())),
});
this.progressBar.logTrace(`done combining ${dats.length} DAT${dats.length === 1 ? '' : 's'}`);
return newDat;
}
static generateHeader(dats) {
const datName = 'igir combined';
const date = moment().format('YYYYMMDD-HHmmss');
return new Header({
name: datName,
description: datName,
version: date,
date,
author: Package.NAME,
url: Package.HOMEPAGE,
comment: [
`Combined DAT generated by ${Package.NAME} v${Package.VERSION}`,
...dats.map((dat) => dat.getName()),
].join('\n'),
});
}
}