From bb4c6454e5a0a01234fbe87571581ac54f69a8c1 Mon Sep 17 00:00:00 2001 From: Marcel van der Veldt Date: Wed, 28 Aug 2019 09:21:39 +0200 Subject: [PATCH] Update chromecast.py --- .../modules/playerproviders/chromecast.py | 100 ++++++++++-------- 1 file changed, 53 insertions(+), 47 deletions(-) diff --git a/music_assistant/modules/playerproviders/chromecast.py b/music_assistant/modules/playerproviders/chromecast.py index 80eca073..e2b9074c 100644 --- a/music_assistant/modules/playerproviders/chromecast.py +++ b/music_assistant/modules/playerproviders/chromecast.py @@ -66,55 +66,54 @@ class ChromecastProvider(PlayerProvider): async def player_command(self, player_id, cmd:str, cmd_args=None): ''' issue command on player (play, pause, next, previous, stop, power, volume, mute) ''' - if not player_id in self._players or not player_id in self._chromecasts: - return - try: - if cmd == 'play': - self._players[player_id].powered = True - if self._chromecasts[player_id].media_controller.status.player_is_playing: - pass - elif self._chromecasts[player_id].media_controller.status.player_is_paused: - self._chromecasts[player_id].media_controller.play() - else: - await self.__resume_queue(player_id) - await self.mass.player.update_player(self._players[player_id]) - elif cmd == 'pause': - self._chromecasts[player_id].media_controller.pause() - elif cmd == 'stop': - self._chromecasts[player_id].media_controller.stop() - elif cmd == 'next': - enable_crossfade = self.mass.config['player_settings'][player_id]["crossfade_duration"] > 0 - if enable_crossfade: - await self.__play_stream_queue(player_id, self._player_queue_index[player_id]+1) - else: - self._chromecasts[player_id].media_controller.queue_next() - elif cmd == 'previous': - enable_crossfade = self.mass.config['player_settings'][player_id]["crossfade_duration"] > 0 - if enable_crossfade: - await self.__play_stream_queue(player_id, self._player_queue_index[player_id]-1) - else: - self._chromecasts[player_id].media_controller.queue_prev() - elif cmd == 'power' and cmd_args == 'off': - self._players[player_id].powered = False - if not self._players[player_id].group_parent: - self._chromecasts[player_id].quit_app() # power is not supported so send quit_app instead - await self.mass.player.update_player(self._players[player_id]) - elif cmd == 'power': - self._players[player_id].powered = True - await self.mass.player.update_player(self._players[player_id]) - elif cmd == 'volume': - new_volume = try_parse_int(cmd_args) - self._chromecasts[player_id].set_volume(new_volume/100) - self._players[player_id].volume_level = new_volume - await self.mass.player.update_player(self._players[player_id]) - elif cmd == 'mute' and cmd_args == 'off': - self._chromecasts[player_id].set_volume_muted(False) - elif cmd == 'mute': - self._chromecasts[player_id].set_volume_muted(True) - except pychromecast.error.NotConnected: - # CC is not connected, trigger rescan + if (not player_id in self._chromecasts or + not self._chromecasts[player_id].socket_client or + not self._chromecasts[player_id].socket_client.is_connected): LOGGER.warning("command %s failed - %s is disconnected, rescan triggered" %(cmd, self._players[player_id].name)) self.mass.event_loop.create_task(self.__chromecast_discovery()) + return + if cmd == 'play': + self._players[player_id].powered = True + if self._chromecasts[player_id].media_controller.status.player_is_playing: + pass + elif self._chromecasts[player_id].media_controller.status.player_is_paused: + self._chromecasts[player_id].media_controller.play() + else: + await self.__resume_queue(player_id) + await self.mass.player.update_player(self._players[player_id]) + elif cmd == 'pause': + self._chromecasts[player_id].media_controller.pause() + elif cmd == 'stop': + self._chromecasts[player_id].media_controller.stop() + elif cmd == 'next': + enable_crossfade = self.mass.config['player_settings'][player_id]["crossfade_duration"] > 0 + if enable_crossfade: + await self.__play_stream_queue(player_id, self._player_queue_index[player_id]+1) + else: + self._chromecasts[player_id].media_controller.queue_next() + elif cmd == 'previous': + enable_crossfade = self.mass.config['player_settings'][player_id]["crossfade_duration"] > 0 + if enable_crossfade: + await self.__play_stream_queue(player_id, self._player_queue_index[player_id]-1) + else: + self._chromecasts[player_id].media_controller.queue_prev() + elif cmd == 'power' and cmd_args == 'off': + self._players[player_id].powered = False + if not self._players[player_id].group_parent: + self._chromecasts[player_id].quit_app() # power is not supported so send quit_app instead + await self.mass.player.update_player(self._players[player_id]) + elif cmd == 'power': + self._players[player_id].powered = True + await self.mass.player.update_player(self._players[player_id]) + elif cmd == 'volume': + new_volume = try_parse_int(cmd_args) + self._chromecasts[player_id].set_volume(new_volume/100) + self._players[player_id].volume_level = new_volume + await self.mass.player.update_player(self._players[player_id]) + elif cmd == 'mute' and cmd_args == 'off': + self._chromecasts[player_id].set_volume_muted(False) + elif cmd == 'mute': + self._chromecasts[player_id].set_volume_muted(True) async def player_queue(self, player_id, offset=0, limit=50): ''' return the current items in the player's queue ''' @@ -128,6 +127,13 @@ class ChromecastProvider(PlayerProvider): ''' play media on a player ''' + if (not player_id in self._chromecasts or + not self._chromecasts[player_id].socket_client or + not self._chromecasts[player_id].socket_client.is_connected): + LOGGER.warning("command %s failed - %s is disconnected, rescan triggered" %(cmd, self._players[player_id].name)) + self.mass.event_loop.create_task(self.__chromecast_discovery()) + return + castplayer = self._chromecasts[player_id] cur_queue_index = self._player_queue_index.get(player_id, 0) enable_crossfade = self.mass.config['player_settings'][player_id]["crossfade_duration"] > 0 -- 2.34.1