diff --git a/src/index.js b/src/index.js index ca819f4..bc5ef8e 100644 --- a/src/index.js +++ b/src/index.js @@ -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); }, diff --git a/src/galleries.js b/src/view-model.js similarity index 62% rename from src/galleries.js rename to src/view-model.js index 3100873..f02e1da 100644 --- a/src/galleries.js +++ b/src/view-model.js @@ -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); - }); }; diff --git a/src/website.js b/src/website.js index c4c7b54..ba55bb3 100644 --- a/src/website.js +++ b/src/website.js @@ -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) {