You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
thumbsup/src/index.js

110 lines
3.5 KiB
JavaScript

10 years ago
var _ = require('lodash');
var fs = require('fs-extra');
var os = require('os');
var path = require('path');
var wrench = require('wrench');
10 years ago
var gulp = require('gulp');
var newer = require('gulp-newer');
var rename = require("gulp-rename");
10 years ago
var imageResize = require('gulp-image-resize');
var parallel = require('concurrent-transform');
var exec = require('exec-sync');
var gm = require('gm');
var glob = require('glob');
var async = require('async');
10 years ago
var galleries = require('./galleries');
var render = require('./render');
var thumbs = require('./thumbs');
10 years ago
exports.build = function(opts) {
opts.size = opts.size || 100;
10 years ago
fs.mkdirp(opts.output);
var thumbsFolder = path.join(path.resolve(opts.output), 'thumbs');
console.log('thumbs=', thumbsFolder)
10 years ago
var list = galleries.fromDisk(opts.input, opts.mediaPrefix);
gulp.task('thumbs-photos', function() {
10 years ago
var dest = opts.output + '/thumbs';
gulp
.src(opts.input + '/**/*.{jpg,png}')
.pipe(newer(dest))
.pipe(parallel(imageResize({width: opts.size, height: opts.size, crop: true}), os.cpus().length))
10 years ago
.pipe(gulp.dest(dest));
});
gulp.task('thumbs-videos', function() {
glob('**/*.{mp4,mov}', {cwd: opts.input, nonull:false}, function (er, files) {
var fns = files.map(function(file) {
return function(next) {
thumbs.video({
input: path.resolve(path.join(opts.input, file)),
thumbnail: path.join(thumbsFolder, file.replace(/\.[a-z0-9]+$/, '.jpg')),
poster: path.join(thumbsFolder, file.replace(/\.[a-z0-9]+$/, '_poster.jpg')),
size: opts.size
}, next);
};
});
async.parallel(fns, function(err) {
console.log(err ? ('Videos: ' + err) : 'Videos [OK]');
});
});
// var files = wrench.readdirSyncRecursive(opts.input);
// var videos = files.filter(function(f) {
// return f.match(/\.(mp4|mov)$/);
// });
// videos.forEach(function(videoPath) {
// var input = path.join(opts.input, videoPath);
// var thumb = path.join(opts.output, 'thumbs', videoPath.replace(/\.[a-z0-9]+$/, '.jpg'));
// var poster = path.join(opts.output, 'thumbs', videoPath.replace(/\.[a-z0-9]+$/, '_poster.jpg'));
// var ffmpeg = 'ffmpeg -itsoffset -1 -i "' + input + '" -ss 0.1 -vframes 1 -y "' + poster + '"';
// var exec = require('child_process').exec
// exec(ffmpeg, function(err, stdout, stderr) {
// if (err) {
// console.error('ffmpeg:', err);
// }
// gm(poster)
// .resize(opts.size, opts.size, "^")
// .gravity('Center')
// .crop(opts.size, opts.size)
// .write(thumb, function (err) {
// if (err) console.error(err);
// });
// });
// });
});
10 years ago
gulp.task('index', function() {
var rendered = render.gallery(list, list[0]);
var outputPath = path.join(opts.output, 'index.html');
fs.writeFileSync(outputPath, rendered);
10 years ago
});
gulp.task('public', function() {
var dest = opts.output + '/public';
gulp
.src(path.join(__dirname, '..', 'public', '**'))
10 years ago
.pipe(newer(dest))
.pipe(gulp.dest(dest));
});
gulp.task('galleries', function() {
list.forEach(function(folder) {
var rendered = render.gallery(list, folder);
var outputPath = path.join(opts.output, folder.url);
fs.writeFileSync(outputPath, rendered);
});
});
gulp.run('thumbs-photos', 'thumbs-videos', 'public', 'index', 'galleries');
10 years ago
};