Replaces the in-memory Library mirror (DirCache, Snapshot, TrackReader) and auxiliary library tables (release_provenance, release_owners, library_sidecar_covers) with a single rebuildable library_tracks SQLite cache table queried directly over WAL reader pools.
Review Links #
- Whole PR (
v1..refactor/library-sqlite-cache): https://tangled.org/sullen.net/gobuz/pulls/48/latest - Critique PR: https://critique.sullen.net/pr/sullen.net/gobuz/48
- Interdiff (
v3..v4): https://tangled.org/sullen.net/gobuz/pulls/48/v3..v4 - CL 1 (
mnysnsnt/fce5ab61) — Tangled diff · Interdiff (v3..v4) · Critique - CL 2 (
qpopzlmu/5e7e436b) — Tangled diff · Interdiff (v3..v4) · Critique
Stack Overview #
- CL 1 (
mnysnsnt) —refactor(config,store,models): enforce startup folder invariants and track-only library schema- Makes
(Config).ResolveFolders()fail fast on missing/non-directoryAuxDirentries, duplicate resolved roots, or nested/overlapping folder paths, resolving root symlinks once viafilepath.EvalSymlinkswhile preserving:ro(default) and:rwAuxDirsuffixes. - Replaces
release_provenance,release_owners, andlibrary_sidecar_coversinschemaV1andPurgeCachewithlibrary_tracks(track_idprimary key + 7 lookup indexes, storingroot_folder_path). - Adds
LocalTrackIDandReleaseKeytomodels.LibraryTrack, and addsReleaseKey,RouteID(), and unabbreviatedCoverModifiedTimetomodels.LibraryRelease.
- Makes
- CL 2 (
qpopzlmu) —refactor(library): back library index with sqlite-direct library_tracks cache- Rebuilds
internal/libraryatop*store.DB(GetRelease,ListReleases,ListReleasesByDirectory,DeleteRelease,GetReleaseCover,MatchTrack,Scan,ScanFiles,Ready,Folders, andThumbnailCache). - Derives 4-tier
ReleaseKey(qobuz:<id>,mb:<uuid>,upc:<gtin>,tag:<24-hex>) purely from embedded audio tags via incremental(mtime_ns, size_bytes)worker-pool scans, ignoring symlinks inside music folders and failing fast if any configured root folder is inaccessible. - Resolves and validates sidecar covers (
cover.{jpg,jpeg,png}) on demand in exclusive release/parent directories before falling back to embedded cover extraction, and prunes orphaned sidecars/booklet.pdf/empty subdirectories upward stopping strictly belowroot_folder_pathonDeleteRelease. - Updates
internal/web/library(removing bulk/library/delete-all, keyingThumbnailCacheonReleaseKey+CoverModifiedTime),internal/web/catalog(controller-local per-ReleaseKeyGoosefoot import lock + multi-release directory409 Conflictguard + detached upstreamImportstream drain & post-importScanon client disconnect),internal/playlist/resolver,internal/web/pages, andinternal/web/server(ReleaseDeletedthumbnail invalidation).
- Rebuilds