From 170b9091f662e082a410128644b63ae787747c94 Mon Sep 17 00:00:00 2001 From: liam4 Date: Sun, 4 Jun 2017 17:09:47 -0300 Subject: Generally optimize downloads (less file copying) Basically all we do is let downloaders specify the output file, rather than be forced to download or copy into a specific given file. Since avconv/convert automatically gets us the displayed file name we want anyways (shown in play), this doesn't change anything visible to the user, but does make things faster. --- src/downloaders.js | 23 ++++++++++------------- src/loop-play.js | 5 ++--- 2 files changed, 12 insertions(+), 16 deletions(-) (limited to 'src') diff --git a/src/downloaders.js b/src/downloaders.js index 3f3a427..5f65346 100644 --- a/src/downloaders.js +++ b/src/downloaders.js @@ -7,18 +7,20 @@ const { spawn } = require('child_process') const { promisify } = require('util') const writeFile = promisify(fs.writeFile) -const rename = promisify(fs.rename) function makeHTTPDownloader() { - return function(arg, out) { + return function(arg) { + const out = tempy.file() + return fetch(arg) .then(response => response.buffer()) .then(buffer => writeFile(out, buffer)) + .then(() => out) } } function makeYouTubeDownloader() { - return function(arg, out) { + return function(arg) { const tempDir = tempy.directory() const opts = [ @@ -29,20 +31,15 @@ function makeYouTubeDownloader() { ] return promisifyProcess(spawn('youtube-dl', opts), false) - .then(() => rename(tempDir + '/dl.wav', out)) + .then(() => tempDir + '/dl.wav') } } function makeLocalDownloader() { - return function(arg, out) { - const read = fs.createReadStream(arg) - const write = fs.createWriteStream(out) - - return new Promise((resolve, reject) => { - write.on('error', err => reject(err)) - write.on('close', () => resolve()) - read.pipe(write) - }) + return function(arg) { + // Since we're grabbing the file from the local file system, there's no + // need to download or copy it! + return arg } } diff --git a/src/loop-play.js b/src/loop-play.js index 50bca80..5205025 100644 --- a/src/loop-play.js +++ b/src/loop-play.js @@ -30,11 +30,10 @@ module.exports = async function loopPlay(picker, downloader, playArgs = []) { const [ title, downloaderArg ] = picked console.log(`Downloading ${title}..\nDownloader arg: ${downloaderArg}`) + const downloadFile = await downloader(downloaderArg) + const tempDir = tempy.directory() const wavFile = tempDir + `/.${sanitize(title)}.wav` - const downloadFile = tempDir + '/.dl-' + path.basename(downloaderArg) - - await downloader(downloaderArg, downloadFile) try { await convert(downloadFile, wavFile) -- cgit 1.3.0-6-gf8a5