Offline Tracks: encrypted cache and playback #15

Closed
opened 2026-10-06 21:16:46 +02:00 by SBDeveloper · 1 comment
Owner

Part of #13

What to build

A listener marks a Track offline. The host caches the Source's encoded byte stream in the private cache, encrypted at rest with a per-install key, and the Track plays with no network or Source login. Offline status shows on Track data and changes emit Core events. Removing an Offline Track frees its cache. Works for any Source.

Acceptance criteria

  • Core API to mark and remove a Track offline
  • Offline Track plays after the Source is unavailable, emitting the usual playback events
  • Cache contents are not plain audio
  • Offline status visible on Track data and via Core events
  • Core integration tests with the fake Source

Blocked by

None (can start immediately)

Part of #13 ## What to build A listener marks a Track offline. The host caches the Source's encoded byte stream in the private cache, encrypted at rest with a per-install key, and the Track plays with no network or Source login. Offline status shows on Track data and changes emit Core events. Removing an Offline Track frees its cache. Works for any Source. ## Acceptance criteria - [ ] Core API to mark and remove a Track offline - [ ] Offline Track plays after the Source is unavailable, emitting the usual playback events - [ ] Cache contents are not plain audio - [ ] Offline status visible on Track data and via Core events - [ ] Core integration tests with the fake Source ## Blocked by None (can start immediately)
Author
Owner

Done in b75fa5c: Core API (make_offline, remove_offline, offline_tracks), ChaCha20-encrypted cache with per-install key, playback from cache without the Source, Track.offline flag and OfflineChanged event, integration tests with the fake Source. UI is tracked in #31.

Done in b75fa5c: Core API (make_offline, remove_offline, offline_tracks), ChaCha20-encrypted cache with per-install key, playback from cache without the Source, Track.offline flag and OfflineChanged event, integration tests with the fake Source. UI is tracked in #31.
Sign in to join this conversation.
No milestone
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Reference
SBDeveloper/medley#15
No description provided.