diff options
author | liam4 <towerofnix@gmail.com> | 2017-06-04 17:09:47 -0300 |
---|---|---|
committer | liam4 <towerofnix@gmail.com> | 2017-06-04 17:09:47 -0300 |
commit | 170b9091f662e082a410128644b63ae787747c94 (patch) | |
tree | 402ba316240ec95dd13e2e2f58290d4a96a25718 | |
parent | 9fb775446f151b492f17bd42b757b958f5ea3fa0 (diff) |
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.
-rw-r--r-- | src/downloaders.js | 23 | ||||
-rw-r--r-- | src/loop-play.js | 5 |
2 files changed, 12 insertions, 16 deletions
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) |