Merge pull request #3312 from nichwall/close_comics_during_scan

Close comics during scan
This commit is contained in:
advplyr 2024-08-21 17:41:06 -05:00 committed by GitHub
commit f66cea9829
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -7,12 +7,12 @@ const { xmlToJSON } = require('../index')
const parseComicInfoMetadata = require('./parseComicInfoMetadata') const parseComicInfoMetadata = require('./parseComicInfoMetadata')
/** /**
* *
* @param {string} filepath * @param {string} filepath
* @returns {Promise<Buffer>} * @returns {Promise<Buffer>}
*/ */
async function getComicFileBuffer(filepath) { async function getComicFileBuffer(filepath) {
if (!await fs.pathExists(filepath)) { if (!(await fs.pathExists(filepath))) {
Logger.error(`Comic path does not exist "${filepath}"`) Logger.error(`Comic path does not exist "${filepath}"`)
return null return null
} }
@ -26,10 +26,10 @@ async function getComicFileBuffer(filepath) {
/** /**
* Extract cover image from comic return true if success * Extract cover image from comic return true if success
* *
* @param {string} comicPath * @param {string} comicPath
* @param {string} comicImageFilepath * @param {string} comicImageFilepath
* @param {string} outputCoverPath * @param {string} outputCoverPath
* @returns {Promise<boolean>} * @returns {Promise<boolean>}
*/ */
async function extractCoverImage(comicPath, comicImageFilepath, outputCoverPath) { async function extractCoverImage(comicPath, comicImageFilepath, outputCoverPath) {
@ -50,14 +50,17 @@ async function extractCoverImage(comicPath, comicImageFilepath, outputCoverPath)
} catch (error) { } catch (error) {
Logger.error(`[parseComicMetadata] Failed to extract image from comicPath "${comicPath}"`, error) Logger.error(`[parseComicMetadata] Failed to extract image from comicPath "${comicPath}"`, error)
return false return false
} finally {
// Ensure we free the memory
archive.close()
} }
} }
module.exports.extractCoverImage = extractCoverImage module.exports.extractCoverImage = extractCoverImage
/** /**
* Parse metadata from comic * Parse metadata from comic
* *
* @param {import('../../models/Book').EBookFileObject} ebookFile * @param {import('../../models/Book').EBookFileObject} ebookFile
* @returns {Promise<import('./parseEbookMetadata').EBookFileScanData>} * @returns {Promise<import('./parseEbookMetadata').EBookFileScanData>}
*/ */
async function parse(ebookFile) { async function parse(ebookFile) {
@ -79,7 +82,7 @@ async function parse(ebookFile) {
}) })
let metadata = null let metadata = null
const comicInfo = fileObjects.find(fo => fo.file.name === 'ComicInfo.xml') const comicInfo = fileObjects.find((fo) => fo.file.name === 'ComicInfo.xml')
if (comicInfo) { if (comicInfo) {
const comicInfoEntry = await comicInfo.file.extract() const comicInfoEntry = await comicInfo.file.extract()
if (comicInfoEntry?.fileData) { if (comicInfoEntry?.fileData) {
@ -97,13 +100,16 @@ async function parse(ebookFile) {
metadata metadata
} }
const firstImage = fileObjects.find(fo => globals.SupportedImageTypes.includes(Path.extname(fo.file.name).toLowerCase().slice(1))) const firstImage = fileObjects.find((fo) => globals.SupportedImageTypes.includes(Path.extname(fo.file.name).toLowerCase().slice(1)))
if (firstImage?.file?._path) { if (firstImage?.file?._path) {
payload.ebookCoverPath = firstImage.file._path payload.ebookCoverPath = firstImage.file._path
} else { } else {
Logger.warn(`Cover image not found in comic at "${comicPath}"`) Logger.warn(`Cover image not found in comic at "${comicPath}"`)
} }
// Ensure we close the archive to free memory
archive.close()
return payload return payload
} }
module.exports.parse = parse module.exports.parse = parse