From d28465d19f0db09d43492ffac3da1eedb4177cda Mon Sep 17 00:00:00 2001 From: Medieval Apple <114710036+MedievalApple@users.noreply.github.com> Date: Wed, 17 Dec 2025 05:25:26 -0500 Subject: [PATCH] (Roku) Media Assistant provider: bug fixes / cleanup (#2828) --- .../providers/roku_media_assistant/player.py | 27 ++++++++++++------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/music_assistant/providers/roku_media_assistant/player.py b/music_assistant/providers/roku_media_assistant/player.py index c5999609..3f2885fc 100644 --- a/music_assistant/providers/roku_media_assistant/player.py +++ b/music_assistant/providers/roku_media_assistant/player.py @@ -79,6 +79,9 @@ class MediaAssistantPlayer(Player): async def power(self, powered: bool) -> None: """Handle POWER command on the player.""" + logger = self.provider.logger.getChild(self.player_id) + logger.info("Received POWER command on player %s", self.display_name) + try: device_info = await self.roku.update() app_running = False @@ -86,21 +89,22 @@ class MediaAssistantPlayer(Player): app_running = device_info.app.app_id == self.provider.config.get_value( CONF_ROKU_APP_ID ) + except Exception: + self.logger.error("Failed to get app state on: %s", self.name) + try: # There's no real way to "Power" on the app since device wake up / app start # is handled by The roku once it receives the Play Media request if not powered: if app_running: await self.roku.remote("home") await self.roku.remote("power") - - logger = self.provider.logger.getChild(self.player_id) - logger.info("Received POWER command on player %s", self.display_name) - # update the player state in the player manager - self.update_state() except Exception: self.logger.error("Failed to change Power state on: %s", self.name) + # update the player state in the player manager + self.update_state() + async def volume_mute(self, muted: bool) -> None: """Handle VOLUME MUTE command on the player.""" await self.roku.remote("volume_mute") @@ -160,7 +164,6 @@ class MediaAssistantPlayer(Player): logger = self.provider.logger.getChild(self.player_id) logger.info("Received PAUSE command on player %s", self.display_name) - self._attr_playback_state = PlaybackState.PAUSED self.update_state() async def play_media(self, media: PlayerMedia) -> None: @@ -286,15 +289,19 @@ class MediaAssistantPlayer(Player): if "position" in media_state: try: - self._attr_elapsed_time = ( - int(media_state["position"].split(" ", 1)[0]) / 1000 - ) + position = int(media_state["position"].split(" ", 1)[0]) / 1000 + if self.elapsed_time is not None: + if abs(position - self.elapsed_time) > 10: + self._attr_current_media = self.queued + self._attr_elapsed_time = position self._attr_elapsed_time_last_updated = time.time() except Exception: self.logger.info( "Playback Position received from %s Was Invalid", self.name ) + self.update_state() + if not self.current_media or self._attr_playback_state != PlaybackState.PLAYING: return @@ -303,7 +310,7 @@ class MediaAssistantPlayer(Player): album_name = self.current_media.album or "" song_name = self.current_media.title or "" artist_name = self.current_media.artist or "" - if app_running: + if app_running and self.flow_mode: await self.roku_input( { "u": "", -- 2.34.1