From d658805f73ca44fc88bf59a4da48d85530d241f1 Mon Sep 17 00:00:00 2001 From: Jordan Doyle Date: Sat, 4 Nov 2023 01:01:24 +0000 Subject: [PATCH] Provide instant UI feedback on media player change --- shalom/src/pages/room.rs | 30 +++++++++++++++++++++++------- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/shalom/src/pages/room.rs b/shalom/src/pages/room.rs index 14edfb6..8d05124 100644 --- a/shalom/src/pages/room.rs +++ b/shalom/src/pages/room.rs @@ -12,7 +12,7 @@ use url::Url; use crate::{ hass_client::MediaPlayerRepeat, - oracle::{Light, MediaPlayerSpeaker, Oracle}, + oracle::{Light, MediaPlayerSpeaker, MediaPlayerSpeakerState, Oracle}, subscriptions::download_image, theme::Icon, widgets, @@ -100,26 +100,42 @@ impl Room { None } Message::OnSpeakerVolumeChange(new) => { - Some(Event::SetSpeakerVolume(self.speaker.as_ref()?.0, new)) + let (id, speaker) = self.speaker.as_mut()?; + speaker.volume = new; + Some(Event::SetSpeakerVolume(id, new)) } Message::OnSpeakerPositionChange(new) => { - Some(Event::SetSpeakerPosition(self.speaker.as_ref()?.0, new)) + let (id, speaker) = self.speaker.as_mut()?; + speaker.actual_media_position = Some(new); + Some(Event::SetSpeakerPosition(id, new)) } Message::OnSpeakerStateChange(new) => { - Some(Event::SetSpeakerPlaying(self.speaker.as_ref()?.0, new)) + let (id, speaker) = self.speaker.as_mut()?; + speaker.state = if new { + MediaPlayerSpeakerState::Playing + } else { + MediaPlayerSpeakerState::Paused + }; + Some(Event::SetSpeakerPlaying(id, new)) } Message::OnSpeakerMuteChange(new) => { - Some(Event::SetSpeakerMuted(self.speaker.as_ref()?.0, new)) + let (id, speaker) = self.speaker.as_mut()?; + speaker.muted = new; + Some(Event::SetSpeakerMuted(id, new)) } Message::OnSpeakerRepeatChange(new) => { - Some(Event::SetSpeakerRepeat(self.speaker.as_ref()?.0, new)) + let (id, speaker) = self.speaker.as_mut()?; + speaker.repeat = new; + Some(Event::SetSpeakerRepeat(id, new)) } Message::OnSpeakerNextTrack => Some(Event::SpeakerNextTrack(self.speaker.as_ref()?.0)), Message::OnSpeakerPreviousTrack => { Some(Event::SpeakerPreviousTrack(self.speaker.as_ref()?.0)) } Message::OnSpeakerShuffleChange(new) => { - Some(Event::SetSpeakerShuffle(self.speaker.as_ref()?.0, new)) + let (id, speaker) = self.speaker.as_mut()?; + speaker.shuffle = new; + Some(Event::SetSpeakerShuffle(id, new)) } } } -- libgit2 1.7.2