and (queue.items - queue.current_index) < 5
):
task_id = f"fill_radio_tracks_{queue_id}"
- self.mass.call_later(5, self._fill_radio_tracks(queue_id), task_id=task_id)
+ self.mass.call_later(5, self._fill_radio_tracks, queue_id, task_id=task_id)
def on_player_remove(self, player_id: str) -> None:
"""Call when a player is removed from the registry."""
)
self._prev_states[player_id] = new_state
+ if "available" in changed_values and not player.available:
+ # ensure a player that became available is no longer synced
+ if player.synced_to:
+ self.mass.create_task(self.cmd_unsync(player_id))
+ if player.group_childs:
+ for group_child_id in player.group_childs:
+ self.mass.create_task(self.cmd_power(group_child_id))
+ if player.active_group:
+ self.mass.create_task(self.cmd_power(player.active_group, False))
+
if not player.enabled and not force_update:
# ignore updates for disabled players
return
player.available = False
# if the player was playing, restart playback
elif not player_disabled and player.state == PlayerState.PLAYING:
- self.mass.call_later(1, self.mass.player_queues.resume(player.active_source))
+ self.mass.call_later(1, self.mass.player_queues.resume, player.active_source)
# check for group memberships that need to be updated
if player_disabled and player.active_group and player_provider:
# try to remove from the group
self.logger.warning("Connection to HA lost due to error: %s", err)
self.logger.info("Connection to HA lost. Connection will be automatically retried later.")
# schedule a reload of the provider
- self.mass.call_later(5, self.mass.load_provider(self.instance_id, allow_retry=True))
+ self.mass.call_later(5, self.mass.load_provider, self.instance_id, allow_retry=True)
except plexapi.exceptions.BadRequest as err:
if "Invalid token" in str(err):
# token invalid, invalidate the config
- self.mass.call_later(
- 0,
+ self.mass.create_task(
self.mass.config.remove_provider_config_value(
self.instance_id, CONF_AUTH_TOKEN
),
str(exc),
)
# schedule a reload of the provider
- self.mass.call_later(5, self.mass.load_provider(self.instance_id, allow_retry=True))
+ self.mass.call_later(5, self.mass.load_provider, self.instance_id, allow_retry=True)
# handle new player setup in a delayed task because mdns announcements
# can arrive in (duplicated) bursts
task_id = f"setup_sonos_{player_id}"
- self.mass.call_later(5, self._setup_player(player_id, name, info), task_id=task_id)
+ self.mass.call_later(5, self._setup_player, player_id, name, info, task_id=task_id)
async def get_player_config_entries(
self,
await self.mass.players.cmd_unsync_many(group_childs)
await self.mass.players.play_media(airplay.player_id, media)
if group_childs:
- self.mass.call_later(5, self.cmd_sync_many(player_id, group_childs))
+ self.mass.call_later(5, self.cmd_sync_many, player_id, group_childs)
return
if media.queue_id and media.queue_id.startswith("ugp_"):