function downloadBundles (next, bundles) { if (!bundles.length) { console.log(colors.green('No bundles selected, exiting')) return next() } var downloads = [] for (var bundle of bundles) { var bundleName = bundle.product.human_name var bundleDownloads = [] var bundleFormats = [] for (var subproduct of bundle.subproducts) { var filteredDownloads = subproduct.downloads.filter((download) => { return download.platform === 'ebook' }) var downloadStructs = flatten(keypath.get(filteredDownloads, '[].download_struct')) var filteredDownloadStructs = downloadStructs.filter((download) => { if (!download.name || !download.url) { return false } var normalizedFormat = normalizeFormat(download.name) if (bundleFormats.indexOf(normalizedFormat) === -1 && SUPPORTED_FORMATS.indexOf(normalizedFormat) !== -1) { bundleFormats.push(normalizedFormat) } return commander.format === 'all' || normalizedFormat === commander.format }) for (var filteredDownload of filteredDownloadStructs) { bundleDownloads.push({ bundle: bundleName, download: filteredDownload, name: subproduct.human_name }) } } if (!bundleDownloads.length) { console.log(colors.red('No downloads found matching the right format (%s) for bundle (%s), available formats: (%s)'), commander.format, bundleName, bundleFormats.sort().join(', ')) continue } for (var download of bundleDownloads) { downloads.push(download) } } if (!downloads.length) { console.log(colors.red('No downloads found matching the right format (%s), exiting'), commander.format) } async.each(downloads, (download, next) => { limiter.submit((next) => { console.log('Downloading %s - %s (%s) (%s)... (%s/%s)', download.bundle, download.name, download.download.name, download.download.human_size, colors.yellow(downloads.indexOf(download) + 1), colors.yellow(downloads.length)) downloadBook(download.bundle, download.name, download.download, (error, skipped) => { if (error) { return next(error) } if (skipped) { console.log('Skipped downloading of %s - %s (%s) (%s) - already exists... (%s/%s)', download.bundle, download.name, download.download.name, download.download.human_size, colors.yellow(downloads.indexOf(download) + 1), colors.yellow(downloads.length)) } next() }) }, next) }, (error) => { if (error) { return next(error) } console.log(colors.green('Done')) next() }) }
var filteredOrders = orders.filter((order) => { return flatten(keypath.get(order, 'subproducts.[].downloads.[].platform')).indexOf('ebook') !== -1 })