- Add 'Unificati' and 'Commerciali' as indexed root folders alongside the existing four, updating Indexer.CartelleRadice and the docs. - Replace the separate "Pulisci cartella raw" / "Pulisci cartella step" buttons with a single "Pulisci raw e step" that clears both under one confirmation; falls back to a folder picker when no path is known yet in the session instead of staying disabled. - "Trova componenti referenziati" now also writes a persistent summary (PRT/sub-assemblies found and copied, codes not found) to the main window's status line, not just the popup dialog, and reports clearly when no database is loaded instead of failing silently. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
81 lines
3.9 KiB
Markdown
81 lines
3.9 KiB
Markdown
# CLAUDE.md
|
|
|
|
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
|
|
|
## Cos'è questo progetto
|
|
|
|
`CadSearchGui` è un'app Windows Forms (.NET 10, WinForms) che indicizza e permette di
|
|
cercare i file CAD Pro-ENGINEER/Creo contenuti in sei cartelle di un disco/share
|
|
di rete (`__Accessori`, `__B.end`, `__Corpi`, `__Fondi`, `Unificati`, `Commerciali` sotto una radice,
|
|
di default `X:\`), salvando i metadati in un DB SQLite locale (`cad_index.db`).
|
|
|
|
## Comandi
|
|
|
|
Tutti da eseguire dentro `CadSearchGui/`.
|
|
|
|
```powershell
|
|
dotnet build -c Release
|
|
dotnet run -c Release
|
|
```
|
|
|
|
Pubblicazione come eseguibile standalone (single-file, self-contained, Windows x64):
|
|
|
|
```powershell
|
|
dotnet publish -c Release -r win-x64 --self-contained true -p:PublishSingleFile=true -o publish
|
|
```
|
|
|
|
Non ci sono test automatizzati nel repo.
|
|
|
|
## Architettura
|
|
|
|
Il programma è tutto in `CadSearchGui/` (nessun altro progetto nella solution — in
|
|
passato esisteva anche una CLI separata e uno script Python di indicizzazione,
|
|
entrambi rimossi: ora l'unico programma è questo, con GUI e indicizzazione integrate).
|
|
|
|
- **Program.cs** — entry point WinForms standard, avvia `Form1`.
|
|
- **Form1.cs** / **Form1.Designer.cs** — finestra principale. La UI è costruita
|
|
interamente in codice in `Form1.BuildUi()` (nessun designer visuale usato); i
|
|
controlli sono campi privati (`_txtCerca`, `_cmbTipo`, `_cmbCartella`, `_chkUltima`,
|
|
`_grid`, ecc.). `Form1.Designer.cs` contiene solo lo scheletro minimo
|
|
(`InitializeComponent`/`Dispose`) generato dal template.
|
|
- **Indexer.cs** — logica di scansione del disco e scrittura/aggiornamento del DB
|
|
SQLite (`Indexer.ScanAsync`). Cammina le 6 cartelle radice (`Indexer.CartelleRadice`)
|
|
con un walk manuale a stack (`Walk`, più veloce di `EnumerateFiles(..., AllDirectories)`
|
|
su share di rete con centinaia di migliaia di file), estrae da ogni nome file il
|
|
pattern Pro-E `<codice>.<tipo>.<versione>` via regex, e fa un upsert incrementale
|
|
riga per riga (confronto per `percorso_completo` + dimensione + data modifica).
|
|
Riporta il progresso tramite `IProgress<ScanProgress>`, marshalato automaticamente
|
|
sul thread UI. Contiene anche lo schema SQL del DB (tabella `files` + vista
|
|
`files_ultima_versione`, che seleziona solo l'ultima versione per
|
|
`(cartella_radice, codice, tipo_file)` usando `ROW_NUMBER() OVER (...)` — non un
|
|
self-join con `GROUP BY`, che su ~200k righe degenera in tempi quasi quadratici).
|
|
- **ProgressForm.cs** — dialog modale mostrato durante l'aggiornamento indice: barra
|
|
di progresso, conteggi nuovi/aggiornati/invariati/rimossi, tempo trascorso e stima
|
|
del tempo rimanente (calcolata dal ritmo file/secondo rispetto al totale atteso,
|
|
preso dal conteggio della scansione precedente salvato nel DB).
|
|
|
|
### Schema del DB (`cad_index.db`)
|
|
|
|
Tabella `files`: un record per ogni file trovato, con `percorso_completo` (chiave
|
|
univoca), `cartella_radice`, `famiglia` (primo livello di sottocartella),
|
|
`codice`/`tipo_file`/`versione` estratti dal nome file, dimensione, data modifica e
|
|
timestamp dell'ultima scansione (`scansionato_il`, usato per rilevare ed eliminare i
|
|
file non più presenti su disco a fine scansione).
|
|
|
|
Vista `files_ultima_versione`: stessa struttura, filtrata alla sola versione più
|
|
recente per codice+tipo.
|
|
|
|
### Comportamento di ricerca di default
|
|
|
|
La ricerca di default (nessun filtro esplicito dall'utente) mostra solo i tipi
|
|
`prt`/`asm` e solo l'ultima versione — vedi `OpzionePrtAsm`/`TipiPredefiniti` in
|
|
`Form1.cs`. L'utente può comunque scegliere "Tutti i tipi" o un tipo specifico dal
|
|
combo, e togliere la spunta "Solo ultima versione".
|
|
|
|
### Percorso del DB
|
|
|
|
All'avvio la app cerca `cad_index.db` accanto all'eseguibile o nella working
|
|
directory corrente; se non lo trova, l'utente può selezionarlo con "Apri DB...".
|
|
Il bottone "Aggiorna indice" rilancia `Indexer.ScanAsync` sullo stesso path (radice
|
|
disco di default `X:\`, hardcoded in `Form1.RadiceDiscoDefault`).
|