add editorconfig, reformat all

This commit is contained in:
Tykayn 2023-09-10 11:30:50 +02:00 committed by tykayn
parent e88493c58e
commit 1783ce4fba
19 changed files with 699 additions and 681 deletions

40
.editorconfig Executable file
View File

@ -0,0 +1,40 @@
# This file is for unifying the coding style for different editors and IDEs
# editorconfig.org
root = true
[*]
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
# Spaces in coffee
[**.coffee]
indent_style = tab
indent_size = 2
[**.js]
indent_style = tab
indent_size = 2
[**.ts]
indent_style = tab
indent_size = 2
# Tabs in less
[**.less]
indent_style = tab
indent_size = 2
[**.css]
indent_style = tab
indent_size = 2
[**.php]
indent_style = tab
indent_size = 2
[**.html]
indent_style = tab
indent_size = 2

View File

@ -1,12 +1,12 @@
const presets = [ const presets = [
[ [
"@babel/preset-env", '@babel/preset-env',
{ {
targets: { targets: {
node: 'current' node: 'current'
} }
} }
] ]
]; ]
module.exports = { presets }; module.exports = { presets }

View File

@ -6,55 +6,55 @@ import cv from './controlled_vocabulary'
import log, {LogLevelDesc} from 'loglevel' import log, {LogLevelDesc} from 'loglevel'
interface ConfigOverride { interface ConfigOverride {
iso_date_format?: string, iso_date_format?: string,
log_actions?: string, log_actions?: string,
log_level?: 'debug' | 'warn' | 'info', log_level?: 'debug' | 'warn' | 'info',
} }
/** /**
* configuration générale à importer dans les utilitaires * configuration générale à importer dans les utilitaires
*/ */
class config_rangement { class config_rangement {
log_level: LogLevelDesc = 'debug' // 'debug' | 'warn' |'info' log_level: LogLevelDesc = 'debug' // 'debug' | 'warn' |'info'
version = '1.0.0' version = '1.0.0'
iso_date_format = 'yyyy-MM-DDTHH.mm.ss' // target format for dates in file names iso_date_format = 'yyyy-MM-DDTHH.mm.ss' // target format for dates in file names
tagSeparator = ' ' tagSeparator = ' '
tagSectionSeparator = '--' tagSectionSeparator = '--'
keepFreeText = true keepFreeText = true
keepTags = true keepTags = true
replaceUnderscoreWithSpaces = true replaceUnderscoreWithSpaces = true
renameFolders = false renameFolders = false
enableTestsLocally = false enableTestsLocally = false
reportStatistics = true reportStatistics = true
controlled_vocabulary = cv controlled_vocabulary = cv
constants = constants constants = constants
base_archive_folder = constants.base_archive_folder base_archive_folder = constants.base_archive_folder
templates = mainTemplates; templates = mainTemplates;
statistics = {}; statistics = {};
keepOriginalNameInRename = false; keepOriginalNameInRename = false;
log_actions = true; log_actions = true;
/** /**
* override config if we want * override config if we want
* @param overridingConfig * @param overridingConfig
*/ */
constructor(overridingConfig?: ConfigOverride) { constructor(overridingConfig?: ConfigOverride) {
log.setLevel('info') log.setLevel('info')
if (overridingConfig) { if (overridingConfig) {
log.debug('configuration is overrided') log.debug('configuration is overrided')
let keys = Object.keys(overridingConfig) let keys = Object.keys(overridingConfig)
let self: any = this; let self: any = this;
keys.forEach((elem, index) => { keys.forEach((elem, index) => {
if (self[keys[index]]) { if (self[keys[index]]) {
self[keys[index]] = elem self[keys[index]] = elem
} }
}) })
} }
} }
} }
const rangement_instance = new config_rangement({}); const rangement_instance = new config_rangement({});

View File

@ -1,10 +1,12 @@
import constants from './folders' import constants from './folders'
interface fileDetectionTemplate{
interface fileDetectionTemplate {
'example': string, 'example': string,
'pattern': any, 'pattern': any,
'auto_tag'?:string, 'auto_tag'?: string,
'auto_sort_folder'?:string 'auto_sort_folder'?: string
} }
interface AssemblyOfFileDetection { interface AssemblyOfFileDetection {
downloaded_pic: fileDetectionTemplate, downloaded_pic: fileDetectionTemplate,
telegram_pic: fileDetectionTemplate, telegram_pic: fileDetectionTemplate,
@ -12,50 +14,50 @@ interface AssemblyOfFileDetection {
open_camera_custom: fileDetectionTemplate, open_camera_custom: fileDetectionTemplate,
screenshot: fileDetectionTemplate, screenshot: fileDetectionTemplate,
gopro_front: fileDetectionTemplate, gopro_front: fileDetectionTemplate,
gopro_back : fileDetectionTemplate gopro_back: fileDetectionTemplate
} }
const setOfFileDetections : AssemblyOfFileDetection= { const setOfFileDetections: AssemblyOfFileDetection = {
'downloaded_pic':{ 'downloaded_pic': {
'example': 'FyB8cZnWIAc21rw.jpg', 'example': 'FyB8cZnWIAc21rw.jpg',
'pattern': /^\-\w{15}\.jpg/, 'pattern': /^\-\w{15}\.jpg/,
'auto_tag':'', 'auto_tag': '',
'auto_sort_folder': constants.bazar_sub_folder 'auto_sort_folder': constants.bazar_sub_folder
}, },
'telegram_pic': { 'telegram_pic': {
'example': '-4900281569878475578_1109.jpg', 'example': '-4900281569878475578_1109.jpg',
'pattern': /^\-\d{19}_\d{4}/, 'pattern': /^\-\d{19}_\d{4}/,
'auto_tag':'', 'auto_tag': '',
'auto_sort_folder': constants.bazar_sub_folder 'auto_sort_folder': constants.bazar_sub_folder
}, },
'open_camera_default': { 'open_camera_default': {
'example': 'IMG_20230617_092120_3.jpg', 'example': 'IMG_20230617_092120_3.jpg',
'pattern': /^IMG_\d{8}/i, 'pattern': /^IMG_\d{8}/i,
'auto_tag':'', 'auto_tag': '',
'auto_sort_folder': constants.panoramax_captures_folder 'auto_sort_folder': constants.panoramax_captures_folder
}, },
'open_camera_custom': { 'open_camera_custom': {
'example': 'IMG_OC_20230617_092120_3.jpg', 'example': 'IMG_OC_20230617_092120_3.jpg',
'pattern': /^IMG_OC_\d{8}/i, 'pattern': /^IMG_OC_\d{8}/i,
'auto_tag':'', 'auto_tag': '',
'auto_sort_folder': constants.panoramax_captures_folder 'auto_sort_folder': constants.panoramax_captures_folder
}, },
'screenshot': { 'screenshot': {
'example': 'Screenshot 2023-06-15 at 15-26-04 Instance Panoramax OSM-FR.png', 'example': 'Screenshot 2023-06-15 at 15-26-04 Instance Panoramax OSM-FR.png',
'pattern': /^Screenshot/i, 'pattern': /^Screenshot/i,
'auto_tag':'screenshots', 'auto_tag': 'screenshots',
'auto_sort_folder': 'photos/captures écran screenshots' 'auto_sort_folder': 'photos/captures écran screenshots'
}, },
'gopro_front': { 'gopro_front': {
'example': 'GF010041.jpg', 'example': 'GF010041.jpg',
'pattern': /^GP?F\d+\.jpg/i, 'pattern': /^GP?F\d+\.jpg/i,
'auto_tag':'gopro-front gopro', 'auto_tag': 'gopro-front gopro',
'auto_sort_folder': constants.gopro_capture_folder 'auto_sort_folder': constants.gopro_capture_folder
}, },
'gopro_back': { 'gopro_back': {
'example': 'GB010041.jpg', 'example': 'GB010041.jpg',
'pattern': /^GP?B\d+\.jpg/i, 'pattern': /^GP?B\d+\.jpg/i,
'auto_tag':'gopro-back gopro', 'auto_tag': 'gopro-back gopro',
'auto_sort_folder': constants.gopro_capture_folder 'auto_sort_folder': constants.gopro_capture_folder
}, },
} }

View File

@ -3,10 +3,11 @@
*/ */
import config_rangement from './conf/configs.js' import config_rangement from './conf/configs.js'
let my_conf = new config_rangement({}) let my_conf = new config_rangement({})
console.log('config', my_conf.version) console.log('config', my_conf.version)
function createFoldersFromConfig(){ function createFoldersFromConfig () {
// TODO // TODO
} }

View File

@ -6,10 +6,7 @@
/** --------------------- /** ---------------------
libs libs
--------------------- */ --------------------- */
import fs from 'node-fs'
import minimist from 'minimist'
import log from 'loglevel' import log from 'loglevel'
import * as path from 'node:path'
/** --------------------- /** ---------------------
custom utilities and configuration custom utilities and configuration
--------------------- */ --------------------- */
@ -21,7 +18,6 @@ log.setLevel(rangement_instance.log_level)
log.info(' ') log.info(' ')
finder.parseArguments() finder.parseArguments()
finder.guessFileNameOnAllFilesFromArguments() finder.guessFileNameOnAllFilesFromArguments()

View File

@ -3,12 +3,12 @@
* https://jestjs.io/docs/configuration * https://jestjs.io/docs/configuration
*/ */
module.exports = { module.exports = {
testRegex: "(/__tests__/.*|(\\.|/)(test|spec))\\.(jsx?|js?|tsx?|ts?)$", testRegex: "(/__tests__/.*|(\\.|/)(test|spec))\\.(jsx?|js?|tsx?|ts?)$",
transform: { transform: {
"^.+\\.jsx?$": "babel-jest", "^.+\\.jsx?$": "babel-jest",
"^.+\\.mjs$": "babel-jest", "^.+\\.mjs$": "babel-jest",
"^.+\\.ts$": "babel-jest", "^.+\\.ts$": "babel-jest",
}, },
testPathIgnorePatterns: ["<rootDir>/build/", "<rootDir>/node_modules/"], testPathIgnorePatterns: ["<rootDir>/build/", "<rootDir>/node_modules/"],
moduleFileExtensions: ["js", "jsx", "mjs"] moduleFileExtensions: ["js", "jsx", "mjs"]
} }

View File

@ -6,10 +6,7 @@
/** --------------------- /** ---------------------
libs libs
--------------------- */ --------------------- */
import fs from 'node-fs'
import minimist from 'minimist'
import log from 'loglevel' import log from 'loglevel'
import path from 'node:path'
/** --------------------- /** ---------------------
custom utilities and configuration custom utilities and configuration
--------------------- */ --------------------- */
@ -21,9 +18,6 @@ let mini_arguments
log.setLevel(rangement_instance.log_level) log.setLevel(rangement_instance.log_level)
log.info(' ') log.info(' ')
finder.parseArguments() finder.parseArguments()
finder.guessFileNameOnAllFilesFromArguments() finder.guessFileNameOnAllFilesFromArguments()

View File

@ -44,8 +44,6 @@ describe('detection in file name', () => {
describe('modification in file name', () => { describe('modification in file name', () => {
test('should append to file name in the right place', () => { test('should append to file name in the right place', () => {
let fileNameOriginal = 'mon texte -- famille vacances plage.jpg' let fileNameOriginal = 'mon texte -- famille vacances plage.jpg'
let properties = finder.destructurateFileName(fileNameOriginal) let properties = finder.destructurateFileName(fileNameOriginal)

View File

@ -1,15 +1,12 @@
import finder from "../utils/finder.ts";
import { Jest as mockUpload } from '@jest/environment'
xdescribe('rangement file detection', () => { xdescribe('rangement file detection', () => {
// find how to mock process.env arguments // find how to mock process.env arguments
// const call = mockUpload.mock.calls[0][0] // const call = mockUpload.mock.calls[0][0]
test('returns a list of 2 files to parse when given the folder testFiles/meme_base', () => { test('returns a list of 2 files to parse when given the folder testFiles/meme_base', () => {
}); })
test('returns a list of 1 file to parse when given the argument testFiles/image.jpg', () => { test('returns a list of 1 file to parse when given the argument testFiles/image.jpg', () => {
}); })
test('returns a list of 0 file to parse when given the null argument', () => { test('returns a list of 0 file to parse when given the null argument', () => {
}); })
}) })

View File

@ -1,4 +1,3 @@
xdescribe('detection and tagging with content found in PDF content', () => { xdescribe('detection and tagging with content found in PDF content', () => {
xtest('should find invoice hint in pdf', () => { xtest('should find invoice hint in pdf', () => {

View File

@ -1,4 +1,3 @@
xdescribe('detection and renaming of templated file names', () => { xdescribe('detection and renaming of templated file names', () => {
xtest('should detect screenshot pattern', () => { xtest('should detect screenshot pattern', () => {

View File

@ -1,15 +1,12 @@
{ {
// This is an alias to @tsconfig/node16: https://github.com/tsconfig/bases // This is an alias to @tsconfig/node16: https://github.com/tsconfig/bases
"extends": "ts-node/node16/tsconfig.json", "extends": "ts-node/node16/tsconfig.json",
// Most ts-node options can be specified here using their programmatic names. // Most ts-node options can be specified here using their programmatic names.
"ts-node": { "ts-node": {
// It is faster to skip typechecking. // It is faster to skip typechecking.
// Remove if you want ts-node to do typechecking. // Remove if you want ts-node to do typechecking.
"transpileOnly": true, "transpileOnly": true,
"files": true, "files": true,
"compilerOptions": { "compilerOptions": {
// compilerOptions specified here will override those declared below, // compilerOptions specified here will override those declared below,
// but *only* in ts-node. Useful if you want ts-node and tsc to use // but *only* in ts-node. Useful if you want ts-node and tsc to use
@ -18,5 +15,6 @@
}, },
"compilerOptions": { "compilerOptions": {
// typescript options here // typescript options here
"allowSyntheticDefaultImports": true
} }
} }

File diff suppressed because it is too large Load Diff

View File

@ -1,16 +1,16 @@
export interface fileDestructuration { export interface fileDestructuration {
fullPath: string fullPath: string
folderPath: string folderPath: string
fileNameOriginal: string fileNameOriginal: string
dateStampInFileNameOriginal: string dateStampInFileNameOriginal: string
dateStampExif: string, dateStampExif: string,
freeText: string, freeText: string,
tags: string[], tags: string[],
extension: string, extension: string,
} }
export interface taggingCommand { export interface taggingCommand {
tagCommand: string, tagCommand: string,
tagsToAdd: Array<string>, tagsToAdd: Array<string>,
tagsToRemove: Array<string> tagsToRemove: Array<string>
} }

View File

@ -1,5 +1,4 @@
import finder from './finder.js' import finder from './finder.js'
const pathFolder = '/home/poule/encrypted/stockage-syncable/photos/a_dispatcher/tout' const pathFolder = '/home/poule/encrypted/stockage-syncable/photos/a_dispatcher/tout'
const sortingFolder = '/home/poule/encrypted/stockage-syncable/photos/a_dispatcher' const sortingFolder = '/home/poule/encrypted/stockage-syncable/photos/a_dispatcher'
@ -11,7 +10,7 @@ const fileDefinition = {
extension: '', extension: '',
} }
export function TestScreenShotIsFoundAndRenamed() { export function TestScreenShotIsFoundAndRenamed () {
let screenShotMockFileName = 'Screenshot 2023-06-15 at 15-28-21 Instance Panoramax OSM-FR.png' let screenShotMockFileName = 'Screenshot 2023-06-15 at 15-28-21 Instance Panoramax OSM-FR.png'
let screenShotMockFileNameExpected = '2023-06-15 at 15-28-21 Instance Panoramax OSM-FR -- screenshot.png' let screenShotMockFileNameExpected = '2023-06-15 at 15-28-21 Instance Panoramax OSM-FR -- screenshot.png'
@ -26,7 +25,7 @@ export function TestScreenShotIsFoundAndRenamed() {
} }
} }
export function TestTagsAreDetectedInFileName() { export function TestTagsAreDetectedInFileName () {
let mockFileName = '2023-06-15T10:11:12 -- screeenshot festival.png' let mockFileName = '2023-06-15T10:11:12 -- screeenshot festival.png'
let expectedResult = ['screeenshot', 'festival'] let expectedResult = ['screeenshot', 'festival']
let found = finder.findTagSectionInString(mockFileName) let found = finder.findTagSectionInString(mockFileName)
@ -35,8 +34,7 @@ export function TestTagsAreDetectedInFileName() {
} }
} }
export function TestFindFormattedDate () {
export function TestFindFormattedDate() {
let mockFileName = 'Capture d\'écran 2023-06-15T10:11:12.png' let mockFileName = 'Capture d\'écran 2023-06-15T10:11:12.png'
let expectedResult = '2023-06-15T10:11:12' let expectedResult = '2023-06-15T10:11:12'
let found = finder.findFormattedDate(mockFileName) let found = finder.findFormattedDate(mockFileName)

View File

@ -134,7 +134,6 @@ class notReadyFunctions {
} }
// run tests // run tests
if (rangement_instance.enableTestsLocally) { if (rangement_instance.enableTestsLocally) {
@ -143,7 +142,4 @@ if (rangement_instance.enableTestsLocally) {
TestScreenShotIsFoundAndRenamed() TestScreenShotIsFoundAndRenamed()
} }
export default notReadyFunctions export default notReadyFunctions

View File

@ -2,37 +2,36 @@
création de la config création de la config
*/ */
// import i18next from 'i18next' // import i18next from 'i18next'
import config_rangement from "../../conf/configs.js"; import config_rangement from '../../conf/configs.js'
const { stdin, stdout } = process; const { stdin, stdout } = process
function prompt(question) { function prompt (question) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
stdin.resume(); stdin.resume()
stdout.write(question); stdout.write(question)
stdin.on('data', data => resolve(data.toString().trim())); stdin.on('data', data => resolve(data.toString().trim()))
stdin.on('error', err => reject(err)); stdin.on('error', err => reject(err))
}); })
} }
async function main () {
try {
// const name = await prompt(i18next.t("home.title"))
const name = await prompt(`squoi le dossier de base des archives? [${config_rangement.base_archive_folder}]`)
// const age = await prompt("What's your age? ");
// const email = await prompt("What's your email address? ");
// const user = { name, age, email };
console.log('le dossier de base des archives est : ', name)
async function main() { stdin.pause()
try { } catch (error) {
// const name = await prompt(i18next.t("home.title")) console.log('There\'s an error!')
const name = await prompt(`squoi le dossier de base des archives? [${config_rangement.base_archive_folder}]`) console.log(error)
// const age = await prompt("What's your age? "); }
// const email = await prompt("What's your email address? "); process.exit()
// const user = { name, age, email };
console.log('le dossier de base des archives est : ',name);
stdin.pause();
} catch(error) {
console.log("There's an error!");
console.log(error);
}
process.exit();
} }
main(); main()