153e931490
_buildAudioSource is now async and cache-aware: 1. Cache hit → AudioSource.uri(file://path) 2. Cache miss with manager → LockCachingAudioSource (cache-as-you-play) 3. No manager configured → plain AudioSource.uri (legacy fallback) playerActionsProvider.playTracks now passes audioCacheManager into configure() alongside coverCache. setQueueFromTracks awaits the source build (Future.wait over the track list). Out of scope: registering an index row when LockCachingAudioSource finishes downloading (no clean hook from just_audio). Prefetcher / Download buttons cover the index path. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>