Skip to content

Commit 0ba092b

Browse files
committed
fix playerstate
1 parent 05f728b commit 0ba092b

File tree

3 files changed

+21
-24
lines changed

3 files changed

+21
-24
lines changed

music_assistant/models/player_queue.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,10 +54,10 @@ def __init__(self, media_item=None):
5454
class PlayerQueue:
5555
"""Class that holds the queue items for a player."""
5656

57-
def __init__(self, mass, player_id):
57+
def __init__(self, mass, player):
5858
"""Initialize class."""
5959
self.mass = mass
60-
self.player_id = player_id
60+
self._player = player
6161
self._items = []
6262
self._shuffle_enabled = False
6363
self._repeat_enabled = False
@@ -78,7 +78,12 @@ async def async_close(self):
7878
@property
7979
def player(self):
8080
"""Return handle to player."""
81-
return self.mass.player_manager.get_player(self.player_id)
81+
return self._player
82+
83+
@property
84+
def player_id(self):
85+
"""Return handle to player."""
86+
return self._player.player_id
8287

8388
@property
8489
def shuffle_enabled(self):

music_assistant/player_manager.py

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -140,16 +140,14 @@ def get_player_controls(
140140

141141
async def async_add_player(self, player: Player) -> None:
142142
"""Register a new player or update an existing one."""
143-
if not player:
143+
if not player or not player.available:
144144
return
145145
is_new_player = player.player_id not in self._players
146146
await self.__async_create_player_state(player)
147147
if is_new_player:
148148
# create player queue
149149
if player.player_id not in self._player_queues:
150-
self._player_queues[player.player_id] = PlayerQueue(
151-
self.mass, player.player_id
152-
)
150+
self._player_queues[player.player_id] = PlayerQueue(self.mass, player)
153151
# TODO: turn on player if it was previously turned on ?
154152
LOGGER.info(
155153
"New player added: %s/%s",
@@ -161,6 +159,7 @@ async def async_add_player(self, player: Player) -> None:
161159
async def async_remove_player(self, player_id: str):
162160
"""Remove a player from the registry."""
163161
self._players.pop(player_id, None)
162+
self._player_queues.pop(player_id, None)
164163
self._org_players.pop(player_id, None)
165164
LOGGER.info("Player removed: %s", player_id)
166165
self.mass.signal_event(EVENT_PLAYER_REMOVED, {"player_id": player_id})
@@ -703,9 +702,9 @@ def __get_player_state(self, player: Player, active_parent: str, powered: bool):
703702
if powered and active_parent != player.player_id:
704703
# use group state
705704
return self._players[active_parent].state
706-
if player.state == PlayerState.Stopped and not powered:
705+
if PlayerState(player.state) == PlayerState.Stopped and not powered:
707706
return PlayerState.Off
708-
return player.state
707+
return PlayerState(player.state)
709708

710709
@callback
711710
@classmethod

music_assistant/providers/squeezebox/socket_client.py

Lines changed: 8 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
from enum import Enum
99
from typing import Awaitable
1010

11+
from music_assistant.models.player import PlayerState
1112
from music_assistant.utils import callback, run_periodic
1213

1314
from .constants import PROV_ID
@@ -30,14 +31,6 @@
3031
}
3132

3233

33-
class State(str, Enum):
34-
"""Enum for the playstate of a squeezebox player."""
35-
36-
Stopped = "stopped"
37-
Paused = "paused"
38-
Playing = "playing"
39-
40-
4134
class Event(Enum):
4235
"""Enum with the various events the socket client fires."""
4336

@@ -70,7 +63,7 @@ def __init__(
7063
self._volume_level = 0
7164
self._powered = False
7265
self._muted = False
73-
self._state = State.Stopped
66+
self._state = PlayerState.Stopped
7467
self._elapsed_time = 0
7568
self._current_uri = ""
7669
self._tasks = [
@@ -356,7 +349,7 @@ def _process_stat_stmf(self, data):
356349
"""Process incoming stat STMf message (connection closed)."""
357350
# pylint: disable=unused-argument
358351
LOGGER.debug("STMf received - connection closed.")
359-
self._state = State.Stopped
352+
self._state = PlayerState.Stopped
360353
asyncio.create_task(self._event_callback(Event.EVENT_UPDATED, self))
361354

362355
@callback
@@ -376,23 +369,23 @@ def _process_stat_stmp(self, data):
376369
"""Process incoming stat STMp message: Pause confirmed."""
377370
# pylint: disable=unused-argument
378371
LOGGER.debug("STMp received - pause confirmed.")
379-
self._state = State.Paused
372+
self._state = PlayerState.Paused
380373
asyncio.create_task(self._event_callback(Event.EVENT_UPDATED, self))
381374

382375
@callback
383376
def _process_stat_stmr(self, data):
384377
"""Process incoming stat STMr message: Resume confirmed."""
385378
# pylint: disable=unused-argument
386379
LOGGER.debug("STMr received - resume confirmed.")
387-
self._state = State.Playing
380+
self._state = PlayerState.Playing
388381
asyncio.create_task(self._event_callback(Event.EVENT_UPDATED, self))
389382

390383
@callback
391384
def _process_stat_stms(self, data):
392385
# pylint: disable=unused-argument
393386
"""Process incoming stat STMs message: Playback of new track has started."""
394387
LOGGER.debug("STMs received - playback of new track has started.")
395-
self._state = State.Playing
388+
self._state = PlayerState.Playing
396389
asyncio.create_task(self._event_callback(Event.EVENT_UPDATED, self))
397390

398391
@callback
@@ -419,7 +412,7 @@ def _process_stat_stmt(self, data):
419412
server_timestamp,
420413
error_code,
421414
) = struct.unpack("!BBBLLLLHLLLLHLLH", data)
422-
if self._state == State.Playing and elapsed_seconds != self._elapsed_time:
415+
if self._state == PlayerState.Playing and elapsed_seconds != self._elapsed_time:
423416
self._elapsed_time = elapsed_seconds
424417
asyncio.create_task(self._event_callback(Event.EVENT_UPDATED, self))
425418

@@ -428,7 +421,7 @@ def _process_stat_stmu(self, data):
428421
"""Process incoming stat STMu message: Buffer underrun: Normal end of playback."""
429422
# pylint: disable=unused-argument
430423
LOGGER.debug("STMu received - end of playback.")
431-
self.state = State.Stopped
424+
self.state = PlayerState.Stopped
432425
asyncio.create_task(self._event_callback(Event.EVENT_UPDATED, self))
433426

434427
@callback

0 commit comments

Comments
 (0)