diff --git a/index.js b/index.js old mode 100644 new mode 100755 index 71ba283..016f003 --- a/index.js +++ b/index.js @@ -10,6 +10,7 @@ const leven = require('leven'); const { URL, URLSearchParams } = require('url'); const fetch = require('node-fetch'); const m3u = require('m3u'); +const promisepipe = require('promisepipe'); require('dotenv').config(); @@ -103,12 +104,18 @@ async function main(playlistUrl){ } bestMatch.path = `${bestMatch.artist} - ${bestMatch.title}.mp3`; debug('bestMatch=%O', bestMatch); - await fs.access(bestMatch.path).catch(async () => { // TODO find a proper way to not re-download, lower/uppercase problems - await fetch(bestMatch.url).then(res => { - res.body.pipe(createWriteStream(bestMatch.path)); + try { + await fs.access(bestMatch.path).catch(async () => { // TODO find a proper way to not re-download, lower/uppercase problems + await fetch(bestMatch.url).then(async res => { + await promisepipe(res.body, createWriteStream(bestMatch.path)); + }); + debug('Done downloading'); }); - debug('Done downloading'); - }); + } catch (err) { + console.error('Download failed for ', bestMatch); + console.error(err); + return null; + } return bestMatch; }, {concurrency: 1}); diff --git a/package-lock.json b/package-lock.json index fb830ef..9413fb4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -164,6 +164,11 @@ "@types/node": "*" } }, + "promisepipe": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/promisepipe/-/promisepipe-3.0.0.tgz", + "integrity": "sha512-V6TbZDJ/ZswevgkDNpGt/YqNCiZP9ASfgU+p83uJE6NrGtvSGoOcHLiDCqkMs2+yg7F5qHdLV8d0aS8O26G/KA==" + }, "readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", diff --git a/package.json b/package.json index 82eb2ef..8d9e80b 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,8 @@ "leven": "^3.1.0", "lodash": "^4.17.15", "m3u": "0.0.2", - "node-fetch": "^2.6.0" + "node-fetch": "^2.6.0", + "promisepipe": "^3.0.0" }, "devDependencies": {} }