Skip to content

Commit

Permalink
Refresh players after group event
Browse files Browse the repository at this point in the history
  • Loading branch information
andrewsayre committed Jan 23, 2025
1 parent 4793483 commit 58d7bc3
Show file tree
Hide file tree
Showing 5 changed files with 68 additions and 3 deletions.
1 change: 0 additions & 1 deletion pyheos/command/player.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,6 @@ async def get_players(self, *, refresh: bool = False) -> dict[int, HeosPlayer]:
References:
4.2.1 Get Players"""
# get players and pull initial state
if not self._players_loaded or refresh:
await self.load_players()
return self._players
Expand Down
2 changes: 2 additions & 0 deletions pyheos/heos.py
Original file line number Diff line number Diff line change
Expand Up @@ -234,6 +234,8 @@ async def _on_event_heos(self, event: HeosMessage) -> None:
else:
self._signed_in_username = None
elif event.command == const.EVENT_GROUPS_CHANGED and self._groups_loaded:
if self._players_loaded:
await self.get_players(refresh=True)
await self.get_groups(refresh=True)

await self._dispatcher.wait_send(
Expand Down
1 change: 1 addition & 0 deletions tests/fixtures/player.get_players.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
"payload": [{
"name": "Back Patio",
"pid": 1,
"gid": 2,
"model": "HEOS Drive",
"version": "1.493.180",
"ip": "127.0.0.1",
Expand Down
27 changes: 27 additions & 0 deletions tests/fixtures/player.get_players_no_groups.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
{
"heos": {
"command": "player/get_players",
"result": "success",
"message": ""
},
"payload": [{
"name": "Back Patio",
"pid": 1,
"model": "HEOS Drive",
"version": "1.493.180",
"ip": "127.0.0.1",
"network": "wired",
"lineout": 2,
"control": 2,
"serial": "B1A2C3K"
}, {
"name": "Front Porch",
"pid": 2,
"model": "HEOS Drive",
"version": "1.493.180",
"ip": "127.0.0.2",
"network": "wifi",
"lineout": 1
}
]
}
40 changes: 38 additions & 2 deletions tests/test_heos.py
Original file line number Diff line number Diff line change
Expand Up @@ -1004,11 +1004,14 @@ async def handler(event: str, data: dict[str, Any]) -> None:
assert heos.music_sources[MUSIC_SOURCE_TUNEIN].available


@calls_player_commands()
@calls_group_commands()
async def test_groups_changed_event(mock_device: MockHeosDevice, heos: Heos) -> None:
"""Test groups changed fires dispatcher."""
groups = await heos.get_groups()
players = await heos.get_players()
assert len(groups) == 1
assert all(player.group_id is not None for player in players.values())
signal = asyncio.Event()

async def handler(event: str, data: dict[str, Any]) -> None:
Expand All @@ -1018,14 +1021,47 @@ async def handler(event: str, data: dict[str, Any]) -> None:
heos.dispatcher.connect(SignalType.CONTROLLER_EVENT, handler)

# Write event through mock device
command = mock_device.register(
commands = [
mock_device.register(
c.COMMAND_GET_GROUPS, None, "group.get_groups_changed", replace=True
),
mock_device.register(
c.COMMAND_GET_PLAYERS, None, "player.get_players_no_groups", replace=True
),
]
await mock_device.write_event("event.groups_changed")

# Wait until the signal is set
await signal.wait()
map(lambda c: c.assert_called(), commands)
assert not await heos.get_groups()
assert all(player.group_id is None for player in players.values())


@calls_group_commands()
async def test_groups_changed_event_players_not_loaded(
mock_device: MockHeosDevice, heos: Heos
) -> None:
"""Test groups changed fires dispatcher and does not load players."""
groups = await heos.get_groups()
assert len(groups) == 1
signal = asyncio.Event()

async def handler(event: str, data: dict[str, Any]) -> None:
assert event == EVENT_GROUPS_CHANGED
signal.set()

heos.dispatcher.connect(SignalType.CONTROLLER_EVENT, handler)

# Write event through mock device
get_groups_command = mock_device.register(
c.COMMAND_GET_GROUPS, None, "group.get_groups_changed", replace=True
)
await mock_device.write_event("event.groups_changed")

# Wait until the signal is set
await signal.wait()
command.assert_called()
get_groups_command.assert_called()
assert not await heos.get_groups()


Expand Down

0 comments on commit 58d7bc3

Please sign in to comment.