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>
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 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`).
|