From: Marcel van der Veldt Date: Sat, 30 Nov 2019 15:28:44 +0000 (+0100) Subject: windows compatability X-Git-Url: https://git.kitaultman.com/?a=commitdiff_plain;h=4e6b606196b83a96e36497d74ab02328cb9b5e47;p=music-assistant-server.git windows compatability --- diff --git a/mass.py b/mass.py index cd7dd1ed..87692611 100755 --- a/mass.py +++ b/mass.py @@ -6,7 +6,6 @@ import os import logging from aiorun import run import asyncio -import uvloop logger = logging.getLogger() logformat = logging.Formatter('%(asctime)-15s %(levelname)-5s %(name)s.%(module)s -- %(message)s') @@ -79,7 +78,12 @@ if __name__ == "__main__": do_update() # create event_loop with uvloop event_loop = asyncio.get_event_loop() - uvloop.install() + try: + import uvloop + uvloop.install() + except ImportError: + # uvloop is not available on Windows so safe to ignore this + logger.warning("uvloop support is disabled") # config debug settings if needed if debug: event_loop.set_debug(True) diff --git a/music_assistant/__init__.py b/music_assistant/__init__.py index 6e16371d..628faf69 100644 --- a/music_assistant/__init__.py +++ b/music_assistant/__init__.py @@ -3,7 +3,6 @@ import asyncio import re -import uvloop import os import shutil import slugify as unicode_slug diff --git a/music_assistant/playerproviders/chromecast.py b/music_assistant/playerproviders/chromecast.py index a9c5eda7..a20d5b73 100644 --- a/music_assistant/playerproviders/chromecast.py +++ b/music_assistant/playerproviders/chromecast.py @@ -10,6 +10,7 @@ from pychromecast.controllers.multizone import MultizoneController from pychromecast.socket_client import CONNECTION_STATUS_CONNECTED, CONNECTION_STATUS_DISCONNECTED import types import time +import uuid from ..utils import run_periodic, LOGGER, try_parse_int from ..models.playerprovider import PlayerProvider @@ -229,15 +230,27 @@ class ChromecastProvider(PlayerProvider): async def __handle_group_members_update(self, mz, added_player=None, removed_player=None): ''' handle callback from multizone manager ''' + group_player_id = str(uuid.UUID(mz._uuid)) + group_player = await self.get_player(group_player_id) if added_player: - group_player = await self.get_player(str(mz._uuid)) - group_player.add_group_child(added_player) + player_id = str(uuid.UUID(added_player)) + child_player = await self.get_player(player_id) + if child_player and player_id != group_player_id: + group_player.add_group_child(player_id) + LOGGER.debug("%s added to %s", child_player.name, group_player.name) elif removed_player: - group_player = await self.get_player(str(mz._uuid)) - group_player.remove_group_child(added_player) + player_id = str(uuid.UUID(removed_player)) + group_player.remove_group_child(player_id) + LOGGER.debug("%s removed from %s", player_id, group_player.name) else: - group_player = await self.get_player(str(mz._uuid)) - group_player.group_childs = mz.members + for member in mz.members: + player_id = str(uuid.UUID(member)) + child_player = await self.get_player(player_id) + if not child_player or player_id == group_player_id: + continue + if not player_id in group_player.group_childs: + group_player.add_group_child(player_id) + LOGGER.debug("%s added to %s", child_player.name, group_player.name) @run_periodic(1800) async def __periodic_chromecast_discovery(self): @@ -265,6 +278,7 @@ class ChromecastProvider(PlayerProvider): player_id = str(uuid) if not player_id in self.mass.players._players: self.__chromecast_discovered(player_id, discovery_info) + self.__update_group_players() listener, browser = start_discovery(discovered_callback) time.sleep(30) # run discovery for 30 seconds stop_discovery(browser) @@ -299,8 +313,12 @@ class ChromecastProvider(PlayerProvider): chromecast.media_controller.register_status_listener(status_listener) player.cc.wait() self.mass.run_task(self.add_player(player)) - if player.mz: - player.mz.update_members() + + def __update_group_players(self): + '''update childs of all group players''' + for player in self.players: + if player.cc.cast_type == 'group': + player.mz.update_members() def chunks(l, n): """Yield successive n-sized chunks from l."""