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

73 lines
1.7 KiB
JavaScript

const Listr = require('listr')
const steps = require('./steps/index')
const website = require('./website/website')
const Problems = require('./problems')
exports.build = function (opts, done) {
// How to render tasks
const renderer = (opts.log === 'default') ? 'update' : 'verbose'
// List of high level tasks
const tasks = new Listr([
{
title: 'Indexing folder',
task: (ctx, task) => {
return steps.index(opts, (err, files, album) => {
if (!err) {
ctx.files = files
ctx.album = album
}
})
}
},
{
title: 'Resizing media',
task: (ctx, task) => {
ctx.problems = new Problems()
const tasks = steps.process(ctx.files, ctx.problems, opts, task)
if (!opts.dryRun) {
return tasks
} else {
task.skip()
return null
}
}
},
{
title: 'Updating ZIP files',
enabled: (ctx) => opts.albumZipFiles,
skip: () => opts.dryRun,
task: (ctx) => {
return steps.zipAlbums(ctx.album, opts.output)
}
},
{
title: 'Cleaning up',
enabled: (ctx) => opts.cleanup,
task: (ctx) => {
return steps.cleanup(ctx.files, opts.output, opts.dryRun)
}
},
{
title: 'Creating website',
skip: () => opts.dryRun,
task: (ctx) => new Promise((resolve, reject) => {
website.build(ctx.album, opts, err => {
err ? reject(err) : resolve()
})
})
}
], {
renderer,
dateFormat: false
})
tasks.run().then(ctx => {
done(null, {
album: ctx.album,
problems: ctx.problems
})
}).catch(err => {
done(err)
})
}