From: Marcel van der Veldt Date: Tue, 18 Jun 2019 19:38:08 +0000 (+0200) Subject: some rework on chromecast support X-Git-Url: https://git.kitaultman.com/?a=commitdiff_plain;h=0b96aca2f12a8ea89e68ae8e660459b05733952d;p=music-assistant-server.git some rework on chromecast support --- diff --git a/music_assistant/main.py b/music_assistant/main.py index 143d8309..778bedaf 100755 --- a/music_assistant/main.py +++ b/music_assistant/main.py @@ -13,6 +13,7 @@ import slugify as unicode_slug import uuid import json import time +# import stackimpact from database import Database from utils import run_periodic, LOGGER @@ -50,6 +51,11 @@ class Main(): self.player = Player(self) self.http_streamer = HTTPStreamer(self) + # agent = stackimpact.start( + # agent_key = '4a00b6f2c7da20f692807d204ab3760318978ba3', + # app_name = 'MusicAssistant') + # print("profiler started...") + # start the event loop try: self.event_loop.run_forever() diff --git a/music_assistant/modules/playerproviders/chromecast.py b/music_assistant/modules/playerproviders/chromecast.py index af4cc17f..5b490fc1 100644 --- a/music_assistant/modules/playerproviders/chromecast.py +++ b/music_assistant/modules/playerproviders/chromecast.py @@ -55,7 +55,11 @@ class ChromecastProvider(PlayerProvider): self._player_queue_index = {} self._player_queue_stream_startindex = {} self.supported_musicproviders = ['http'] - asyncio.ensure_future(self.__discover_chromecasts()) + #asyncio.ensure_future(self.__discover_chromecasts()) + # start discovery + def callback(chromecast): + self.mass.event_loop.create_task(self.__chromecast_discovered(chromecast)) + stop_discovery = pychromecast.get_chromecasts(blocking=False, callback=callback) ### Provider specific implementation ##### @@ -67,11 +71,6 @@ 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: - await 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: @@ -110,8 +109,6 @@ class ChromecastProvider(PlayerProvider): self._chromecasts[player_id].set_volume_muted(False) 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 ''' @@ -292,7 +289,6 @@ class ChromecastProvider(PlayerProvider): """Plays media after chromecast has switched to requested app.""" queuedata['mediaSessionId'] = media_controller.status.media_session_id media_controller.send_message(queuedata, inc_session_id=False) - castplayer.wait() if not media_controller.status.media_session_id: receiver_ctrl.launch_app(media_controller.app_id, callback_function=send_queue) else: @@ -381,10 +377,12 @@ class ChromecastProvider(PlayerProvider): if added_player: if added_player in self._players: self._players[added_player].group_parent = str(mz._uuid) + LOGGER.info("player %s added to group %s" %(self._players[added_player].name, self._players[str(mz._uuid)].name)) self.mass.event_loop.create_task(self.mass.player.update_player(self._players[added_player])) elif removed_player: if removed_player in self._players: self._players[removed_player].group_parent = None + LOGGER.info("player %s removed from group %s" %(self._players[removed_player].name, self._players[str(mz._uuid)].name)) self.mass.event_loop.create_task(self.mass.player.update_player(self._players[removed_player])) else: for member in mz.members: @@ -393,7 +391,7 @@ class ChromecastProvider(PlayerProvider): self.mass.event_loop.create_task(self.mass.player.update_player(self._players[member])) async def __chromecast_discovered(self, chromecast): - LOGGER.debug("discovered chromecast: %s" % chromecast) + LOGGER.info("discovered chromecast: %s" % chromecast) player_id = str(chromecast.uuid) ip_change = False if player_id in self._chromecasts and chromecast.uri != self._chromecasts[player_id].uri: @@ -426,7 +424,7 @@ class ChromecastProvider(PlayerProvider): # TODO: persistant storage of player queue ? self._player_queue[player_id] = [] self._player_queue_index[player_id] = 0 - chromecast.wait() + chromecast.start() @run_periodic(600) async def __discover_chromecasts(self): @@ -434,7 +432,6 @@ class ChromecastProvider(PlayerProvider): LOGGER.info('Running Chromecast discovery...') def callback(chromecast): self.mass.event_loop.create_task(self.__chromecast_discovered(chromecast)) - stop_discovery = pychromecast.get_chromecasts(blocking=False, callback=callback) await asyncio.sleep(10) stop_discovery()