ScanProgress has a cancel() method and scan() checks the flag on every entry, so the engine supports cancellation. Nothing exposes it.
start_scan creates the ScanProgress locally, keeps no handle anywhere the app can reach, and there's no cancel_scan command in invoke_handler. In the UI the scan button just goes disabled — pointing the app at a home directory means waiting it out or killing the app.
Needs a shared handle to the in-flight scan's ScanProgress (app state), a cancel_scan command, and a Cancel button next to the progress indicator. The GenomeError::Cancelled path already exists and should be shown as a normal outcome, not an error.
ScanProgresshas acancel()method andscan()checks the flag on every entry, so the engine supports cancellation. Nothing exposes it.start_scancreates theScanProgresslocally, keeps no handle anywhere the app can reach, and there's nocancel_scancommand ininvoke_handler. In the UI the scan button just goes disabled — pointing the app at a home directory means waiting it out or killing the app.Needs a shared handle to the in-flight scan's
ScanProgress(app state), acancel_scancommand, and a Cancel button next to the progress indicator. TheGenomeError::Cancelledpath already exists and should be shown as a normal outcome, not an error.