NowPlaying.begin is handed a hardcoded duration: 0 (Sources/Core/Player.swift:75) and nothing ever updates track.duration afterwards.
Player.duration is populated from VLC at Sources/Core/Player.swift:115, but it is never propagated into NowPlaying. So publish() writes MPMediaItemPropertyPlaybackDuration = 0 on every update (Sources/Core/NowPlaying.swift:112).
Impact — the car and lock-screen scrubber have no track length. SPEC lists scrubber accuracy as a must-verify item, and README calls NowPlaying.swift "the entire CarPlay surface".
Fix sketch — propagate duration once VLC reports it (it is 0 at load time; VLC only knows the length after parsing). Either pass it on each update(position:playing:) or give NowPlaying a setDuration.
Note — NowPlaying currently has zero test coverage, which is why this shipped unseen. A unit test asserting the published nowPlayingInfo dict carries a non-zero duration would catch it without a car.
NowPlaying.beginis handed a hardcodedduration: 0(Sources/Core/Player.swift:75) and nothing ever updatestrack.durationafterwards.Player.durationis populated from VLC atSources/Core/Player.swift:115, but it is never propagated intoNowPlaying. Sopublish()writesMPMediaItemPropertyPlaybackDuration = 0on every update (Sources/Core/NowPlaying.swift:112).Impact — the car and lock-screen scrubber have no track length. SPEC lists scrubber accuracy as a must-verify item, and README calls
NowPlaying.swift"the entire CarPlay surface".Fix sketch — propagate duration once VLC reports it (it is 0 at
loadtime; VLC only knows the length after parsing). Either pass it on eachupdate(position:playing:)or giveNowPlayingasetDuration.Note —
NowPlayingcurrently has zero test coverage, which is why this shipped unseen. A unit test asserting the publishednowPlayingInfodict carries a non-zero duration would catch it without a car.