Files
prep-step/CLAUDE.md
T
davideandClaude Sonnet 5 146ce78eae Index Unificati/Commerciali, merge cleanup buttons, report unmatched components
- 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>
2026-09-16 12:05:07 +02:00

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