mirror of
https://github.com/storytold/lightcraft.git
synced 2026-10-19 02:10:25 -05:00
Re-applies fix/issue-104-ui-fs on top of the data-safety fixes (integrate/safety): - availability cache: originals and smart previews are checked on a worker thread; the UI answers from the cache (grid, Info panel, photo menu, Missing Photos view) - import split into ImportJob::prepare (worker) + commit_prepared, with Cancel; Copy keeps #96's verified copies - Find Missing Photos: find_candidates (snapshot, no I/O) + plan_find_missing (all file I/O, on a worker, never the session) with #105's matching rules unchanged (name+size+hash; renamed by size+hash; single name+size; ambiguous look-alikes skipped and reported; files already in use excluded). The plan is applied with library.findMissing {found, missing, ambiguous}, re-checked against the catalog then: photos relinked meanwhile are left alone, files now in use are not taken. library.findMissing {folder} still runs synchronously. - Build / Discard Smart Previews with background: true runs on a worker with progress and Stop, keeping #106's atomic writes, is_valid checks and `repaired` count (also in library.previewProgress); the render worker's smart-preview fallback uses is_valid - Rename preview planned on a worker (plan_rename_photos) on the same planning core as Session::plan_rename_with (MoveFs, case-only respelling by file identity, #95) - Local folder listing via fs_cached; tests_offline (slow injected probe, frames < 300 ms) Tests: worker-planned Find Missing equals the synchronous command for a renamed + ambiguous library; a plan is re-checked when applied; background smart previews repair a damaged proxy. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>