Files
prep-step/CLAUDE.md
T

80 lines
3.9 KiB
Markdown
Raw Normal View History

# 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 quattro cartelle di un disco/share
di rete (`__Accessori`, `__B.end`, `__Corpi`, `__Fondi` 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 4 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`).