Use server covers base; prefer IPv4 for mDNS
Replace hardcoded "http://localhost:6062/covers/" with
crate::server::get_covers_base() across GPUI so cover URLs follow the
active server.
Improve mDNS scanning by ranking IPv4 addresses (192.168 → 10 → others)
and selecting the best non-loopback/link-local address so records for
the
same physical host coalesce.
Bluetooth/UI and macOS tweaks:
- Add MiniPlayer bluetooth button (shows when Bluetooth is available)
and open/fetch devices when toggled
- Update BluetoothPicker visuals (white text, green rounded icon)
- macOS app now listens for server-change notifications and restarts
streaming/fetches settings and device/bluetooth state
BluetoothService: check availability via fetchGlobalStatus() to avoid
transient UNIMPLEMENTED errors when probing getDevices()