Fix:Unescaped characters in description causing issues with m4b merging

This commit is contained in:
Conor Meyers 2022-10-18 04:25:18 +01:00
parent 6b8d71c0b0
commit e41a90463b
3 changed files with 68 additions and 1 deletions

View file

@ -131,7 +131,7 @@ class AbMergeManager {
}
}
const toneMetadataObject = toneHelpers.getToneMetadataObject(libraryItem, chaptersFilePath)
const toneMetadataObject = toneHelpers.getEscapedToneMetadataObject(libraryItem, chaptersFilePath)
toneMetadataObject.TrackNumber = 1
task.data.toneMetadataObject = toneMetadataObject

View file

@ -0,0 +1,5 @@
function escapeString(string) {
return string.replace(/[.*"+?^${}()|[\]\\]/g, '\\$&');
}
module.exports.escapeString = escapeString

View file

@ -2,6 +2,7 @@ const tone = require('node-tone')
const fs = require('../libs/fsExtra')
const Logger = require('../Logger')
const { secondsToTimestamp } = require('./index')
const stringEscaper = require('./stringEscaper')
module.exports.writeToneChaptersFile = (chapters, filePath) => {
var chaptersTxt = ''
@ -72,6 +73,67 @@ module.exports.getToneMetadataObject = (libraryItem, chaptersFile) => {
return metadataObject
}
module.exports.getEscapedToneMetadataObject = (libraryItem, chaptersFile) => {
const coverPath = libraryItem.media.coverPath
const bookMetadata = libraryItem.media.metadata
const metadataObject = {
'Title': bookMetadata.title || '',
'Album': bookMetadata.title || '',
'TrackTotal': libraryItem.media.tracks.length
}
const additionalFields = []
if (bookMetadata.subtitle) {
metadataObject['Subtitle'] = bookMetadata.subtitle
}
if (bookMetadata.authorName) {
metadataObject['Artist'] = bookMetadata.authorName
metadataObject['AlbumArtist'] = bookMetadata.authorName
}
if (bookMetadata.description) {
metadataObject['Comment'] = stringEscaper.escapeString(bookMetadata.description)
metadataObject['Description'] = stringEscaper.escapeString(bookMetadata.description)
}
if (bookMetadata.narratorName) {
metadataObject['Narrator'] = bookMetadata.narratorName
metadataObject['Composer'] = bookMetadata.narratorName
}
if (bookMetadata.firstSeriesName) {
metadataObject['MovementName'] = bookMetadata.firstSeriesName
}
if (bookMetadata.firstSeriesSequence) {
metadataObject['Movement'] = bookMetadata.firstSeriesSequence
}
if (bookMetadata.genres.length) {
metadataObject['Genre'] = bookMetadata.genres.join('/')
}
if (bookMetadata.publisher) {
metadataObject['Publisher'] = bookMetadata.publisher
}
if (bookMetadata.asin) {
additionalFields.push(`ASIN=${bookMetadata.asin}`)
}
if (bookMetadata.isbn) {
additionalFields.push(`ISBN=${bookMetadata.isbn}`)
}
if (coverPath) {
metadataObject['CoverFile'] = coverPath
}
if (parsePublishedYear(bookMetadata.publishedYear)) {
metadataObject['PublishingDate'] = parsePublishedYear(bookMetadata.publishedYear)
}
if (chaptersFile) {
metadataObject['ChaptersFile'] = chaptersFile
}
if (additionalFields.length) {
metadataObject['AdditionalFields'] = additionalFields
}
return metadataObject
}
module.exports.tagAudioFile = (filePath, payload) => {
return tone.tag(filePath, payload).then((data) => {
return true