diff --git a/client/plugins/constants.js b/client/plugins/constants.js index 39a383c5..4a26bd5c 100644 --- a/client/plugins/constants.js +++ b/client/plugins/constants.js @@ -1,6 +1,6 @@ const SupportedFileTypes = { image: ['png', 'jpg', 'jpeg', 'webp'], - audio: ['m4b', 'mp3', 'm4a', 'flac', 'opus', 'ogg', 'oga', 'mp4', 'aac', 'wma', 'aiff', 'wav', 'webm', 'webma', 'mka'], + audio: ['m4b', 'mp3', 'm4a', 'flac', 'opus', 'ogg', 'oga', 'mp4', 'aac', 'wma', 'aiff', 'wav', 'webm', 'webma', 'mka', 'awb'], ebook: ['epub', 'pdf', 'mobi', 'azw3', 'cbr', 'cbz'], info: ['nfo'], text: ['txt'], diff --git a/server/objects/PodcastEpisodeDownload.js b/server/objects/PodcastEpisodeDownload.js index 5a683322..6c3be9ca 100644 --- a/server/objects/PodcastEpisodeDownload.js +++ b/server/objects/PodcastEpisodeDownload.js @@ -1,6 +1,7 @@ const Path = require('path') const { getId } = require('../utils/index') const { sanitizeFilename } = require('../utils/fileUtils') +const globals = require('../utils/globals') class PodcastEpisodeDownload { constructor() { @@ -40,8 +41,14 @@ class PodcastEpisodeDownload { } } + get fileExtension() { + const extname = Path.extname(this.url).substring(1).toLowerCase() + if (globals.SupportedAudioTypes.includes(extname)) return extname + return 'mp3' + } + get targetFilename() { - return sanitizeFilename(`${this.podcastEpisode.title}.mp3`) + return sanitizeFilename(`${this.podcastEpisode.title}.${this.fileExtension}`) } get targetPath() { return Path.join(this.libraryItem.path, this.targetFilename) diff --git a/server/objects/Stream.js b/server/objects/Stream.js index 9558dd11..5d6442dc 100644 --- a/server/objects/Stream.js +++ b/server/objects/Stream.js @@ -82,7 +82,8 @@ class Stream extends EventEmitter { AudioMimeType.WMA, AudioMimeType.AIFF, AudioMimeType.WEBM, - AudioMimeType.WEBMA + AudioMimeType.WEBMA, + AudioMimeType.AWB ] } get codecsToForceAAC() { diff --git a/server/utils/constants.js b/server/utils/constants.js index 66c87d06..a650c7ab 100644 --- a/server/utils/constants.js +++ b/server/utils/constants.js @@ -47,7 +47,8 @@ module.exports.AudioMimeType = { AIFF: 'audio/x-aiff', WEBM: 'audio/webm', WEBMA: 'audio/webm', - MKA: 'audio/x-matroska' + MKA: 'audio/x-matroska', + AWB: 'audio/amr-wb' } module.exports.VideoMimeType = { diff --git a/server/utils/globals.js b/server/utils/globals.js index f4bbf0a2..71c1c2c0 100644 --- a/server/utils/globals.js +++ b/server/utils/globals.js @@ -1,6 +1,6 @@ const globals = { SupportedImageTypes: ['png', 'jpg', 'jpeg', 'webp'], - SupportedAudioTypes: ['m4b', 'mp3', 'm4a', 'flac', 'opus', 'ogg', 'oga', 'mp4', 'aac', 'wma', 'aiff', 'wav', 'webm', 'webma', 'mka'], + SupportedAudioTypes: ['m4b', 'mp3', 'm4a', 'flac', 'opus', 'ogg', 'oga', 'mp4', 'aac', 'wma', 'aiff', 'wav', 'webm', 'webma', 'mka', 'awb'], SupportedEbookTypes: ['epub', 'pdf', 'mobi', 'azw3', 'cbr', 'cbz'], SupportedVideoTypes: ['mp4'], TextFileTypes: ['txt', 'nfo'], diff --git a/server/utils/parsers/parseNameString.js b/server/utils/parsers/parseNameString.js index d2d80d2d..96aa4bbe 100644 --- a/server/utils/parsers/parseNameString.js +++ b/server/utils/parsers/parseNameString.js @@ -43,6 +43,8 @@ module.exports.parse = (nameString) => { // Example &LF: Friedman, Milton & Friedman, Rose if (nameString.includes('&')) { nameString.split('&').forEach((asa) => splitNames = splitNames.concat(asa.split(','))) + } else if (nameString.includes(';')) { + nameString.split(';').forEach((asa) => splitNames = splitNames.concat(asa.split(','))) } else { splitNames = nameString.split(',') }