Fix:Downloading podcast episode when file extension is mp3 but enclosure type is not mp3 #3711

This commit is contained in:
advplyr 2024-12-13 16:06:00 -06:00
parent e616b53877
commit 329bbea043
2 changed files with 22 additions and 1 deletions

View File

@ -25,7 +25,9 @@ const LibraryItem = require('../objects/LibraryItem')
class PodcastManager { class PodcastManager {
constructor() { constructor() {
/** @type {PodcastEpisodeDownload[]} */
this.downloadQueue = [] this.downloadQueue = []
/** @type {PodcastEpisodeDownload} */
this.currentDownload = null this.currentDownload = null
this.failedCheckMap = {} this.failedCheckMap = {}
@ -63,6 +65,11 @@ class PodcastManager {
} }
} }
/**
*
* @param {PodcastEpisodeDownload} podcastEpisodeDownload
* @returns
*/
async startPodcastEpisodeDownload(podcastEpisodeDownload) { async startPodcastEpisodeDownload(podcastEpisodeDownload) {
if (this.currentDownload) { if (this.currentDownload) {
this.downloadQueue.push(podcastEpisodeDownload) this.downloadQueue.push(podcastEpisodeDownload)
@ -106,7 +113,7 @@ class PodcastManager {
} }
let success = false let success = false
if (this.currentDownload.urlFileExtension === 'mp3') { if (this.currentDownload.isMp3) {
// Download episode and tag it // Download episode and tag it
success = await ffmpegHelpers.downloadPodcastEpisode(this.currentDownload).catch((error) => { success = await ffmpegHelpers.downloadPodcastEpisode(this.currentDownload).catch((error) => {
Logger.error(`[PodcastManager] Podcast Episode download failed`, error) Logger.error(`[PodcastManager] Podcast Episode download failed`, error)

View File

@ -53,6 +53,20 @@ class PodcastEpisodeDownload {
if (globals.SupportedAudioTypes.includes(extname)) return extname if (globals.SupportedAudioTypes.includes(extname)) return extname
return 'mp3' return 'mp3'
} }
get enclosureType() {
const enclosureType = this.podcastEpisode?.enclosure?.type
return typeof enclosureType === 'string' ? enclosureType : null
}
/**
* RSS feed may have an episode with file extension of mp3 but the specified enclosure type is not mpeg.
* @see https://github.com/advplyr/audiobookshelf/issues/3711
*
* @returns {boolean}
*/
get isMp3() {
if (this.enclosureType && !this.enclosureType.includes('mpeg')) return false
return this.fileExtension === 'mp3'
}
get targetFilename() { get targetFilename() {
const appendage = this.appendEpisodeId ? ` (${this.podcastEpisode.id})` : '' const appendage = this.appendEpisodeId ? ` (${this.podcastEpisode.id})` : ''