Updates to metadata file format changing, use chapters from metadata file

This commit is contained in:
advplyr 2023-05-16 18:58:01 -05:00
parent 81d4ac3ed2
commit 3c406c12b4
6 changed files with 93 additions and 23 deletions

View file

@ -3,6 +3,7 @@ const filePerms = require('./filePerms')
const package = require('../../package.json')
const Logger = require('../Logger')
const { getId } = require('./index')
const areEquivalent = require('../utils/areEquivalent')
const CurrentAbMetadataVersion = 2
@ -424,6 +425,33 @@ function parseJsonMetadataText(text) {
}
}
function cleanChaptersArray(chaptersArray, mediaTitle) {
const chapters = []
let index = 0
for (const chap of chaptersArray) {
if (chap.start === null || isNaN(chap.start)) {
Logger.error(`[abmetadataGenerator] Invalid chapter start time ${chap.start} for "${mediaTitle}" metadata file`)
return null
}
if (chap.end === null || isNaN(chap.end)) {
Logger.error(`[abmetadataGenerator] Invalid chapter end time ${chap.end} for "${mediaTitle}" metadata file`)
return null
}
if (!chap.title || typeof chap.title !== 'string') {
Logger.error(`[abmetadataGenerator] Invalid chapter title ${chap.title} for "${mediaTitle}" metadata file`)
return null
}
chapters.push({
id: index++,
start: chap.start,
end: chap.end,
title: chap.title
})
}
return chapters
}
// Input text from abmetadata file and return object of media changes
// only returns object of changes. empty object means no changes
function parseAndCheckForUpdates(text, media, mediaType, isJSON) {
@ -477,6 +505,15 @@ function parseAndCheckForUpdates(text, media, mediaType, isJSON) {
}
}
if (abmetadataData.chapters && mediaType === 'book') {
const abmetadataChaptersCleaned = cleanChaptersArray(abmetadataData.chapters)
if (abmetadataChaptersCleaned) {
if (!areEquivalent(abmetadataChaptersCleaned, media.chapters)) {
updatePayload.chapters = abmetadataChaptersCleaned
}
}
}
if (Object.keys(metadataUpdatePayload).length) {
updatePayload.metadata = metadataUpdatePayload
}