Add CadSearchGui: WinForms app to index and search the CAD archive
Indicizza le cartelle __Accessori, __B.end, __Corpi, __Fondi in un DB SQLite locale ed espone una GUI di ricerca (codice, tipo, cartella, solo ultima versione) con aggiornamento incrementale dell'indice e stima del tempo rimanente. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
commit
82a69e0d20
8 files changed
+956
No files matched your search
@@ -0,0 +1,80 @@
|
||||
# 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`).
|
||||
Reference in new issue
Block a user