✨ New Features
- Swipe-to-switch player - Swipe left/right on the player to quickly change devices, with haptic feedback and smooth slide animations
🐛 Bug Fixes
- Spotify duration handling - Handle Spotify duration as double instead of int
- Album art loading - Multiple fixes for album art not appearing immediately:
- Include image URL in cached tracks from player_updated events
- Don't overwrite cached track with image using queue data without image
- Precache album art from player_updated events
- Idle player display - Show track info for idle players with cached content; don't clear track for idle players that are powered
- Playback controls - Fixed volume slider for local device, seek/progress bar
- Text contrast - Ensure primary color has minimum lightness for text contrast
- Swipe animation smoothness - Speed up swipe-to-change-player animation
⚡ Performance
- WebSocket heartbeat - Added ping every 30 seconds to detect stale connections
- Completer guards - Prevent double-completion errors in async operations
🏗️ Code Quality (Audit Phases 1-8)
- Extracted reusable widgets:
EmptyState,DisconnectedState,DebugConsole,DeviceSelectorBar,QueuePanel,PlayerControls - Extracted
CacheServicefrom provider (reduced main provider by ~450 lines) - Added design tokens system for consistent spacing, radii, and dimensions
- Removed dead code and unused dependencies