🏡 index : ~doyle/shalom.git

author Jordan Doyle <jordan@doyle.la> 2024-01-03 2:51:31.0 +00:00:00
committer Jordan Doyle <jordan@doyle.la> 2024-01-03 2:51:31.0 +00:00:00
commit
50b58aa73061672c92cc284b288910ec580c913d [patch]
tree
3abbc7f532cb873666ada33ed4c29ddcea953d29
parent
4a61bfcde4ab374d28da2ed77c0bf9bb5449105f
download
50b58aa73061672c92cc284b288910ec580c913d.tar.gz

Fix position for paused speaker



Diff

 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)]