2026.05.27
[2026.05.27]
Added
- Navidrome / Subsonic support in the macOS Swift app —
NavidromeService(Subsonic API client with MD5 token auth),NavidromeManager(multi-server persistence, active server switching, optimistic star toggling, cover art derivation from stream URLs),NdResponseCache(stale-while-revalidate actor cache, 30 min fresh TTL, 24 h eviction),NdLibraryView(Albums / Artists / Songs / Liked / Playlists sections with infinite-scroll pagination),NdSongRowView(track art toggle, hover play, star button, Play Next/Last + Go to Album/Artist context menu),NdAlbumDetailView,NdArtistDetailView,NdPlaylistDetailView(Play / Shuffle), and search integration (when a Navidrome server is active,search3replaces local gRPC search with ND artist circles, album cards, and song rows)
Removed
- PCM volume normalizer (
pcm_normalizer.c,pcm_normalizer.h, Rust bindings, settings field, docs) — superseded by ReplayGain perceived-loudness normalisation
Fixed
- Expo:
AbortSignal.timeout()replaced withAbortController+setTimeoutinnavidrome-client.ts—AbortSignal.timeoutis absent in some Hermes / React Native versions and was silently swallowing timeouts, making every fetch returnnull; switched tomd5npm package (removed inline implementation); setNSAllowsArbitraryLoads=truein iOSinfoPlistto unblock HTTPS servers that do not meet strict ATS TLS requirements - Expo ND album detail: mirror local
album/[id].tsxhero layout — blurred background image (blurRadius=40) + dark gradient overlay + art shadow + scale/fade scroll animation + sticky header title fade-in; cover art URL now uses a stable salt derived from credentials soexpo-image's disk cache is not busted on every render - Expo ND detail screens: cover art now renders correctly by placing computed dimensions on a parent
Viewand givingImageclassName="w-full h-full"so NativeWind owns the style; track rows in album and playlist detail screens now include aTrackMenuButton"…" context menu - GPUI: Navidrome cover art is now derived directly from the stream URL parameters (
id,u,t,s) instead of requiring an active server connection, eliminating blank album art when playback starts before the ND panel is connected; removes thePENDING_COVER_ARTstaging mutex and the asyncgetSonground-trip - macOS Now Playing /
MPNowPlayingInfoCenter: cover art priority corrected —coverArtUrl(forStreamUrl:)is now tried first (returnsnilfor local tracks), then falls back toalbumArt; the previous order always hit thealbumArtbranch even when it pointed at an empty path, so Navidrome tracks showed no artwork in the system Now Playing widget - CI: Android firmware build workflows now delete
make.depbeforemake libto force a fresh dependency scan after prefix-restore cache hits that carry stale header dependencies (e.g. thepcm_normalizer.hremoval)
Full Changelog: 2026.05.25...2026.05.27