Adds check for duplicated chapter data

This commit is contained in:
Joakim Ramer 2023-01-30 12:46:41 +01:00
parent 80ef8ee890
commit 36d2957fb4
No known key found for this signature in database
GPG Key ID: 3DD9039EF02C0573

View File

@ -420,27 +420,37 @@ class Book {
} }
} }
// IF first audio file has embedded chapters then use embedded chapters // If first audio file has embedded chapters then use embedded chapters
if (includedAudioFiles[0].chapters?.length) { if (includedAudioFiles[0].chapters?.length) {
Logger.debug(`[Book] setChapters: Using embedded chapters in audio file ${includedAudioFiles[0]?.metadata?.path}`) // If all files chapters are the same, then only make chapters for the first file
this.chapters = [] if (
let currChapterId = 0 includedAudioFiles.length > 1 &&
let currStartTime = 0 includedAudioFiles[0].chapters.length === includedAudioFiles[1].chapters.length &&
includedAudioFiles[0].chapters.every((c, i) => c.title === includedAudioFiles[1].chapters[i].title)
) {
Logger.debug(`[Book] setChapters: Using embedded chapters in first audio file ${includedAudioFiles[0].metadata?.path}`)
this.chapters = includedAudioFiles[0].chapters.map((c) => ({ ...c }))
} else {
Logger.debug(`[Book] setChapters: Using embedded chapters from all audio files ${includedAudioFiles[0].metadata?.path}`)
this.chapters = []
let currChapterId = 0
let currStartTime = 0
includedAudioFiles.forEach((file) => { includedAudioFiles.forEach((file) => {
if (file.duration) { if (file.duration) {
let chapters = file.chapters?.map((c) => ({ let chapters = file.chapters?.map((c) => ({
...c, ...c,
id: c.id + currChapterId, id: c.id + currChapterId,
start: c.start + currStartTime, start: c.start + currStartTime,
end: c.end + currStartTime, end: c.end + currStartTime,
})) }))
this.chapters = this.chapters.concat(chapters) this.chapters = this.chapters.concat(chapters)
currChapterId += file.chapters?.length ?? 0 currChapterId += file.chapters?.length ?? 0
currStartTime += file.duration currStartTime += file.duration
} }
}) })
}
} else if (includedAudioFiles.length > 1) { } else if (includedAudioFiles.length > 1) {
// Build chapters from audio files // Build chapters from audio files
this.chapters = [] this.chapters = []