100 lines
2.7 KiB
JavaScript
100 lines
2.7 KiB
JavaScript
/**---------------------
|
||
* @name tykayn Rangement
|
||
* @description Rangement sorts and rename files depending on their exif data
|
||
* @contact contact@cipherbliss.com
|
||
--------------------- */
|
||
/** ---------------------
|
||
libs
|
||
--------------------- */
|
||
import fs from 'node-fs'
|
||
import minimist from 'minimist'
|
||
/** ---------------------
|
||
custom utilities and configuration
|
||
--------------------- */
|
||
import { enableTestsLocally, reportStatistics, tagSectionSeparator, tagSeparator } from './configs.mjs'
|
||
import {
|
||
TestFindFormattedDate,
|
||
TestScreenShotIsFoundAndRenamed,
|
||
TestTagsAreDetectedInFileName
|
||
} from './testFunctions.mjs'
|
||
import finder from './finder.mjs'
|
||
|
||
let mini_arguments;
|
||
console.log(' ')
|
||
|
||
function parseArguments () {
|
||
mini_arguments = minimist(process.argv.slice(2))
|
||
console.log('arguments', mini_arguments)
|
||
}
|
||
|
||
parseArguments()
|
||
|
||
|
||
function renameFile (originalFileName, fileMixedNewName) {
|
||
fs.rename(originalFileName, fileMixedNewName, function (err) {
|
||
if (err) console.log('rename ERROR: ' + err)
|
||
})
|
||
}
|
||
|
||
|
||
function makeFileNameFromProperties (fileProperties) {
|
||
|
||
let tagPlace = '';
|
||
if(fileProperties.tags.length){
|
||
tagPlace = ' ' + tagSectionSeparator + ' '
|
||
}
|
||
return finder.cleanSpaces( fileProperties.dateStamp + ' ' + fileProperties.freeText + tagPlace + fileProperties.tags.join(tagSeparator) + fileProperties.extension).replace(+ ' ' + tagSectionSeparator + ' '+'.' ,'.')
|
||
}
|
||
|
||
function appendFileName (fileProperties, newText) {
|
||
fileProperties.freeText = finder.cleanSpaces(fileProperties.freeText + ' ' + newText)
|
||
return fileProperties
|
||
}
|
||
|
||
function prependFileName (fileProperties, newText) {
|
||
fileProperties.freeText = finder.cleanSpaces(newText + ' ' + fileProperties.freeText)
|
||
return fileProperties
|
||
}
|
||
|
||
function guessFileNameOnAllFilesFromArguments(){
|
||
|
||
// parcourir les dossiers
|
||
// parcourir les fichiers
|
||
|
||
console.log('liste des fichiers', mini_arguments._)
|
||
let fileList = mini_arguments._;
|
||
fileList.forEach(fileName => {
|
||
|
||
let structureForFile = finder.destructurateFileName(fileName)
|
||
// examiner les infos exif de chaque fichier pour proposer un nouveau nom
|
||
if(!structureForFile.dateStamp){
|
||
let foundDate = finder.findExifCreationDate(fileName)
|
||
if(foundDate){
|
||
structureForFile.dateStamp = (finder.findExifCreationDate(fileName) + '')
|
||
}
|
||
}
|
||
|
||
let newname = makeFileNameFromProperties(structureForFile)
|
||
if(fileName !== newname ){
|
||
|
||
console.log(' nouveau nom:',newname )
|
||
}else{
|
||
console.log(' rien à changer' )
|
||
}
|
||
})
|
||
|
||
}
|
||
|
||
guessFileNameOnAllFilesFromArguments()
|
||
|
||
// run tests
|
||
if (enableTestsLocally) {
|
||
|
||
TestTagsAreDetectedInFileName()
|
||
TestFindFormattedDate()
|
||
TestScreenShotIsFoundAndRenamed()
|
||
}
|
||
if (reportStatistics || mini_arguments.stats) {
|
||
finder.reportStatistics()
|
||
}
|