feat: add CMAF (HLS + DASH) PCM sink for browser/CDN streaming
New `rockbox-cmaf` crate encodes PCM to AAC-LC via fdk-aac and serves
HLS + DASH manifests with fMP4 segments over HTTP. Wires through the
standard PCM sink path: enum slot pinned to 8 in `pcm_sink.h`,
registered in `firmware/pcm.c`, switched on via `audio_output = "cmaf"`
(or "hls" / "dash") in settings.toml with `cmaf_http_port`,
`cmaf_bitrate`, and optional `cmaf_segment_dir` for mirroring artefacts
to disk for an external origin (nginx, Caddy, CDN).
Surfaced as a virtual device in `virtual_devices()` and selectable via
`/connect/cmaf`, with broadcast icons added to the GPUI, Expo, web, and
macOS device pickers.
feat: Navidrome/Subsonic support in macOS Swift app
- NavidromeService: Subsonic API client (albums, artists, songs, playlists,
starred, search3, star/unstar/scrobble) with MD5 token auth
- NavidromeManager: multi-server persistence to Application Support JSON,
active server switching, optimistic star toggling, cover art URL derivation
from stream URLs for miniplayer and queue
- NdResponseCache: stale-while-revalidate actor cache (30 min fresh TTL,
24 h eviction); background refresh on stale hit; skip on mutations
- NdLibraryView: Albums/Artists/Songs/Liked/Playlists sections; infinite
scroll pagination for Songs list; NdServerManagerView for add/remove/switch
- NdSongRowView: track number, art toggle (showArt), hover play, star button,
Play Next/Last + Go to Album/Artist context menu
- NdAlbumDetailView, NdArtistDetailView, NdPlaylistDetailView with Play/Shuffle
- Search: when a Navidrome server is active, search3 replaces local gRPC search;
results show ND artist circles, album cards, and song rows
- Miniplayer and QueueRowView resolve cover art from Navidrome stream URLs
feat: Navidrome/Subsonic support in macOS Swift app
- NavidromeService: Subsonic API client (albums, artists, songs, playlists,
starred, search3, star/unstar/scrobble) with MD5 token auth
- NavidromeManager: multi-server persistence to Application Support JSON,
active server switching, optimistic star toggling, cover art URL derivation
from stream URLs for miniplayer and queue
- NdResponseCache: stale-while-revalidate actor cache (30 min fresh TTL,
24 h eviction); background refresh on stale hit; skip on mutations
- NdLibraryView: Albums/Artists/Songs/Liked/Playlists sections; infinite
scroll pagination for Songs list; NdServerManagerView for add/remove/switch
- NdSongRowView: track number, art toggle (showArt), hover play, star button,
Play Next/Last + Go to Album/Artist context menu
- NdAlbumDetailView, NdArtistDetailView, NdPlaylistDetailView with Play/Shuffle
- Search: when a Navidrome server is active, search3 replaces local gRPC search;
results show ND artist circles, album cards, and song rows
- Miniplayer and QueueRowView resolve cover art from Navidrome stream URLs