From 720fceefb6972ae371b51556536d02fc65536e3b Mon Sep 17 00:00:00 2001 From: Isaac Grynsztein Date: Tue, 7 Apr 2020 19:16:15 -0400 Subject: [PATCH] Fixed bug where subscription videos could not be downloaded from the player --- backend/app.js | 22 +++++++++++++++++----- src/app/player/player.component.ts | 2 +- src/app/posts.services.ts | 7 +++++-- 3 files changed, 23 insertions(+), 8 deletions(-) diff --git a/backend/app.js b/backend/app.js index 69c489a..8a6da37 100644 --- a/backend/app.js +++ b/backend/app.js @@ -1997,13 +1997,26 @@ app.post('/api/downloadFile', async (req, res) => { let type = req.body.type; let outputName = req.body.outputName; let fullPathProvided = req.body.fullPathProvided; + let subscriptionName = req.body.subscriptionName; + let subscriptionPlaylist = req.body.subscriptionPlaylist; let file = null; if (!zip_mode) { fileNames = decodeURIComponent(fileNames); if (type === 'audio') { - file = __dirname + '/' + audioFolderPath + fileNames + '.mp3'; - } else if (type === 'video') { - file = __dirname + '/' + videoFolderPath + fileNames + '.mp4'; + if (!subscriptionName) { + file = path.join(__dirname, audioFolderPath, fileNames + '.mp3'); + } else { + let basePath = config_api.getConfigItem('ytdl_subscriptions_base_path'); + file = path.join(__dirname, basePath, (subscriptionPlaylist ? 'playlists' : 'channels'), subscriptionName, fileNames + '.mp3') + } + } else { + // if type is 'subscription' or 'video', it's a video + if (!subscriptionName) { + file = path.join(__dirname, videoFolderPath, fileNames + '.mp4'); + } else { + let basePath = config_api.getConfigItem('ytdl_subscriptions_base_path'); + file = path.join(__dirname, basePath, (subscriptionPlaylist ? 'playlists' : 'channels'), subscriptionName, fileNames + '.mp4') + } } } else { for (let i = 0; i < fileNames.length; i++) { @@ -2011,10 +2024,9 @@ app.post('/api/downloadFile', async (req, res) => { } file = await createPlaylistZipFile(fileNames, type, outputName, fullPathProvided); } - res.sendFile(file, function (err) { if (err) { - next(err); + logger.error(err); } else if (fullPathProvided) { try { fs.unlinkSync(file); diff --git a/src/app/player/player.component.ts b/src/app/player/player.component.ts index f3bf883..f2e7b4c 100644 --- a/src/app/player/player.component.ts +++ b/src/app/player/player.component.ts @@ -250,7 +250,7 @@ export class PlayerComponent implements OnInit { const ext = (this.type === 'audio') ? '.mp3' : '.mp4'; const filename = this.playlist[0].title; this.downloading = true; - this.postsService.downloadFileFromServer(filename, this.type).subscribe(res => { + this.postsService.downloadFileFromServer(filename, this.type, null, null, this.subscriptionName, this.subPlaylist).subscribe(res => { this.downloading = false; const blob: Blob = res; saveAs(blob, filename + ext); diff --git a/src/app/posts.services.ts b/src/app/posts.services.ts index e17b508..1db85c4 100644 --- a/src/app/posts.services.ts +++ b/src/app/posts.services.ts @@ -122,12 +122,15 @@ export class PostsService { return this.http.post(this.path + 'getFile', {uid: uid, type: type}); } - downloadFileFromServer(fileName, type, outputName = null, fullPathProvided = null) { + downloadFileFromServer(fileName, type, outputName = null, fullPathProvided = null, subscriptionName = null, subPlaylist = null) { return this.http.post(this.path + 'downloadFile', {fileNames: fileName, type: type, zip_mode: Array.isArray(fileName), outputName: outputName, - fullPathProvided: fullPathProvided}, + fullPathProvided: fullPathProvided, + subscriptionName: subscriptionName, + subPlaylist: subPlaylist + }, {responseType: 'blob'}); }