From 503447bba359fdbb08d9b7eb083096d18e056d21 Mon Sep 17 00:00:00 2001 From: Marcel van der Veldt Date: Sun, 26 May 2019 19:49:18 +0200 Subject: [PATCH] add some more guarding to chromecast --- .../modules/playerproviders/chromecast.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/music_assistant/modules/playerproviders/chromecast.py b/music_assistant/modules/playerproviders/chromecast.py index 94701c4b..e56d73eb 100644 --- a/music_assistant/modules/playerproviders/chromecast.py +++ b/music_assistant/modules/playerproviders/chromecast.py @@ -60,6 +60,11 @@ 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) ''' + count = 0 + while self._chromecasts[player_id].is_busy and count < 10: + asyncio.sleep(0.1) + count += 1 + self._chromecasts[player_id].is_busy = True if cmd == 'play': self._players[player_id].powered = True if self._chromecasts[player_id].media_controller.status.player_is_playing: @@ -91,6 +96,7 @@ class ChromecastProvider(PlayerProvider): elif cmd == 'mute': self._chromecasts[player_id].set_volume_muted(True) self._chromecasts[player_id].wait() + self._chromecasts[player_id].is_busy = False async def player_queue(self, player_id, offset=0, limit=50): ''' return the current items in the player's queue ''' @@ -100,6 +106,11 @@ class ChromecastProvider(PlayerProvider): ''' play media on a player ''' + count = 0 + while self._chromecasts[player_id].is_busy and count < 10: + asyncio.sleep(0.1) + count += 1 + self._chromecasts[player_id].is_busy = True castplayer = self._chromecasts[player_id] cur_queue_index = await self.__get_cur_queue_index(player_id) @@ -129,6 +140,7 @@ class ChromecastProvider(PlayerProvider): # add new items at end of queue self._player_queue[player_id] = self._player_queue[player_id] + media_items await self.__queue_insert(player_id, media_items) + self._chromecasts[player_id].is_busy = False ### Provider specific (helper) methods ##### @@ -239,6 +251,7 @@ class ChromecastProvider(PlayerProvider): queuedata['mediaSessionId'] = media_controller.status.media_session_id media_controller.send_message(queuedata, inc_session_id=False) castplayer.wait() + await asyncio.sleep(0.2) receiver_ctrl.launch_app(media_controller.app_id, callback_function=app_launched_callback) @@ -322,6 +335,7 @@ class ChromecastProvider(PlayerProvider): player.player_id = player_id player.name = chromecast.name player.player_provider = self.prov_id + chromecast.is_busy = False # patch the receive message method for handling queue status updates chromecast.queue = [] chromecast.media_controller.queue_items = [] -- 2.34.1