diff --git a/lib/download.js b/lib/download.js index cd13036..660d02d 100644 --- a/lib/download.js +++ b/lib/download.js @@ -1,45 +1,28 @@ var async = require('async'); var chalk = require('chalk'); var fs = require('fs-extra'); -var request = require('request'); var tildify = require('tildify'); -var ProgressBar = require('progress'); var figures = require('figures'); -var format = require('util').format; var debug = require('debug')('mongodb-version-manager:download'); - -function progressbar(pkg, res, totalSize) { - var bar = new ProgressBar(' Downloading MongoDB v' - + pkg.version + ' [:bar] :percent :etasec', { - complete: '=', - incomplete: ' ', - width: 40, - total: totalSize - }); - - res.on('data', function(chunk) { - bar.tick(chunk.length); - }); -} +var nugget = require('nugget'); function download(model, done) { debug('downloading artifact from `%s` to `%s`...', model.url, tildify(model.download_path)); - var out = fs.createWriteStream(model.download_path); - var onFinish; - var onError = function(err) { - out.removeListener('finish', onFinish); - debug('removing incomplete artifact from `%s`', - model.download_path); - fs.unlink(model.download_path, function() { - done(err); - }); - }; - - onFinish = function() { - /* eslint no-console:0 */ - out.removeListener('error', onError); + var quiet = process.env.silent; + var verbose = process.env.VERBOSE; + var nuggetOpts = {target: model.filename, dir: model.download_directory, resume: true, verbose: verbose, quiet: quiet}; + nugget(model.url, nuggetOpts, function(errors) { + if (errors) { + var error = errors[0]; // nugget returns an array of errors but we only need 1st because we only have 1 url + debug('removing incomplete artifact from `%s`', + model.download_path); + fs.unlink(model.download_path, function() { + done(error); + }); + return; + } debug('successfully downloaded MongoDB version v%s to %s', model.version, model.download_path); if (!process.env.silent) { @@ -47,31 +30,6 @@ function download(model, done) { ' Downloaded MongoDB', model.version); } done(); - }; - out.once('error', onError).once('finish', onFinish); - - var req = request(model.url); - req.on('response', function(res) { - var totalSize = parseInt(res.headers['content-length'], 10); - debug('total size %dMB', (totalSize / 1024 / 1024).toFixed(2)); - - if (!totalSize || totalSize < 10 * 1024 * 1024) { - var msg = format('Download looks too small! %s is only %s bytes!', - model.url, totalSize); - return onError(new Error(msg)); - } - - if (process.env.silent) { - debug('Downloading `%s`...', model.url); - } else if (!process.env.CI) { - progressbar(model, res, totalSize); - } else { - console.log('Downloading `%s`...', model.url); - } - }); - req.pipe(out); - req.on('error', function(err) { - onError(err); }); } diff --git a/package.json b/package.json index 333a87a..4db5aac 100644 --- a/package.json +++ b/package.json @@ -50,6 +50,7 @@ "lodash.difference": "^4.1.1", "mongodb-download-url": "^0.1.9", "mongodb-version-list": "0.0.3", + "nugget": "^2.0.0", "progress": "~1.1.8", "request": "~2.69.0", "semver": "~5.1.0",