add log level, start i18n

This commit is contained in:
Tykayn 2023-07-04 12:08:05 +02:00 committed by tykayn
parent 70b86ff4bd
commit 66df16671e
7 changed files with 112 additions and 24 deletions

View File

@ -25,11 +25,22 @@ mais ce n'est pas encore prêt à être utilisé en production.
"npm start" gives you a demo of what Rangement can do, but this is not a production ready package yet.
# done
* Handle verbosity levels in logs
- log.trace(msg)
- log.debug(msg)
- log.info(msg)
- log.warn(msg)
- log.error(msg)
# Roadmap
* Internationalisation of console texts
* Proper testing
* Handle verbosity levels
* Handle a configuration file
* create config file if needed
- * create config file if needed
* batch rename like the python pip script "guessfilename"
* revert renaming actions
* Log renaming actions
- * Log renaming actions

View File

@ -8,6 +8,8 @@
--------------------- */
import fs from 'node-fs'
import minimist from 'minimist'
import log from 'loglevel';
/** ---------------------
custom utilities and configuration
--------------------- */
@ -20,19 +22,20 @@ import {
import finder from './finder.mjs'
let mini_arguments
console.log(' ')
log.setLevel('info')
log.info(' ')
function parseArguments () {
mini_arguments = minimist(process.argv.slice(2))
console.log('arguments', mini_arguments)
log.info('arguments', mini_arguments)
}
parseArguments()
function renameFile (originalFileName, fileMixedNewName) {
fs.rename(originalFileName, fileMixedNewName, function (err) {
console.log('name changed', fileMixedNewName)
if (err) console.log('rename ERROR: ' + err)
log.info('name changed', fileMixedNewName)
if (err) log.info('rename ERROR: ' + err)
})
}
@ -57,22 +60,22 @@ function makeFileNameFromProperties(fileProperties) {
}
function shouldWeChangeName (structureForFile) {
console.log(' ______ allez hop fini la recherche on fait un nouveau nom')
console.log('structureForFile', structureForFile)
log.info(' ______ allez hop fini la recherche on fait un nouveau nom')
log.info('structureForFile', structureForFile)
let newName = makeFileNameFromProperties(structureForFile)
if (structureForFile.fileNameOriginal !== newName) {
console.log('\n ancien nom :', structureForFile.fileNameOriginal)
// console.log(' nouveau nom:', foundDate +structureForFile.freeText + structureForFile.tags.join(tagSeparator) + structureForFile.extension )
console.log(' nouveau nom:', newName)
log.info('\n ancien nom :', structureForFile.fileNameOriginal)
// log.info(' nouveau nom:', foundDate +structureForFile.freeText + structureForFile.tags.join(tagSeparator) + structureForFile.extension )
log.info(' nouveau nom:', newName)
if(! mini_arguments.dryRun){
renameFile(structureForFile.fullPath, structureForFile.folderPath + newName)
}
else{
console.log('no renaming for real, this is a dry run')
log.info('no renaming for real, this is a dry run')
}
} else {
console.log(' rien à changer')
log.info(' rien à changer')
}
}
@ -82,7 +85,7 @@ async function guessFileNameOnAllFilesFromArguments () {
// parcourir les dossiers
// parcourir les fichiers
console.log('liste des fichiers', mini_arguments._)
log.info('liste des fichiers', mini_arguments._)
let fileList = mini_arguments._
fileList.forEach(fullPath => {
@ -91,19 +94,19 @@ async function guessFileNameOnAllFilesFromArguments () {
// examiner les infos exif de chaque fichier pour proposer un nouveau nom
if (!structureForFile.dateStampInFileNameOriginal) {
console.log(' le nom de fichier ne contient pas de date formatée au début')
log.info(' le nom de fichier ne contient pas de date formatée au début')
finder.findExifCreationDate(structureForFile.fullPath)
.then(data => {
console.log(' ... chercher la date de création')
log.info(' ... chercher la date de création')
let foundDate = finder.findEarliestDateInExifData(data)
console.log(' =>>>>>>> foundDate : ', foundDate)
log.info(' =>>>>>>> foundDate : ', foundDate)
if (foundDate) {
// finder.findEarliestDateInExifData(fullPath).then(response => {
// console.log(' ... trouvée')
// log.info(' ... trouvée')
// if (response) {
structureForFile.dateStampExif = foundDate
@ -112,13 +115,13 @@ async function guessFileNameOnAllFilesFromArguments () {
// })
} else {
console.log('pas de date trouvée dans le nom')
log.info('pas de date trouvée dans le nom')
}
}
,
(error) => {
console.log('/////////// Error in reading exif of file: ' + error.message)
log.info('/////////// Error in reading exif of file: ' + error.message)
return ''
})
}

0
locales/en/en.json Normal file
View File

0
locales/fr/fr.json Normal file
View File

41
package-lock.json generated
View File

@ -10,6 +10,7 @@
"license": "AGPL-3.0-or-later",
"dependencies": {
"exifr": "^7.1.3",
"i18next": "^23.2.6",
"minimist": "^1.2.8",
"moment": "^2.29.4",
"node-fs": "^0.1.7"
@ -21,6 +22,7 @@
"@jest/globals": "^29.5.0",
"babel-jest": "^29.5.0",
"jest": "^29.5.0",
"loglevel": "^1.8.1",
"nodemon": "^2.0.22",
"ts-node": "^10.9.1"
}
@ -1798,7 +1800,6 @@
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.5.tgz",
"integrity": "sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA==",
"dev": true,
"dependencies": {
"regenerator-runtime": "^0.13.11"
},
@ -3280,6 +3281,28 @@
"node": ">=10.17.0"
}
},
"node_modules/i18next": {
"version": "23.2.6",
"resolved": "https://registry.npmjs.org/i18next/-/i18next-23.2.6.tgz",
"integrity": "sha512-i0P2XBisewaICJ7UQtwymeJj6cXUigM+s8XNIXmWk4oJ8iTok2taCbOTX0ps+u9DFcQ6FWH6xLIU0dLEnMaNbA==",
"funding": [
{
"type": "individual",
"url": "https://locize.com"
},
{
"type": "individual",
"url": "https://locize.com/i18next.html"
},
{
"type": "individual",
"url": "https://www.i18next.com/how-to/faq#i18next-is-awesome.-how-can-i-support-the-project"
}
],
"dependencies": {
"@babel/runtime": "^7.22.5"
}
},
"node_modules/ignore-by-default": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz",
@ -4174,6 +4197,19 @@
"integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==",
"dev": true
},
"node_modules/loglevel": {
"version": "1.8.1",
"resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.8.1.tgz",
"integrity": "sha512-tCRIJM51SHjAayKwC+QAg8hT8vg6z7GSgLJKGvzuPb1Wc+hLzqtuVLxp6/HzSPOozuK+8ErAhy7U/sVzw8Dgfg==",
"dev": true,
"engines": {
"node": ">= 0.6.0"
},
"funding": {
"type": "tidelift",
"url": "https://tidelift.com/funding/github/npm/loglevel"
}
},
"node_modules/lru-cache": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
@ -4677,8 +4713,7 @@
"node_modules/regenerator-runtime": {
"version": "0.13.11",
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz",
"integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==",
"dev": true
"integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg=="
},
"node_modules/regenerator-transform": {
"version": "0.15.1",

View File

@ -25,6 +25,7 @@
"license": "AGPL-3.0-or-later",
"dependencies": {
"exifr": "^7.1.3",
"i18next": "^23.2.6",
"minimist": "^1.2.8",
"moment": "^2.29.4",
"node-fs": "^0.1.7"
@ -36,6 +37,7 @@
"@jest/globals": "^29.5.0",
"babel-jest": "^29.5.0",
"jest": "^29.5.0",
"loglevel": "^1.8.1",
"nodemon": "^2.0.22",
"ts-node": "^10.9.1"
}

37
setup.mjs Normal file
View File

@ -0,0 +1,37 @@
/**
création de la config
*/
import config from './configs.mjs'
import i18next from 'i18next'
let base_archive_folder = config.base_archive_folder
const { stdin, stdout } = process;
function prompt(question) {
return new Promise((resolve, reject) => {
stdin.resume();
stdout.write(question);
stdin.on('data', data => resolve(data.toString().trim()));
stdin.on('error', err => reject(err));
});
}
async function main() {
try {
const name = await prompt(i18next.t("home.title"))
// const age = await prompt("What's your age? ");
// const email = await prompt("What's your email address? ");
// const user = { name, age, email };
console.log(name);
stdin.pause();
} catch(error) {
console.log("There's an error!");
console.log(error);
}
process.exit();
}
main();