tocmo
356f922940
feat: replace Cancel with Pause/Resume — survives server restarts
- scanner.py: replace cancel_requested with pause_requested throughout;
pause during walk drains in-flight futures gracefully then saves state;
phash phase processes in 500-image chunks with pause check between each;
_save_pause_state() persists files_indexed/phashes_done/last_phase to DB;
init_db() already detects killed-mid-scan (running→paused) on startup
- main.py: add POST /api/scan/pause and POST /api/scan/resume endpoints;
/api/scan/cancel kept as alias; scan_status now returns folder_path,
files_indexed, phashes_done; scan_reset clears all new fields
- index.html: "Cancel" → "⏸ Pause" button; new #paused-area banner shows
folder, files indexed, phashes done with "▶ Resume" and "Full reset"
buttons; updateScanUI handles paused status; pauseScan()/resumeScan()
JS functions added; chip gains .paused amber style
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>