2384a74517e1d385ac08238ab793816b151d3b72
When Kisani's manifest has 0–1 entries but the NAS directory contains thousands of files uploaded by other tools, reconcile previously showed Already Safe = 1 because countSafe only matched against the tiny manifest. The validity check in buildManifestIndex now: - Stores the filtered NAS filenames in NASManifestCache (directoryFilenames field) - Returns a ManifestIndex(nasListing:) for filename-based matching against all NAS files The fast-path reconcile now: - Detects a sparse manifest (entries ≤ 1, dirCount > 1) - Rebuilds ManifestIndex(nasFilenames:) from the cached filenames for O(1) filename matching - Falls back to full NAS reconcile if cached filenames aren't available yet Adds ManifestIndex.init(nasFilenames:) for fast-path reconstruction from cached strings. Co-Authored-By: Kutesir <kutesir@provoc.ug> Co-Authored-By: Sentry <sentry@provoc.ug>
perf: eliminate full rescans with local caches; add queue tracking, notifications, SyncView redesign
Description
Privacy-first iOS photo backup to NAS — SMB + SFTP, auto LAN trigger
Languages
Swift
100%