mirror of
https://github.com/advplyr/audiobookshelf.git
synced 2025-01-22 00:07:52 +01:00
Fix:Scanner purge cover cache when extracting from audio file
This commit is contained in:
parent
cfd9a01da7
commit
0aae672e19
@ -229,38 +229,6 @@ class CoverManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async saveEmbeddedCoverArt(libraryItem) {
|
|
||||||
let audioFileWithCover = null
|
|
||||||
if (libraryItem.mediaType === 'book') {
|
|
||||||
audioFileWithCover = libraryItem.media.audioFiles.find(af => af.embeddedCoverArt)
|
|
||||||
} else if (libraryItem.mediaType == 'podcast') {
|
|
||||||
const episodeWithCover = libraryItem.media.episodes.find(ep => ep.audioFile.embeddedCoverArt)
|
|
||||||
if (episodeWithCover) audioFileWithCover = episodeWithCover.audioFile
|
|
||||||
} else if (libraryItem.mediaType === 'music') {
|
|
||||||
audioFileWithCover = libraryItem.media.audioFile
|
|
||||||
}
|
|
||||||
if (!audioFileWithCover) return false
|
|
||||||
|
|
||||||
const coverDirPath = this.getCoverDirectory(libraryItem)
|
|
||||||
await fs.ensureDir(coverDirPath)
|
|
||||||
|
|
||||||
const coverFilename = audioFileWithCover.embeddedCoverArt === 'png' ? 'cover.png' : 'cover.jpg'
|
|
||||||
const coverFilePath = Path.join(coverDirPath, coverFilename)
|
|
||||||
|
|
||||||
const coverAlreadyExists = await fs.pathExists(coverFilePath)
|
|
||||||
if (coverAlreadyExists) {
|
|
||||||
Logger.warn(`[CoverManager] Extract embedded cover art but cover already exists for "${libraryItem.media.metadata.title}" - bail`)
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
const success = await extractCoverArt(audioFileWithCover.metadata.path, coverFilePath)
|
|
||||||
if (success) {
|
|
||||||
libraryItem.updateMediaCover(coverFilePath)
|
|
||||||
return coverFilePath
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Extract cover art from audio file and save for library item
|
* Extract cover art from audio file and save for library item
|
||||||
* @param {import('../models/Book').AudioFileObject[]} audioFiles
|
* @param {import('../models/Book').AudioFileObject[]} audioFiles
|
||||||
@ -268,7 +236,7 @@ class CoverManager {
|
|||||||
* @param {string} [libraryItemPath] null for isFile library items
|
* @param {string} [libraryItemPath] null for isFile library items
|
||||||
* @returns {Promise<string>} returns cover path
|
* @returns {Promise<string>} returns cover path
|
||||||
*/
|
*/
|
||||||
async saveEmbeddedCoverArtNew(audioFiles, libraryItemId, libraryItemPath) {
|
async saveEmbeddedCoverArt(audioFiles, libraryItemId, libraryItemPath) {
|
||||||
let audioFileWithCover = audioFiles.find(af => af.embeddedCoverArt)
|
let audioFileWithCover = audioFiles.find(af => af.embeddedCoverArt)
|
||||||
if (!audioFileWithCover) return null
|
if (!audioFileWithCover) return null
|
||||||
|
|
||||||
@ -291,6 +259,7 @@ class CoverManager {
|
|||||||
|
|
||||||
const success = await extractCoverArt(audioFileWithCover.metadata.path, coverFilePath)
|
const success = await extractCoverArt(audioFileWithCover.metadata.path, coverFilePath)
|
||||||
if (success) {
|
if (success) {
|
||||||
|
await CacheManager.purgeCoverCache(libraryItemId)
|
||||||
return coverFilePath
|
return coverFilePath
|
||||||
}
|
}
|
||||||
return null
|
return null
|
||||||
|
@ -313,7 +313,7 @@ class BookScanner {
|
|||||||
// If no cover then extract cover from audio file if available OR search for cover if enabled in server settings
|
// If no cover then extract cover from audio file if available OR search for cover if enabled in server settings
|
||||||
if (!media.coverPath) {
|
if (!media.coverPath) {
|
||||||
const libraryItemDir = existingLibraryItem.isFile ? null : existingLibraryItem.path
|
const libraryItemDir = existingLibraryItem.isFile ? null : existingLibraryItem.path
|
||||||
const extractedCoverPath = await CoverManager.saveEmbeddedCoverArtNew(media.audioFiles, existingLibraryItem.id, libraryItemDir)
|
const extractedCoverPath = await CoverManager.saveEmbeddedCoverArt(media.audioFiles, existingLibraryItem.id, libraryItemDir)
|
||||||
if (extractedCoverPath) {
|
if (extractedCoverPath) {
|
||||||
libraryScan.addLog(LogLevel.DEBUG, `Updating book "${bookMetadata.title}" extracted embedded cover art from audio file to path "${extractedCoverPath}"`)
|
libraryScan.addLog(LogLevel.DEBUG, `Updating book "${bookMetadata.title}" extracted embedded cover art from audio file to path "${extractedCoverPath}"`)
|
||||||
media.coverPath = extractedCoverPath
|
media.coverPath = extractedCoverPath
|
||||||
@ -461,7 +461,7 @@ class BookScanner {
|
|||||||
if (!bookObject.coverPath) {
|
if (!bookObject.coverPath) {
|
||||||
const libraryItemDir = libraryItemObj.isFile ? null : libraryItemObj.path
|
const libraryItemDir = libraryItemObj.isFile ? null : libraryItemObj.path
|
||||||
// Extract and save embedded cover art
|
// Extract and save embedded cover art
|
||||||
const extractedCoverPath = await CoverManager.saveEmbeddedCoverArtNew(scannedAudioFiles, libraryItemObj.id, libraryItemDir)
|
const extractedCoverPath = await CoverManager.saveEmbeddedCoverArt(scannedAudioFiles, libraryItemObj.id, libraryItemDir)
|
||||||
if (extractedCoverPath) {
|
if (extractedCoverPath) {
|
||||||
bookObject.coverPath = extractedCoverPath
|
bookObject.coverPath = extractedCoverPath
|
||||||
} else if (Database.serverSettings.scannerFindCovers) {
|
} else if (Database.serverSettings.scannerFindCovers) {
|
||||||
|
@ -178,7 +178,7 @@ class PodcastScanner {
|
|||||||
// If no cover then extract cover from audio file if available
|
// If no cover then extract cover from audio file if available
|
||||||
if (!media.coverPath && existingPodcastEpisodes.length) {
|
if (!media.coverPath && existingPodcastEpisodes.length) {
|
||||||
const audioFiles = existingPodcastEpisodes.map(ep => ep.audioFile)
|
const audioFiles = existingPodcastEpisodes.map(ep => ep.audioFile)
|
||||||
const extractedCoverPath = await CoverManager.saveEmbeddedCoverArtNew(audioFiles, existingLibraryItem.id, existingLibraryItem.path)
|
const extractedCoverPath = await CoverManager.saveEmbeddedCoverArt(audioFiles, existingLibraryItem.id, existingLibraryItem.path)
|
||||||
if (extractedCoverPath) {
|
if (extractedCoverPath) {
|
||||||
libraryScan.addLog(LogLevel.DEBUG, `Updating podcast "${podcastMetadata.title}" extracted embedded cover art from audio file to path "${extractedCoverPath}"`)
|
libraryScan.addLog(LogLevel.DEBUG, `Updating podcast "${podcastMetadata.title}" extracted embedded cover art from audio file to path "${extractedCoverPath}"`)
|
||||||
media.coverPath = extractedCoverPath
|
media.coverPath = extractedCoverPath
|
||||||
@ -279,7 +279,7 @@ class PodcastScanner {
|
|||||||
// If cover was not found in folder then check embedded covers in audio files
|
// If cover was not found in folder then check embedded covers in audio files
|
||||||
if (!podcastObject.coverPath && scannedAudioFiles.length) {
|
if (!podcastObject.coverPath && scannedAudioFiles.length) {
|
||||||
// Extract and save embedded cover art
|
// Extract and save embedded cover art
|
||||||
podcastObject.coverPath = await CoverManager.saveEmbeddedCoverArtNew(scannedAudioFiles, libraryItemObj.id, libraryItemObj.path)
|
podcastObject.coverPath = await CoverManager.saveEmbeddedCoverArt(scannedAudioFiles, libraryItemObj.id, libraryItemObj.path)
|
||||||
}
|
}
|
||||||
|
|
||||||
libraryItemObj.podcast = podcastObject
|
libraryItemObj.podcast = podcastObject
|
||||||
|
Loading…
Reference in New Issue
Block a user