Exemplo n.º 1
0
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()
  })
}
Exemplo n.º 2
0
 var filteredOrders = orders.filter((order) => {
   return flatten(keypath.get(order, 'subproducts.[].downloads.[].platform')).indexOf('ebook') !== -1
 })