From: Paulus Schoutsen Date: Thu, 26 Feb 2026 15:30:41 +0000 (-0500) Subject: Fix sendspin metadata sending wrong progress when paused (#3250) X-Git-Url: https://git.kitaultman.com/?a=commitdiff_plain;h=fddbc223c4da39cd9248bd6319c3139c76701f65;p=music-assistant-server.git Fix sendspin metadata sending wrong progress when paused (#3250) * Fix sendspin metadata sending wrong progress when paused Two issues caused the progress bar in sendspin clients to show wildly incorrect values (e.g. 795:54 / 04:23) after reconnecting to a paused stream: 1. playback_speed was hardcoded to 1000 (normal) and never set to 0 when paused, so the server kept advancing progress. 2. Used PlayerMedia.corrected_elapsed_time which always interpolates elapsed time regardless of playback state (adding hours of wall- clock time while paused). Switched to Player.corrected_elapsed_time which only interpolates during PLAYING. Co-Authored-By: Claude Opus 4.6 * fix(sendspin): preserve metadata progress when paused --------- Co-authored-by: Claude Opus 4.6 Co-authored-by: Maxim Raznatovski --- diff --git a/music_assistant/providers/sendspin/player.py b/music_assistant/providers/sendspin/player.py index 1ae50be4..1485511c 100644 --- a/music_assistant/providers/sendspin/player.py +++ b/music_assistant/providers/sendspin/player.py @@ -574,6 +574,18 @@ class SendspinPlayer(Player): repeat = SendspinRepeatMode.ONE shuffle = queue.shuffle_enabled if queue else False + is_playing = self.state.playback_state == PlaybackState.PLAYING + + # Prefer queue/media elapsed as source of truth. Only interpolate while + # actively playing; for paused/idle states keep the last fixed position. + elapsed_time: float | None = ( + float(current_media.elapsed_time) if current_media.elapsed_time is not None else None + ) + if is_playing and current_media.corrected_elapsed_time is not None: + elapsed_time = current_media.corrected_elapsed_time + if elapsed_time is None: + elapsed_time = self.corrected_elapsed_time if is_playing else self.elapsed_time + track_progress = int(elapsed_time * 1000) if elapsed_time is not None else 0 metadata = Metadata( title=current_media.title, @@ -584,10 +596,8 @@ class SendspinPlayer(Player): year=None, track=None, track_duration=track_duration * 1000 if track_duration is not None else None, - track_progress=int(current_media.corrected_elapsed_time * 1000) - if current_media.corrected_elapsed_time - else 0, - playback_speed=1000, + track_progress=track_progress, + playback_speed=1000 if is_playing else 0, repeat=repeat, shuffle=shuffle, )