Use the pre-built metadata to create the galleries view model

Fixes #4 : sorts the files by either EXIF date (photos) or file date (videos)
pull/9/head
rprieto 10 years ago
parent 11575c65d4
commit 63ee950684

@ -69,22 +69,6 @@ exports.build = function(opts) {
process: thumbs.videoSquare,
}),
// buildStep('Read EXIF data', {
// cwd: opts.input,
// src: '**/*.{jpg,jpeg}',
// dest: metaFile,
// process: function(src, dest, callback) {
// fs.readFile(src, function(err, buffer) {
// var result = exif.create(buffer).parse();
// var filePath = path.relative(opts.input, src);
// metadata.exif[filePath] = {
// date: result.tags.DateTimeOriginal
// };
// callback();
// });
// }
// }),
function updateMetadata(callback) {
metadata.update(opts, callback);
},

@ -3,21 +3,21 @@ var fs = require('fs');
var path = require('path');
var glob = require('glob');
exports.fromDisk = function(mediaPath, thumbSize, callback) {
exports.build = function(metadata, thumbSize) {
function fileInfo(file) {
function fileInfo(data, file) {
return {
date: date(mediaPath, file),
name: path.basename(file),
date: data.date,
path: file,
video: isVideo(file),
name: path.basename(file),
video: data.type === 'video',
size: thumbSize,
urls: urls(file)
urls: urls(file, data)
}
}
function urls(file) {
if (isVideo(file)) {
function urls(file, data) {
if (data.type === 'video') {
return {
original: path.join('media', 'original', file),
web: path.join('media', 'large', ext(file, 'mp4')),
@ -33,18 +33,10 @@ exports.fromDisk = function(mediaPath, thumbSize, callback) {
}
}
function date(file) {
return fs.statSync(file).ctime.getTime();
}
function ext(file, ext) {
return file.replace(/\.[a-z0-9]+$/i, '.' + ext);
}
function isVideo(file) {
return (file.match(/\.(mp4|mov)$/) != null);
}
function byFolder(file) {
return path.dirname(file.path);
}
@ -57,21 +49,10 @@ exports.fromDisk = function(mediaPath, thumbSize, callback) {
};
}
var globOptions = {
cwd: mediaPath,
nonull: false,
nocase: true
};
glob('**/*.{jpg,jpeg,png,mp4,mov}', globOptions, function (err, files) {
if (err) return callback(err);
var galleries = _(files)
.map(fileInfo)
return _(metadata).map(fileInfo)
.sortBy('date')
.groupBy(byFolder)
.map(folderInfo)
.value();
callback(null, galleries);
});
};

@ -2,7 +2,7 @@ var fs = require('fs-extra');
var path = require('path');
var async = require('async');
var pad = require('pad');
var galleries = require('./galleries');
var viewModel = require('./view-model');
var render = require('./render');
var files = require('./files');
@ -10,23 +10,24 @@ var files = require('./files');
exports.build = function(opts, callback) {
function website(callback) {
galleries.fromDisk(opts.input, opts.thumbSize, function(err, list) {
if (err) return callback(err);
var style = opts.css ? path.basename(opts.css) : null;
var metadata = require(path.join(opts.output, 'metadata.json'));
var galleries = viewModel.build(metadata, opts.thumbSize);
var rendered = render.gallery(list, list[0], opts.title, style);
var outputPath = path.join(opts.output, 'index.html');
var style = opts.css ? path.basename(opts.css) : null;
var rendered = render.gallery(galleries, galleries[0], opts.title, style);
var outputPath = path.join(opts.output, 'index.html');
fs.writeFileSync(outputPath, rendered);
galleries.forEach(function(folder) {
var rendered = render.gallery(galleries, folder, opts.title, style);
var outputPath = path.join(opts.output, folder.url);
fs.writeFileSync(outputPath, rendered);
list.forEach(function(folder) {
var rendered = render.gallery(list, folder, opts.title, style);
var outputPath = path.join(opts.output, folder.url);
fs.writeFileSync(outputPath, rendered);
});
callback();
});
callback();
}
function support(callback) {

Loading…
Cancel
Save