diff --git a/lib/ui.js b/lib/ui.js index 250daab..c12d14c 100644 --- a/lib/ui.js +++ b/lib/ui.js @@ -1,34 +1,33 @@ const clipboardy = require('clipboardy'); const opn = require('opn'); -// const os = require('os'); +const os = require('os'); const path = require('path'); -// const pathExists = require('path-exists'); +const pathExists = require('path-exists'); const rename = require('../rename'); const term = require('terminal-kit').terminal; -// const traverse = require('traverse'); +const traverse = require('traverse'); const yargs = require('yargs'); const yargsOptions = require('./yargsOptions'); -// const defaultData = require('../lib/data'); -// let userData; -// if (pathExists.sync(os.homedir() + '/.rename/userData.js')) { -// userData = require(os.homedir() + '/.rename/userData.js'); -// } else { -// userData = function() { return {}; }; -// } -// let fo = path.parse(__filename); -// let defaultVars = defaultData(fo); -// let userVars = userData(fo); -// let allData = Object.assign(defaultVars, userVars); -// console.dir(allData); -// let variableNames = traverse.paths(allData).map(p => { -// console.dir(p); -// if (p.length === 1 && typeof allData[p[0]] !== "object") { -// return p[0]; -// } else if (p.length > 1) { -// return p.join('.'); -// } -// }).filter(p => p !== undefined); +const defaultData = require('../lib/data'); +let userData; +if (pathExists.sync(os.homedir() + '/.rename/userData.js')) { + userData = require(os.homedir() + '/.rename/userData.js'); +} else { + userData = function() { return {}; }; +} +let fo = path.parse(__filename); +let defaultVars = defaultData(fo); +let userVars = userData(fo); +let allData = Object.assign(defaultVars, userVars); +let variableNames = traverse.paths(allData).map(p => { + console.dir(p); + if (p.length === 1 && typeof allData[p[0]] !== "object") { + return p[0]; + } else if (p.length > 1) { + return p.join('.'); + } +}).filter(p => p !== undefined); let TIMEOUT; let REFRESH = true; @@ -58,11 +57,7 @@ term.on('key', function (name, matches, data) { term.fullscreen(true); term('rename '); -term.saveCursor(); -let helpText = 'Rename-CLI v' + require('../package.json').version + ' Type CTRL-H to view online help'; -let helpTextX = (term.width / 2) - (helpText.length / 2); -term.moveTo(helpTextX, term.height, helpText); -term.restoreCursor(); +setHelpText(); let inputField = term.inputField({cancelable: true}, function (error, input) { @@ -77,6 +72,13 @@ let inputField = term.inputField({cancelable: true}, ); function updateCommands() { + let variableMatch = inputField.getInput().match('{{\\s*([A-z.]*)$'); + if (variableMatch) { + let matchingVars = variableNames.filter(v => v.startsWith(variableMatch[1])).join(', '); + setHelpText('Variables: ' + matchingVars); + } else { + setHelpText(); + } term.saveCursor(); term.eraseArea(1, 2, term.width, term.height - 2); term.moveTo(1, 3, 'working...'); @@ -136,3 +138,17 @@ function inputSubmitted(input) { } }); } + +function setHelpText(helpText, center) { + if (helpText === undefined) { + helpText = 'Rename-CLI v' + require('../package.json').version + ' Type CTRL-H to view online help'; + center = true; + } + term.saveCursor(); + let helpTextX; + if (center && helpText.length < term.width) helpTextX = (term.width / 2) - (helpText.length / 2); + else helpTextX = 1; + helpText = truncate(helpText); + term.moveTo(helpTextX, term.height).eraseLine().moveTo(helpTextX, term.height, helpText); + term.restoreCursor(); +} diff --git a/lib/yargsOptions.js b/lib/yargsOptions.js index 385a9d2..5213983 100644 --- a/lib/yargsOptions.js +++ b/lib/yargsOptions.js @@ -50,6 +50,10 @@ module.exports = { boolean: true, describe: 'Do not rename directories', showInUi: true + }, 'sort': { + boolean: false, + describe: 'Sort files before renaming. Parameter: alphabet (default), date-create (most recent first), date-modified (most recent first), size (biggest first). Include the word reverse before or after to reverse the order.', + showInUi: true }, 'p': { alias: 'prompt', boolean: true, diff --git a/rename.js b/rename.js index 948c386..f1d7453 100644 --- a/rename.js +++ b/rename.js @@ -67,9 +67,21 @@ function getOperations(files, newFileName, options) { fileObj.options = options; fileObj = replaceVariables(fileObj); if (!options.noTrim) fileObj.newName = fileObj.newName.trim(); + + let stats = fs.statSync(fullPath, true); + fileObj.size = stats.size; + fileObj.dateCreate = stats.birthtimeMs; + fileObj.dateModify = stats.mtimeMs; return fileObj; }).filter(f => f !== undefined); + if (options.sort) { + if (options.sort.includes('date-create')) fileObjects = fileObjects.sort((a,b) => { return b.dateCreate - a.dateCreate; }); + else if (options.sort.includes('date-modify')) fileObjects = fileObjects.sort((a,b) => { return b.dateModify - a.dateModify; }); + else if (options.sort.includes('size')) fileObjects = fileObjects.sort((a,b) => { return b.size - a.size; }); + if (options.sort.includes('reverse')) fileObjects.reverse(); + } + // Add indices if (!options.noIndex) { let counts = {}; @@ -152,7 +164,8 @@ function argvToOptions(argv) { noMove: (argv.nomove ? true : false), createDirs: (argv.createdirs ? true : false), noExt: (argv.noext ? true : false), - noUndo: (argv.noundo ? true : false) + noUndo: (argv.noundo ? true : false), + sort: (argv.sort ? argv.sort : false) }; if (options.noMove && options.createDirs) options.createDirs = false; return options;