const { parseNfoMetadata } = require('../utils/parsers/parseNfoMetadata') const { readTextFile } = require('../utils/fileUtils') class NfoFileScanner { constructor() { } /** * Parse metadata from .nfo file found in library scan and update bookMetadata * * @param {import('../models/LibraryItem').LibraryFileObject} nfoLibraryFileObj * @param {Object} bookMetadata */ async scanBookNfoFile(nfoLibraryFileObj, bookMetadata) { const nfoText = await readTextFile(nfoLibraryFileObj.metadata.path) const nfoMetadata = nfoText ? await parseNfoMetadata(nfoText) : null if (nfoMetadata) { for (const key in nfoMetadata) { if (key === 'tags') { // Add tags only if tags are empty if (nfoMetadata.tags.length) { bookMetadata.tags = nfoMetadata.tags } } else if (key === 'genres') { // Add genres only if genres are empty if (nfoMetadata.genres.length) { bookMetadata.genres = nfoMetadata.genres } } else if (key === 'authors') { if (nfoMetadata.authors?.length) { bookMetadata.authors = nfoMetadata.authors } } else if (key === 'narrators') { if (nfoMetadata.narrators?.length) { bookMetadata.narrators = nfoMetadata.narrators } } else if (key === 'series') { if (nfoMetadata.series) { bookMetadata.series = [{ name: nfoMetadata.series, sequence: nfoMetadata.sequence || null }] } } else if (nfoMetadata[key] && key !== 'sequence') { bookMetadata[key] = nfoMetadata[key] } } } } } module.exports = new NfoFileScanner()