feat: smistamento file non-CAD, rinomina cartelle speciali, guida utente

- Aggiunge cartella __SALTATI: i file non-CAD vengono ora copiati in
  __SALTATI invece di essere ignorati (folderProcessor, zipProcessor)
- Rinomina cartella duplicati in __DUPLICATI per coerenza con le altre
  cartelle speciali (__NON_SMISTATI, __SALTATI)
- Aggiunge pulsante "Anteprima saltati" in UI con anteprima e pulizia
- Aggiunge guida utente HTML/CSS in renderer/docs/ con sidebar navigabile
- Aggiunge menu Help > Documentazione che apre la guida in una finestra
- Imposta DEFAULT_DESTINATION a X:\
This commit is contained in:
2026-03-16 12:10:43 +01:00
parent 22801f6b75
commit 3fa7758fbe
7 changed files with 77 additions and 19 deletions

View File

@@ -3,7 +3,7 @@ const path = require('path');
const { getDestinationDecision, getCadInfo } = require('./router');
const { buildDestinationIndex } = require('./destinationIndex');
const { buildExistingCadKeyIndex, toCadKey } = require('./duplicateIndex');
const { prepareUnroutedTarget, prepareDuplicateTarget } = require('./unrouted');
const { prepareUnroutedTarget, prepareDuplicateTarget, getSkippedTarget } = require('./unrouted');
function parseNumericVersion(version) {
const rawVersion = String(version || '').trim();
@@ -86,7 +86,10 @@ async function processFolder(folder, config) {
const cadInfo = getCadInfo(file);
if (!cadInfo) {
const skippedTarget = await getSkippedTarget(file);
await fs.copy(fullPath, skippedTarget.destinationPath);
result.skipped += 1;
result.copied += 1;
continue;
}

View File

@@ -5,8 +5,10 @@ const { getCadInfo } = require('./router');
const PRIMARY_UNROUTED_DIR = '/cadroute/__NON_SMISTATI';
const HOME_UNROUTED_DIR = path.join(os.homedir(), '.cadroute', '__NON_SMISTATI');
const PRIMARY_DUPLICATES_DIR = '/cadroute/duplicati';
const HOME_DUPLICATES_DIR = path.join(os.homedir(), '.cadroute', 'duplicati');
const PRIMARY_DUPLICATES_DIR = '/cadroute/__DUPLICATI';
const HOME_DUPLICATES_DIR = path.join(os.homedir(), '.cadroute', '__DUPLICATI');
const PRIMARY_SKIPPED_DIR = '/cadroute/__SALTATI';
const HOME_SKIPPED_DIR = path.join(os.homedir(), '.cadroute', '__SALTATI');
const SPECIAL_TARGETS = {
unrouted: {
@@ -17,6 +19,10 @@ const SPECIAL_TARGETS = {
primary: PRIMARY_DUPLICATES_DIR,
fallback: HOME_DUPLICATES_DIR,
},
skipped: {
primary: PRIMARY_SKIPPED_DIR,
fallback: HOME_SKIPPED_DIR,
},
};
const resolvedDirs = new Map();
@@ -178,6 +184,22 @@ async function prepareDuplicateTarget(fileName) {
return prepareSpecialTarget('duplicates', fileName);
}
async function resolveSkippedDir() {
return resolveTargetDir('skipped');
}
async function getSkippedTarget(fileName) {
return getTarget('skipped', fileName);
}
async function listSkippedFiles() {
return listTargetFiles('skipped');
}
async function clearSkippedFiles() {
return clearTargetFiles('skipped');
}
async function listFilesRecursively(rootDir) {
const files = [];
@@ -251,16 +273,22 @@ async function clearDuplicateFiles() {
module.exports = {
getUnroutedTarget,
getDuplicateTarget,
getSkippedTarget,
prepareUnroutedTarget,
prepareDuplicateTarget,
resolveUnroutedDir,
resolveDuplicatesDir,
resolveSkippedDir,
listUnroutedFiles,
listDuplicateFiles,
listSkippedFiles,
clearUnroutedFiles,
clearDuplicateFiles,
clearSkippedFiles,
PRIMARY_UNROUTED_DIR,
HOME_UNROUTED_DIR,
PRIMARY_DUPLICATES_DIR,
HOME_DUPLICATES_DIR,
PRIMARY_SKIPPED_DIR,
HOME_SKIPPED_DIR,
};

View File

@@ -5,7 +5,7 @@ const { pipeline } = require('stream/promises');
const { getDestinationDecision, getCadInfo } = require('./router');
const { buildDestinationIndex } = require('./destinationIndex');
const { buildExistingCadKeyIndex, toCadKey } = require('./duplicateIndex');
const { prepareUnroutedTarget, prepareDuplicateTarget } = require('./unrouted');
const { prepareUnroutedTarget, prepareDuplicateTarget, getSkippedTarget } = require('./unrouted');
function parseNumericVersion(version) {
const rawVersion = String(version || '').trim();
@@ -82,8 +82,10 @@ async function processZip(zipPath, config) {
const cadInfo = getCadInfo(baseName);
if (!cadInfo) {
const skippedTarget = await getSkippedTarget(baseName);
await pipeline(entry, fs.createWriteStream(skippedTarget.destinationPath));
result.skipped += 1;
entry.autodrain();
result.copied += 1;
continue;
}