- 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>
3.9 KiB
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/.
dotnet build -c Release
dotnet run -c Release
Pubblicazione come eseguibile standalone (single-file, self-contained, Windows x64):
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.cscontiene 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 diEnumerateFiles(..., 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 perpercorso_completo+ dimensione + data modifica). Riporta il progresso tramiteIProgress<ScanProgress>, marshalato automaticamente sul thread UI. Contiene anche lo schema SQL del DB (tabellafiles+ vistafiles_ultima_versione, che seleziona solo l'ultima versione per(cartella_radice, codice, tipo_file)usandoROW_NUMBER() OVER (...)— non un self-join conGROUP 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).