mirror of
https://github.com/advplyr/audiobookshelf.git
synced 2025-02-01 00:18:14 +01:00
Fix:Embed metadata tool embed ASIN, SERIES and SERIESPART #1794
This commit is contained in:
parent
4dba95c000
commit
1da471e136
@ -112,7 +112,7 @@ class AbMergeManager {
|
|||||||
let toneJsonPath = null
|
let toneJsonPath = null
|
||||||
try {
|
try {
|
||||||
toneJsonPath = Path.join(task.data.itemCachePath, 'metadata.json')
|
toneJsonPath = Path.join(task.data.itemCachePath, 'metadata.json')
|
||||||
await toneHelpers.writeToneMetadataJsonFile(libraryItem, libraryItem.media.chapters, toneJsonPath, 1)
|
await toneHelpers.writeToneMetadataJsonFile(libraryItem, libraryItem.media.chapters, toneJsonPath, 1, 'audio/mp4')
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
Logger.error(`[AbMergeManager] Write metadata.json failed`, error)
|
Logger.error(`[AbMergeManager] Write metadata.json failed`, error)
|
||||||
toneJsonPath = null
|
toneJsonPath = null
|
||||||
|
@ -34,7 +34,10 @@ class AudioMetadataMangaer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
getToneMetadataObjectForApi(libraryItem) {
|
getToneMetadataObjectForApi(libraryItem) {
|
||||||
return toneHelpers.getToneMetadataObject(libraryItem, libraryItem.media.chapters, libraryItem.media.tracks.length)
|
const audioFiles = libraryItem.media.includedAudioFiles
|
||||||
|
let mimeType = audioFiles[0].mimeType
|
||||||
|
if (audioFiles.some(a => a.mimeType !== mimeType)) mimeType = null
|
||||||
|
return toneHelpers.getToneMetadataObject(libraryItem, libraryItem.media.chapters, libraryItem.media.tracks.length, mimeType)
|
||||||
}
|
}
|
||||||
|
|
||||||
handleBatchEmbed(user, libraryItems, options = {}) {
|
handleBatchEmbed(user, libraryItems, options = {}) {
|
||||||
@ -56,6 +59,9 @@ class AudioMetadataMangaer {
|
|||||||
// Only writing chapters for single file audiobooks
|
// Only writing chapters for single file audiobooks
|
||||||
const chapters = (audioFiles.length == 1 || forceEmbedChapters) ? libraryItem.media.chapters.map(c => ({ ...c })) : null
|
const chapters = (audioFiles.length == 1 || forceEmbedChapters) ? libraryItem.media.chapters.map(c => ({ ...c })) : null
|
||||||
|
|
||||||
|
let mimeType = audioFiles[0].mimeType
|
||||||
|
if (audioFiles.some(a => a.mimeType !== mimeType)) mimeType = null
|
||||||
|
|
||||||
// Create task
|
// Create task
|
||||||
const taskData = {
|
const taskData = {
|
||||||
libraryItemId: libraryItem.id,
|
libraryItemId: libraryItem.id,
|
||||||
@ -71,7 +77,7 @@ class AudioMetadataMangaer {
|
|||||||
}
|
}
|
||||||
)),
|
)),
|
||||||
coverPath: libraryItem.media.coverPath,
|
coverPath: libraryItem.media.coverPath,
|
||||||
metadataObject: toneHelpers.getToneMetadataObject(libraryItem, chapters, audioFiles.length),
|
metadataObject: toneHelpers.getToneMetadataObject(libraryItem, chapters, audioFiles.length, mimeType),
|
||||||
itemCachePath,
|
itemCachePath,
|
||||||
chapters,
|
chapters,
|
||||||
options: {
|
options: {
|
||||||
|
@ -2,10 +2,13 @@ const tone = require('node-tone')
|
|||||||
const fs = require('../libs/fsExtra')
|
const fs = require('../libs/fsExtra')
|
||||||
const Logger = require('../Logger')
|
const Logger = require('../Logger')
|
||||||
|
|
||||||
function getToneMetadataObject(libraryItem, chapters, trackTotal) {
|
function getToneMetadataObject(libraryItem, chapters, trackTotal, mimeType = null) {
|
||||||
const bookMetadata = libraryItem.media.metadata
|
const bookMetadata = libraryItem.media.metadata
|
||||||
const coverPath = libraryItem.media.coverPath
|
const coverPath = libraryItem.media.coverPath
|
||||||
|
|
||||||
|
const isMp4 = mimeType === 'audio/mp4'
|
||||||
|
const isMp3 = mimeType === 'audio/mpeg'
|
||||||
|
|
||||||
const metadataObject = {
|
const metadataObject = {
|
||||||
'album': bookMetadata.title || '',
|
'album': bookMetadata.title || '',
|
||||||
'title': bookMetadata.title || '',
|
'title': bookMetadata.title || '',
|
||||||
@ -28,11 +31,25 @@ function getToneMetadataObject(libraryItem, chapters, trackTotal) {
|
|||||||
metadataObject['composer'] = bookMetadata.narratorName
|
metadataObject['composer'] = bookMetadata.narratorName
|
||||||
}
|
}
|
||||||
if (bookMetadata.firstSeriesName) {
|
if (bookMetadata.firstSeriesName) {
|
||||||
|
if (!isMp3) {
|
||||||
|
metadataObject.additionalFields['----:com.pilabor.tone:SERIES'] = bookMetadata.firstSeriesName
|
||||||
|
}
|
||||||
metadataObject['movementName'] = bookMetadata.firstSeriesName
|
metadataObject['movementName'] = bookMetadata.firstSeriesName
|
||||||
}
|
}
|
||||||
if (bookMetadata.firstSeriesSequence) {
|
if (bookMetadata.firstSeriesSequence) {
|
||||||
|
// Non-mp3
|
||||||
|
if (!isMp3) {
|
||||||
|
metadataObject.additionalFields['----:com.pilabor.tone:PART'] = bookMetadata.firstSeriesSequence
|
||||||
|
}
|
||||||
|
// MP3 Files with non-integer sequence
|
||||||
|
const isNonIntegerSequence = String(bookMetadata.firstSeriesSequence).includes('.') || isNaN(bookMetadata.firstSeriesSequence)
|
||||||
|
if (isMp3 && isNonIntegerSequence) {
|
||||||
|
metadataObject.additionalFields['PART'] = bookMetadata.firstSeriesSequence
|
||||||
|
}
|
||||||
|
if (!isNonIntegerSequence) {
|
||||||
metadataObject['movement'] = bookMetadata.firstSeriesSequence
|
metadataObject['movement'] = bookMetadata.firstSeriesSequence
|
||||||
}
|
}
|
||||||
|
}
|
||||||
if (bookMetadata.genres.length) {
|
if (bookMetadata.genres.length) {
|
||||||
metadataObject['genre'] = bookMetadata.genres.join('/')
|
metadataObject['genre'] = bookMetadata.genres.join('/')
|
||||||
}
|
}
|
||||||
@ -40,8 +57,13 @@ function getToneMetadataObject(libraryItem, chapters, trackTotal) {
|
|||||||
metadataObject['publisher'] = bookMetadata.publisher
|
metadataObject['publisher'] = bookMetadata.publisher
|
||||||
}
|
}
|
||||||
if (bookMetadata.asin) {
|
if (bookMetadata.asin) {
|
||||||
|
if (!isMp3) {
|
||||||
|
metadataObject.additionalFields['----:com.pilabor.tone:AUDIBLE_ASIN'] = bookMetadata.asin
|
||||||
|
}
|
||||||
|
if (!isMp4) {
|
||||||
metadataObject.additionalFields['asin'] = bookMetadata.asin
|
metadataObject.additionalFields['asin'] = bookMetadata.asin
|
||||||
}
|
}
|
||||||
|
}
|
||||||
if (bookMetadata.isbn) {
|
if (bookMetadata.isbn) {
|
||||||
metadataObject.additionalFields['isbn'] = bookMetadata.isbn
|
metadataObject.additionalFields['isbn'] = bookMetadata.isbn
|
||||||
}
|
}
|
||||||
@ -67,8 +89,8 @@ function getToneMetadataObject(libraryItem, chapters, trackTotal) {
|
|||||||
}
|
}
|
||||||
module.exports.getToneMetadataObject = getToneMetadataObject
|
module.exports.getToneMetadataObject = getToneMetadataObject
|
||||||
|
|
||||||
module.exports.writeToneMetadataJsonFile = (libraryItem, chapters, filePath, trackTotal) => {
|
module.exports.writeToneMetadataJsonFile = (libraryItem, chapters, filePath, trackTotal, mimeType) => {
|
||||||
const metadataObject = getToneMetadataObject(libraryItem, chapters, trackTotal)
|
const metadataObject = getToneMetadataObject(libraryItem, chapters, trackTotal, mimeType)
|
||||||
return fs.writeFile(filePath, JSON.stringify({ meta: metadataObject }, null, 2))
|
return fs.writeFile(filePath, JSON.stringify({ meta: metadataObject }, null, 2))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user