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.
30 lines (29 loc) • 1.42 kB
JavaScript
import { ProgressBarSymbol } from '../../console/progressBar.js';
import { ChecksumBitmask } from '../../types/files/fileChecksums.js';
import Scanner from '../scanner.js';
/**
* Scan the {@link OptionsProps.input} input directory for ROM files and return the internal model
* representation.
*/
export default class ROMScanner extends Scanner {
constructor(options, progressBar, fileFactory, driveSemaphore) {
super(options, progressBar, fileFactory, driveSemaphore, ROMScanner.name);
}
/**
* Scan for ROM files.
*/
async scan(checksumBitmask = ChecksumBitmask.CRC32, checksumArchives = false) {
this.progressBar.logTrace('scanning ROM files');
this.progressBar.setSymbol(ProgressBarSymbol.FILE_SCANNING);
this.progressBar.resetProgress(0);
const romFilePaths = await this.options.scanInputFilesWithoutExclusions((increment) => {
this.progressBar.incrementTotal(increment);
});
this.progressBar.logTrace(`found ${romFilePaths.length.toLocaleString()} ROM file${romFilePaths.length === 1 ? '' : 's'}`);
this.progressBar.setSymbol(ProgressBarSymbol.ROM_HASHING);
this.progressBar.resetProgress(romFilePaths.length);
const files = await this.getFilesFromPaths(romFilePaths, checksumBitmask, checksumArchives);
this.progressBar.logTrace('done scanning ROM files');
return files;
}
}