"""All constants for Music Assistant."""
-__version__ = "0.1.7"
+__version__ = "0.1.8"
REQUIRED_PYTHON_VER = "3.8"
# configuration keys/attributes
"Syncjob %s for provider %s is already running!", desc, prov_id
)
return
- LOGGER.debug("Start syncjob %s for provider %s.", desc, prov_id)
+ LOGGER.info("Start syncjob %s for provider %s.", desc, prov_id)
sync_job = (prov_id, desc)
method_class.running_sync_jobs.add(sync_job)
method_class.mass.signal_event(
EVENT_MUSIC_SYNC_STATUS, method_class.running_sync_jobs
)
await func(*args)
- LOGGER.debug("Finished syncing %s for provider %s", desc, prov_id)
+ LOGGER.info("Finished syncing %s for provider %s", desc, prov_id)
method_class.running_sync_jobs.remove(sync_job)
method_class.mass.signal_event(
EVENT_MUSIC_SYNC_STATUS, method_class.running_sync_jobs
async def add_player(self, player: Player) -> None:
"""Register a new player or update an existing one."""
+ player_id = player.player_id
+
# guard for invalid data or exit in progress
if not player or self.mass.exit:
return
+
# redirect to update if player is already added
- if player.added_to_mass:
- return await self.trigger_player_update(player.player_id)
- # make sure that the mass instance is set on the player
- player.mass = self.mass
- self._players[player.player_id] = player
+ if player_id in self._players:
+ player = self._players[player_id]
+ if player.added_to_mass:
+ await self.trigger_player_update(player_id)
+ return
+ else:
+ self._players[player.player_id] = player
+ # make sure that the mass instance is set on the player
+ player.mass = self.mass
+
# make sure that the player state is created/updated
player.player_state.update(player.create_state())
+
# Fully initialize only if player is enabled
- if player.enabled:
- await player.on_add()
- player.added_to_mass = True
- # create playerqueue instance
- self._player_queues[player.player_id] = PlayerQueue(
- self.mass, player.player_id
- )
- LOGGER.info(
- "Player added: %s/%s",
- player.provider_id,
- player.name,
- )
- self.mass.signal_event(EVENT_PLAYER_ADDED, player)
- else:
+ if not player.enabled:
LOGGER.debug(
"Ignoring player: %s/%s because it's disabled",
player.provider_id,
player.name,
)
+ return
+
+ # new player
+ player.added_to_mass = True
+ await player.on_add()
+ # create playerqueue instance
+ self._player_queues[player.player_id] = PlayerQueue(self.mass, player.player_id)
+ LOGGER.info(
+ "Player added: %s/%s",
+ player.provider_id,
+ player.name,
+ )
+ self.mass.signal_event(EVENT_PLAYER_ADDED, player)
async def remove_player(self, player_id: str):
"""Remove a player from the registry."""
while not self.exit:
task = await self._background_tasks.get()
await task
- await asyncio.sleep(1)
+ if self._background_tasks.qsize() > 200:
+ await asyncio.sleep(0.5)
+ elif self._background_tasks.qsize() == 0:
+ await asyncio.sleep(10)
+ else:
+ await asyncio.sleep(1)
async def setup_discovery(self) -> None:
"""Make this Music Assistant instance discoverable on the network."""
"cur_index": self._cur_index,
}
await self.mass.cache.set(cache_str, cache_data)
- LOGGER.info("queue state saved to file for player %s", self.queue_id)
+ LOGGER.debug("queue state saved to file for player %s", self.queue_id)
"Chromecast discovered: %s (%s)", cast_info.friendly_name, player_id
)
player = self.mass.players.get_player(player_id)
- if not player and cast_info.is_audio_group:
- # audio groups may reappear with new uuid, try to handle that
+ if not player:
+ # cast players may reappear with new uuid, try to handle that
player = self.mass.players.get_player_by_name(
cast_info.friendly_name, PROV_ID
)