publiclab/image-sequencer

View on GitHub
src/ExportBin.js

Summary

Maintainability
A
2 hrs
Test Coverage
var fs = require('fs');
var getDirectories = function(rootDir, cb) {
  fs.readdir(rootDir, function(err, files) {
    var dirs = [];
    if (typeof (files) == 'undefined' || files.length == 0) {
      cb(dirs);
      return [];
    }
    for (var index = 0; index < files.length; ++index) {
      var file = files[index];
      if (file[0] !== '.') {
        var filePath = rootDir + '/' + file;
        fs.stat(filePath, function(err, stat) {
          if (stat.isDirectory()) {
            dirs.push(this.file);
          }
          if (files.length === (this.index + 1)) {
            return cb(dirs);
          }
        }.bind({ index: index, file: file }));
      }
    }
  });
};

module.exports = function ExportBin(dir = './output/', ref, basic, filename) {

  // If user did not give an output filename so we can continue without doing anything
  dir = (dir[dir.length - 1] == '/') ? dir : dir + '/';
  if (ref.options.inBrowser) return false;
  fs.access(dir, function(err) {
    if (err) console.error(err);
  });
  if (filename && basic) {
    var steps = ref.steps;
    var datauri = steps.slice(-1)[0].output.src;
    var ext = steps.slice(-1)[0].output.format;
    var buffer = require('data-uri-to-buffer')(datauri);
    fs.writeFile(dir + filename, buffer, function() { });
  }
  else {
    getDirectories(dir, function(dirs) {
      var num = 1;
      for (var d in dirs) {
        if (dirs[d].match(/^sequencer(.*)$/) == null) continue;
        var n = parseInt(dirs[d].match(/^sequencer(.*)$/)[1]);
        num = (n >= num) ? (n + 1) : num;
      }
      fs.mkdir(dir + 'sequencer' + num, function() {
        var root = dir + 'sequencer' + num + '/';
        var steps = ref.steps;
        if (basic) {
          var datauri = steps.slice(-1)[0].output.src;
          var ext = steps.slice(-1)[0].output.format;
          var buffer = require('data-uri-to-buffer')(datauri);
          fs.writeFile(root + 'image' + '_' + (steps.length - 1) + '.' + ext, buffer, function() { });
        }
        else {
          for (var i in steps) {
            var datauri = steps[i].output.src;
            var ext = steps[i].output.format;
            var buffer = require('data-uri-to-buffer')(datauri);
            fs.writeFile(root + 'image' + '_' + i + '.' + ext, buffer, function() { });
          }
        }
      });
    });
  }
};