diff --git a/server/utils/ffmpegHelpers.js b/server/utils/ffmpegHelpers.js index 7ec63302..491f59dc 100644 --- a/server/utils/ffmpegHelpers.js +++ b/server/utils/ffmpegHelpers.js @@ -7,7 +7,7 @@ const { filePathToPOSIX } = require('./fileUtils') function escapeSingleQuotes(path) { // return path.replace(/'/g, '\'\\\'\'') - return filePathToPOSIX(path).replace(/ /g, '\\ ').replace(/'/g, '\\\'') + return filePathToPOSIX(path).replace(/ /g, '\\ ').replace(/'/g, "\\'") } // Returns first track start time @@ -19,7 +19,7 @@ async function writeConcatFile(tracks, outputPath, startTime = 0) { // Find first track greater than startTime if (startTime > 0) { var currTrackEnd = 0 - var startingTrack = tracks.find(t => { + var startingTrack = tracks.find((t) => { currTrackEnd += t.duration return startTime < currTrackEnd }) @@ -29,8 +29,8 @@ async function writeConcatFile(tracks, outputPath, startTime = 0) { } } - var tracksToInclude = tracks.filter(t => t.index >= trackToStartWithIndex) - var trackPaths = tracksToInclude.map(t => { + var tracksToInclude = tracks.filter((t) => t.index >= trackToStartWithIndex) + var trackPaths = tracksToInclude.map((t) => { var line = 'file ' + escapeSingleQuotes(t.metadata.path) + '\n' + `duration ${t.duration}` return line }) @@ -99,6 +99,9 @@ module.exports.downloadPodcastEpisode = (podcastEpisodeDownload) => { url: podcastEpisodeDownload.url, method: 'GET', responseType: 'stream', + headers: { + 'User-Agent': 'audiobookshelf (+https://audiobookshelf.org; like iTMS)' + }, timeout: 30000 }).catch((error) => { Logger.error(`[ffmpegHelpers] Failed to download podcast episode with url "${podcastEpisodeDownload.url}"`, error) @@ -108,35 +111,31 @@ module.exports.downloadPodcastEpisode = (podcastEpisodeDownload) => { const ffmpeg = Ffmpeg(response.data) ffmpeg.addOption('-loglevel debug') // Debug logs printed on error - ffmpeg.outputOptions( - '-c:a', 'copy', - '-map', '0:a', - '-metadata', 'podcast=1' - ) + ffmpeg.outputOptions('-c:a', 'copy', '-map', '0:a', '-metadata', 'podcast=1') const podcastMetadata = podcastEpisodeDownload.libraryItem.media.metadata const podcastEpisode = podcastEpisodeDownload.podcastEpisode const finalSizeInBytes = Number(podcastEpisode.enclosure?.length || 0) const taggings = { - 'album': podcastMetadata.title, + album: podcastMetadata.title, 'album-sort': podcastMetadata.title, - 'artist': podcastMetadata.author, + artist: podcastMetadata.author, 'artist-sort': podcastMetadata.author, - 'comment': podcastEpisode.description, - 'subtitle': podcastEpisode.subtitle, - 'disc': podcastEpisode.season, - 'genre': podcastMetadata.genres.length ? podcastMetadata.genres.join(';') : null, - 'language': podcastMetadata.language, - 'MVNM': podcastMetadata.title, - 'MVIN': podcastEpisode.episode, - 'track': podcastEpisode.episode, + comment: podcastEpisode.description, + subtitle: podcastEpisode.subtitle, + disc: podcastEpisode.season, + genre: podcastMetadata.genres.length ? podcastMetadata.genres.join(';') : null, + language: podcastMetadata.language, + MVNM: podcastMetadata.title, + MVIN: podcastEpisode.episode, + track: podcastEpisode.episode, 'series-part': podcastEpisode.episode, - 'title': podcastEpisode.title, + title: podcastEpisode.title, 'title-sort': podcastEpisode.title, - 'year': podcastEpisode.pubYear, - 'date': podcastEpisode.pubDate, - 'releasedate': podcastEpisode.pubDate, + year: podcastEpisode.pubYear, + date: podcastEpisode.pubDate, + releasedate: podcastEpisode.pubDate, 'itunes-id': podcastMetadata.itunesId, 'podcast-type': podcastMetadata.type, 'episode-type': podcastMetadata.episodeType diff --git a/server/utils/fileUtils.js b/server/utils/fileUtils.js index e62f12a5..5488b4d4 100644 --- a/server/utils/fileUtils.js +++ b/server/utils/fileUtils.js @@ -255,6 +255,9 @@ module.exports.downloadFile = (url, filepath, contentTypeFilter = null) => { url, method: 'GET', responseType: 'stream', + headers: { + 'User-Agent': 'audiobookshelf (+https://audiobookshelf.org)' + }, timeout: 30000, httpAgent: global.DisableSsrfRequestFilter ? null : ssrfFilter(url), httpsAgent: global.DisableSsrfRequestFilter ? null : ssrfFilter(url) diff --git a/server/utils/podcastUtils.js b/server/utils/podcastUtils.js index 9c8a3f20..bfe540ed 100644 --- a/server/utils/podcastUtils.js +++ b/server/utils/podcastUtils.js @@ -235,7 +235,7 @@ module.exports.getPodcastFeed = (feedUrl, excludeEpisodeMetadata = false) => { responseType: 'arraybuffer', headers: { Accept: 'application/rss+xml, application/xhtml+xml, application/xml, */*;q=0.8', - 'User-Agent': 'audiobookshelf (+https://github.com/advplyr/audiobookshelf; like iTMS)' + 'User-Agent': 'audiobookshelf (+https://audiobookshelf.org; like iTMS)' }, httpAgent: global.DisableSsrfRequestFilter ? null : ssrfFilter(feedUrl), httpsAgent: global.DisableSsrfRequestFilter ? null : ssrfFilter(feedUrl)