From 50b58aa73061672c92cc284b288910ec580c913d Mon Sep 17 00:00:00 2001 From: Jordan Doyle Date: Wed, 3 Jan 2024 02:51:31 +0000 Subject: [PATCH] Fix position for paused speaker --- shalom/src/oracle.rs | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/shalom/src/oracle.rs b/shalom/src/oracle.rs index 82a719b..64290df 100644 --- a/shalom/src/oracle.rs +++ b/shalom/src/oracle.rs @@ -251,6 +251,7 @@ impl Oracle { speaker.actual_media_position = speaker .media_position .zip(speaker.media_position_updated_at) + .zip(Some(speaker.state)) .map(calculate_actual_media_position); let _res = self.entity_updates.send(Arc::from(*entity_id)); @@ -553,6 +554,7 @@ impl MediaPlayer { .media_position .map(Duration::from_secs) .zip(attr.media_position_updated_at) + .zip(Some(state)) .map(calculate_actual_media_position); MediaPlayer::Speaker(MediaPlayerSpeaker { @@ -645,12 +647,16 @@ pub struct MediaPlayerSpeaker { } fn calculate_actual_media_position( - (position, updated_at): (Duration, time::OffsetDateTime), + ((position, updated_at), state): ((Duration, time::OffsetDateTime), MediaPlayerSpeakerState), ) -> Duration { - let now = time::OffsetDateTime::now_utc(); - let since_update = now - updated_at; + if state.is_playing() { + let now = time::OffsetDateTime::now_utc(); + let since_update = now - updated_at; - (position + since_update).unsigned_abs() + (position + since_update).unsigned_abs() + } else { + position + } } #[derive(Debug, Clone, Copy, PartialEq, Eq)] -- libgit2 1.7.2