likedTrackIds loads async after views appear, so isLiked was always
false on initial render. Add onChange(of: likedTrackIds) to all track
row types and the player bar to re-sync when the set is populated.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Unified queue model: replace history/queue split with tracks[]+currentIndex
- Connected devices: fix Mac not pausing when another device becomes active
- Fix applyFullState playing wrong track (stale currentTrack reference)
- Fix seek in client mode (use `time` field per web client convention)
- Fix seek UI snapping back with optimistic seek override
- Add play count scrobbling via POST /api/player/history
- Playlists tab auto-loads on switch (no retry button needed)
- Fix share button to copy proper server-based track URL
- Device icon color: primary when active, accent when remote
- Full queue transfer between devices via transfer_state command
- Bump version to 1.2
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>