Extract reusable "regen" module to process source / dest files

pull/9/head
rprieto 10 years ago
parent 6055952af1
commit 3c2c3aae96

@ -28,6 +28,7 @@
"commander": "~2.2.0",
"glob": "~3.2.9",
"async": "~0.7.0",
"pad": "~0.0.4"
"pad": "~0.0.4",
"regen": "~0.0.1"
}
}

@ -3,12 +3,12 @@ var fs = require('fs-extra');
var path = require('path');
var async = require('async');
var pad = require('pad');
var regen = require('regen');
var galleries = require('./galleries');
var render = require('./render');
var thumbs = require('./thumbs');
var files = require('./files');
var make = require('./make');
exports.build = function(opts) {
@ -65,7 +65,7 @@ exports.build = function(opts) {
}
function photoLarge(callback) {
make({
regen({
source: opts.input,
filter: '**/*.{jpg,jpeg,png}',
dest: media + '/large/$path/$name.$ext',
@ -74,7 +74,7 @@ exports.build = function(opts) {
}
function photoThumbs(callback) {
make({
regen({
source: opts.input,
filter: '**/*.{jpg,jpeg,png}',
dest: media + '/thumbs/$path/$name.$ext',
@ -83,7 +83,7 @@ exports.build = function(opts) {
}
function videoLarge(callback) {
make({
regen({
source: opts.input,
filter: '**/*.{mp4,mov}',
dest: media + '/large/$path/$name.jpg',
@ -92,7 +92,7 @@ exports.build = function(opts) {
}
function videoThumbs(callback) {
make({
regen({
source: opts.input,
filter: '**/*.{mp4,mov}',
dest: media + '/thumbs/$path/$name.jpg',

@ -1,57 +0,0 @@
var _ = require('lodash');
var fs = require('fs-extra');
var os = require('os');
var path = require('path');
var glob = require('glob');
var async = require('async');
var fileUtils = require('./files');
module.exports = function(opts, callback) {
if (typeof opts.dest === 'string') {
opts.dest = rename(opts.dest);
}
var globOptions = {
cwd: opts.source,
nonull: false,
nocase: true
};
glob(opts.filter, globOptions, function (err, files) {
if (err) return callback(err);
// create list of src/dest pairs
var tasks = files.map(function(file) {
return {
src: path.resolve(path.join(opts.source, file)),
dest: path.resolve(opts.dest(file))
};
});
// create all required folders
var folders = _(tasks).pluck('dest').map(path.dirname).uniq().value();
folders.forEach(function(f) { fs.mkdirsSync(f, 0777); });
// run them in parallel
var fns = tasks.filter(function(task) {
return fileUtils.newer(task.src, task.dest);
}).map(function(task) {
return opts.process.bind(this, task.src, task.dest);
});
async.parallelLimit(fns, os.cpus().length, callback);
});
};
function rename(pattern) {
var parts = pattern.split('/');
var full = path.join.apply(this, parts);
return function(file) {
return full.replace('$path', path.dirname(file))
.replace('$name', path.basename(file, path.extname(file)))
.replace('$ext', path.extname(file).substr(1));
}
}
Loading…
Cancel
Save