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

@@ -7,6 +7,7 @@ const browseDestinationBtn = document.getElementById('browseDestinationBtn');
const saveDestinationBtn = document.getElementById('saveDestinationBtn');
const openUnroutedBtn = document.getElementById('openUnroutedBtn');
const openDuplicatesBtn = document.getElementById('openDuplicatesBtn');
const openSkippedBtn = document.getElementById('openSkippedBtn');
const destinationStatus = document.getElementById('destinationStatus');
const previewOverlay = document.getElementById('previewOverlay');
const closePreviewBtn = document.getElementById('closePreviewBtn');
@@ -29,6 +30,7 @@ function setDestinationLoading(isLoading) {
saveDestinationBtn.disabled = isLoading;
openUnroutedBtn.disabled = isLoading;
openDuplicatesBtn.disabled = isLoading;
openSkippedBtn.disabled = isLoading;
clearPreviewBtn.disabled = isLoading;
}
@@ -60,18 +62,14 @@ function hidePreview() {
}
async function loadPreviewData(kind) {
if (kind === 'duplicates') {
return window.api.listDuplicatesFiles();
}
if (kind === 'duplicates') return window.api.listDuplicatesFiles();
if (kind === 'skipped') return window.api.listSkippedFiles();
return window.api.listUnroutedFiles();
}
async function clearPreviewData(kind) {
if (kind === 'duplicates') {
return window.api.clearDuplicatesFiles();
}
if (kind === 'duplicates') return window.api.clearDuplicatesFiles();
if (kind === 'skipped') return window.api.clearSkippedFiles();
return window.api.clearUnroutedFiles();
}
@@ -248,7 +246,22 @@ openDuplicatesBtn.addEventListener('click', async () => {
destinationStatus.textContent = 'Caricamento anteprima duplicati...';
const result = await window.api.listDuplicatesFiles();
showPreview('duplicates', 'Anteprima duplicati', result, 'Nessun file presente in duplicati.');
showPreview('duplicates', 'Anteprima __DUPLICATI', result, 'Nessun file presente in __DUPLICATI.');
destinationStatus.textContent = `Anteprima caricata (${result.files?.length || 0} file).`;
} catch (error) {
destinationStatus.textContent = `Errore: ${error.message}`;
} finally {
setDestinationLoading(false);
}
});
openSkippedBtn.addEventListener('click', async () => {
try {
setDestinationLoading(true);
destinationStatus.textContent = 'Caricamento anteprima saltati...';
const result = await window.api.listSkippedFiles();
showPreview('skipped', 'Anteprima __SALTATI', result, 'Nessun file presente in __SALTATI.');
destinationStatus.textContent = `Anteprima caricata (${result.files?.length || 0} file).`;
} catch (error) {
destinationStatus.textContent = `Errore: ${error.message}`;
@@ -263,9 +276,12 @@ clearPreviewBtn.addEventListener('click', async () => {
}
const isDuplicates = currentPreviewKind === 'duplicates';
const isSkipped = currentPreviewKind === 'skipped';
const confirmMessage = isDuplicates
? 'Confermi la pulizia della cartella duplicati?'
: 'Confermi la pulizia della cartella non smistati?';
? 'Confermi la pulizia della cartella __DUPLICATI?'
: isSkipped
? 'Confermi la pulizia della cartella saltati?'
: 'Confermi la pulizia della cartella non smistati?';
if (!window.confirm(confirmMessage)) {
return;
@@ -277,10 +293,12 @@ clearPreviewBtn.addEventListener('click', async () => {
const clearResult = await clearPreviewData(currentPreviewKind);
const refreshed = await loadPreviewData(currentPreviewKind);
const title = isDuplicates ? 'Anteprima duplicati' : 'Anteprima __NON_SMISTATI';
const title = isDuplicates ? 'Anteprima __DUPLICATI' : isSkipped ? 'Anteprima __SALTATI' : 'Anteprima __NON_SMISTATI';
const emptyMessage = isDuplicates
? 'Nessun file presente in duplicati.'
: 'Nessun file presente in __NON_SMISTATI.';
? 'Nessun file presente in __DUPLICATI.'
: isSkipped
? 'Nessun file presente in __SALTATI.'
: 'Nessun file presente in __NON_SMISTATI.';
showPreview(currentPreviewKind, title, refreshed, emptyMessage);
destinationStatus.textContent = `Cartella pulita: ${clearResult.directory}`;