mirror of
				https://github.com/advplyr/audiobookshelf.git
				synced 2025-10-31 18:37:00 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			87 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			87 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| const tone = require('node-tone')
 | |
| const fs = require('../libs/fsExtra')
 | |
| const Logger = require('../Logger')
 | |
| const { secondsToTimestamp } = require('./index')
 | |
| 
 | |
| module.exports.writeToneChaptersFile = (chapters, filePath) => {
 | |
|   var chaptersTxt = ''
 | |
|   for (const chapter of chapters) {
 | |
|     chaptersTxt += `${secondsToTimestamp(chapter.start, true, true)} ${chapter.title}\n`
 | |
|   }
 | |
|   return fs.writeFile(filePath, chaptersTxt)
 | |
| }
 | |
| 
 | |
| module.exports.getToneMetadataObject = (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'] = bookMetadata.description
 | |
|     metadataObject['Description'] = 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
 | |
|   }).catch((error) => {
 | |
|     Logger.error(`[toneHelpers] tagAudioFile: Failed for "${filePath}"`, error)
 | |
|     return false
 | |
|   })
 | |
| }
 | |
| 
 | |
| function parsePublishedYear(publishedYear) {
 | |
|   if (isNaN(publishedYear) || !publishedYear || Number(publishedYear) <= 0) return null
 | |
|   return `01/01/${publishedYear}`
 | |
| } |