Files
prep-step/CLAUDE.md
T
davideandClaude Sonnet 5 82a69e0d20 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>
2026-09-16 09:58:55 +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 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/.

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