# announcement_in_progress boolean to indicate there's an announcement in progress.
announcement_in_progress: bool = False
+ # last_poll: when was the player last polled (used with needs_poll)
+ last_poll: float = 0
+
@property
def corrected_elapsed_time(self) -> float:
"""Return the corrected/realtime elapsed time."""
async def _poll_players(self) -> None:
"""Background task that polls players for updates."""
- count = 0
while True:
- count += 1
for player in list(self._players.values()):
player_id = player.player_id
# if the player is playing, update elapsed time every tick
# Poll player;
if not player.needs_poll:
continue
- if count % player.poll_interval == 0 and (
- player_prov := self.get_player_provider(player_id)
- ):
+ if (self.mass.loop.time() - player.last_poll) < player.poll_interval:
+ continue
+ player.last_poll = self.mass.loop.time()
+ if player_prov := self.get_player_provider(player_id):
try:
await player_prov.poll_player(player_id)
except PlayerUnavailableError:
finally:
# always update player state
self.mass.loop.call_soon(self.update, player_id)
- if count >= 120:
- count = 0
await asyncio.sleep(1)
# Syncgroup specific functions/helpers