crunch-node/genPhotos.js

92 lines
2.9 KiB
JavaScript

var fs = require('fs');
var gm = require('gm');
var mkdirp = require('mkdirp');
var markdown = require( "markdown" ).markdown;
var jade = require('jade');
var config = require('./config.js').config;
var db = require('./db.js');
var helper = require('./helper.js');
var generatePhotoSizesById = function generatePhotoSizesById(id, cb) {
db.getPhotoById(id, function (photo) {
if (photo) console.log('Got photo record for: '+photo.slug);
var shortDate = helper.epochToShortDateString(photo.photoDate);
var failure = false;
var folder = config.genDir+'/photos/'+photo.slug;
mkdirp(folder, function(err) {
if (err) console.log(err);
for (var size in config.imageSizes) {
console.log('Generating '+size+' for '+photo.slug);
var file = folder + '/'+size+'.'+photo.extension;
(function(size){
gm(photo.path)
.autoOrient()
.resize(config.imageSizes[size], config.imageSizes[size])
.write(file,
function(err) {
if (err) {
console.log(photo.slug+' resize failed.');
failure = true;
}
else {
console.log(photo.slug+' '+size+' generated.');
}
}
);
})(size);
}
});
cb(failure);
});
}
exports.generatePhotoSizesById = generatePhotoSizesById;
var generatePhotoPage = function (id, cb) {
db.getPhotoById(id, function(photo) {
console.log('Fetching photo id: '+id);
var description = markdown.toHTML(photo.description);
var photoDate = helper.epochToShortDateString(photo.photoDate);
var url = '/photos/'+photo.slug+'/';
var filepath = config.genDir+url;
var filename = filepath+'index.html';
var options = {
pretty: false,
title: photo.title,
description: description,
slug: photo.slug,
url: url,
extension: photo.extension,
postDate: photo.photoDate
};
console.log('Rendering photo: '+photo.title);
var jadeOut = jade.renderFile('views/render-photo.jade', options);
console.log('Creating directory: '+filepath);
mkdirp(filepath, function(err) {
if (err) {
console.log(err);
}
else {
console.log('Writing to file: '+filename);
fs.writeFile(filename, jadeOut, 'utf-8', function(err) {
if (err) console.log(err);
cb(err);
});
}
});
});
}
exports.generatePhotoPage = generatePhotoPage;