Fix #33: new --cleanup option to remove unused generated thumbnails/media

pull/64/merge
Romain 7 years ago
parent 9dcebe6280
commit fb77791c80

@ -64,6 +64,7 @@ Output options:
--large-size Pixel height of the fullscreen photos [number] [default: 1000]
--original-photos Copy and allow download of full-size photos [boolean] [default: false]
--original-videos Copy and allow download of full-size videos [boolean] [default: false]
--cleanup Remove any output file that's no longer needed [boolean] [default: false]
Album options:
--albums-from How to group media into albums [choices: "folders", "date"] [default: "folders"]

@ -58,6 +58,12 @@ var opts = yargs
type: 'boolean',
'default': false
},
'cleanup': {
group: 'Output options:',
description: 'Remove any output file that\'s no longer needed',
type: 'boolean',
'default': false
},
// ------------------------------------
// Album options
@ -159,6 +165,7 @@ var opts = yargs
index.build({
input: path.resolve(opts['input']),
output: path.resolve(opts['output']),
cleanup: opts['cleanup'],
title: opts['title'],
thumbSize: opts['thumb-size'],
largeSize: opts['large-size'],

@ -30,6 +30,7 @@
"debug": "^2.6.1",
"exiftool-json-db": "~1.0.0",
"fs-extra": "^2.0.0",
"fs-readdir-recursive": "^1.0.0",
"gm": "^1.23.0",
"handlebars": "~4.0.5",
"less": "^2.7.1",

@ -2,6 +2,7 @@ const async = require('async')
const fs = require('fs-extra')
const path = require('path')
const os = require('os')
const cleanup = require('./output-media/cleanup')
const database = require('./input/database')
const progress = require('./utils/progress')
const File = require('./input/file')
@ -43,6 +44,11 @@ exports.build = function (opts) {
parallel(videos, bar, callback)
},
function removeOldOutput (callback) {
if (!opts.cleanup) return callback()
cleanup.run(fileCollection, opts.output, callback)
},
function createAlbums (callback) {
const bar = progress.create('Creating albums')
const albumMapper = mapper.create(opts)

@ -0,0 +1,24 @@
const _ = require('lodash')
const fs = require('fs')
const path = require('path')
const readdir = require('fs-readdir-recursive')
const progress = require('../utils/progress')
exports.run = function (fileCollection, outputRoot, callback) {
const mediaRoot = path.join(outputRoot, 'media')
const diskFiles = readdir(mediaRoot).map(f => path.join(mediaRoot, f))
const requiredFiles = []
fileCollection.forEach(f => {
Object.keys(f.output).forEach(out => {
var dest = path.join(outputRoot, f.output[out].path)
requiredFiles.push(dest)
})
})
const useless = _.difference(diskFiles, requiredFiles)
if (useless.length) {
const bar = progress.create('Cleaning up', useless.length)
useless.forEach(f => fs.unlinkSync(f))
bar.tick(useless.length)
}
callback()
}
Loading…
Cancel
Save