From af595d3df8c6dcfc7bbc9b8f79134113598b7a7b Mon Sep 17 00:00:00 2001 From: Isaac Grynsztein Date: Fri, 14 Feb 2020 00:15:55 -0500 Subject: [PATCH] Added debug mode to server and relevant debug configurations simplified youtubedl download process to speed up the download queryurl not printed any longer by youtube search service --- .vscode/launch.json | 14 ++++ backend/app.js | 127 ++++++++++++++++-------------- src/app/youtube-search.service.ts | 1 - 3 files changed, 84 insertions(+), 58 deletions(-) create mode 100644 .vscode/launch.json diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..aed221b --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,14 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "type": "node", + "request": "attach", + "name": "Attach", + "port": 9229 + }, + ] +} \ No newline at end of file diff --git a/backend/app.js b/backend/app.js index db20c35..70a18d7 100644 --- a/backend/app.js +++ b/backend/app.js @@ -10,7 +10,12 @@ var app = express(); var URL = require('url').URL; -var frontendUrl = config.get("YoutubeDLMaterial.Host.frontendurl"); +// check if debug mode +let debugMode = process.env.YTDL_MODE === 'debug'; + +if (debugMode) console.log('YTDL-Material in debug mode!'); + +var frontendUrl = !debugMode ? config.get("YoutubeDLMaterial.Host.frontendurl") : 'http://localhost:4200'; var backendUrl = config.get("YoutubeDLMaterial.Host.backendurl") var backendPort = 17442; var usingEncryption = config.get("YoutubeDLMaterial.Encryption.use-encryption"); @@ -19,6 +24,7 @@ var audioFolderPath = config.get("YoutubeDLMaterial.Downloader.path-audio"); var videoFolderPath = config.get("YoutubeDLMaterial.Downloader.path-video"); var downloadOnlyMode = config.get("YoutubeDLMaterial.Extra.download_only_mode") + if (usingEncryption) { @@ -194,34 +200,38 @@ app.post('/tomp3', function(req, res) { var path = audioFolderPath; var audiopath = '%(title)s'; - youtubedl.exec(url, ['--get-filename', '-o', audiopath], {}, function(err_getting_name, output) { - if (err_getting_name) { - res.sendStatus(500); - throw err_getting_name; + youtubedl.exec(url, ['--external-downloader', 'aria2c', '-o', path + audiopath + ".mp3", '-x', '--audio-format', 'mp3', '--write-info-json', '--print-json'], {}, function(err, output) { + if (debugMode) { + let new_date = Date.now(); + let difference = (new_date - date)/1000; + console.log(`Audio download delay: ${difference} seconds.`); } - var file_names = []; - for (let i = 0; i < output.length; i++) { - var modified_file_name = output[i]; - file_names.push(modified_file_name); - } - - var is_playlist = file_names.length > 1; - if (!is_playlist) audiopath = file_names[0]; - - youtubedl.exec(url, ['--external-downloader', 'aria2c', '-o', path + audiopath + ".mp3", '-x', '--audio-format', 'mp3', '--write-info-json'], {}, function(err, output) { - if (err) { - audiopath = "-1"; - res.sendStatus(500); - throw err; - } else if (output) { - var completeString = "done"; - var audiopathEncoded = encodeURIComponent(file_names[0]); - res.send({ - audiopathEncoded: audiopathEncoded, - file_names: is_playlist ? file_names : null - }); + if (err) { + audiopath = "-1"; + res.sendStatus(500); + throw err; + } else if (output) { + var file_names = []; + for (let i = 0; i < output.length; i++) { + let output_json = null; + try { + output_json = JSON.parse(output[i]); + } catch { + output_json = null; + } + var modified_file_name = output_json ? output_json['title'] : null; + if (modified_file_name) file_names.push(modified_file_name); } - }); + + let is_playlist = file_names.length > 1; + if (!is_playlist) audiopath = file_names[0]; + + var audiopathEncoded = encodeURIComponent(file_names[0]); + res.send({ + audiopathEncoded: audiopathEncoded, + file_names: is_playlist ? file_names : null + }); + } }); }); @@ -231,36 +241,39 @@ app.post('/tomp4', function(req, res) { var path = videoFolderPath; var videopath = '%(title)s'; - youtubedl.exec(url, ['--get-filename', '-o', videopath], {}, function(err_getting_name, output) { - if (err_getting_name) { - res.sendStatus(500); - throw err_getting_name; + youtubedl.exec(url, ['--external-downloader', 'aria2c', '-o', path + videopath + ".mp4", '-f', 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/mp4', '--write-info-json', '--print-json'], {}, function(err, output) { + if (debugMode) { + let new_date = Date.now(); + let difference = (new_date - date)/1000; + console.log(`Video download delay: ${difference} seconds.`); } + if (err) { + videopath = "-1"; + res.sendStatus(500); + throw err; + } else if (output) { + var file_names = []; + for (let i = 0; i < output.length; i++) { + let output_json = null; + try { + output_json = JSON.parse(output[i]); + } catch { + output_json = null; + } + var modified_file_name = output_json ? output_json['title'] : null; + if (modified_file_name) file_names.push(modified_file_name); + } - var file_names = []; - for (let i = 0; i < output.length; i++) { - var modified_file_name = output[i]; - file_names.push(modified_file_name); + let is_playlist = file_names.length > 1; + if (!is_playlist) audiopath = file_names[0]; + + var videopathEncoded = encodeURIComponent(file_names[0]); + res.send({ + videopathEncoded: videopathEncoded, + file_names: is_playlist ? file_names : null + }); + res.end("yes"); } - - var is_playlist = file_names.length > 1; - if (!is_playlist) videopath = file_names[0]; - - youtubedl.exec(url, ['--external-downloader', 'aria2c', '-o', path + videopath + ".mp4", '-f', 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/mp4', '--write-info-json'], {}, function(err, output) { - if (err) { - videopath = "-1"; - res.sendStatus(500); - throw err; - } else if (output) { - var completeString = "done"; - var videopathEncoded = encodeURIComponent(file_names[0]); - res.send({ - videopathEncoded: videopathEncoded, - file_names: is_playlist ? file_names : null - }); - res.end("yes"); - } - }); }); }); @@ -445,7 +458,7 @@ app.post('/deleteFile', function(req, res) { app.get('/video/:id', function(req , res){ var head; - const path = "video/" + req.params.id + ".mp4"; + const path = "video/" + req.params.id; const stat = fs.statSync(path) const fileSize = stat.size const range = req.headers.range @@ -477,7 +490,7 @@ app.get('/video/:id', function(req , res){ app.get('/audio/:id', function(req , res){ var head; - const path = "audio/" + req.params.id + ".mp3"; + const path = "audio/" + req.params.id; const stat = fs.statSync(path) const fileSize = stat.size const range = req.headers.range @@ -506,7 +519,7 @@ app.get('/audio/:id', function(req , res){ fs.createReadStream(path).pipe(res) } }); - + diff --git a/src/app/youtube-search.service.ts b/src/app/youtube-search.service.ts index b0cb13f..2df835b 100644 --- a/src/app/youtube-search.service.ts +++ b/src/app/youtube-search.service.ts @@ -49,7 +49,6 @@ export class YoutubeSearchService { `maxResults=5` ].join('&') const queryUrl = `${this.url}?${params}` - console.log(queryUrl) return this.http.get(queryUrl).map(response => { return response['items'].map(item => { return new Result({