librespot-python/librespot/player/StateWrapper.py

55 lines
1.9 KiB
Python
Raw Normal View History

2021-02-25 00:07:17 +01:00
from __future__ import annotations
2021-04-10 01:16:20 +02:00
2021-04-24 12:17:02 +02:00
import typing
2021-02-25 00:07:17 +01:00
from librespot.core import Session
2021-02-25 10:22:28 +01:00
from librespot.dealer import DealerClient
2021-05-22 03:26:35 +02:00
from librespot.player import Player, PlayerConfiguration
2021-02-25 00:07:17 +01:00
from librespot.player.state import DeviceStateHandler
from librespot.proto import Connect
2021-05-22 03:26:35 +02:00
from librespot.proto.Player import (ContextPlayerOptions, PlayerState,
Restrictions, Suppressions)
2021-02-25 00:07:17 +01:00
2021-02-25 10:22:28 +01:00
class StateWrapper(DeviceStateHandler.Listener, DealerClient.MessageListener):
2021-02-25 00:07:17 +01:00
_state: PlayerState = None
_session: Session = None
_player: Player = None
_device: DeviceStateHandler = None
2021-05-22 03:26:33 +02:00
def __init__(self, session: Session, player: Player, conf: PlayerConfiguration):
2021-02-25 00:07:17 +01:00
self._session = session
self._player = player
self._device = DeviceStateHandler(session, self, conf)
self._state = self._init_state()
2021-02-25 10:22:28 +01:00
self._device.add_listener(self)
self._session.dealer().add_message_listener(
2021-04-10 01:16:18 +02:00
self,
"spotify:user:attributes:update",
"hm://playlist/",
"hm://collection/collection/" + self._session.username() + "/json",
)
2021-02-25 10:22:28 +01:00
2021-02-25 00:07:17 +01:00
def _init_state(self) -> PlayerState:
2021-04-10 01:16:18 +02:00
return PlayerState(
playback_speed=1.0,
suppressions=Suppressions(),
context_restrictions=Restrictions(),
2021-05-22 03:26:33 +02:00
options=ContextPlayerOptions(
repeating_context=False, shuffling_context=False, repeating_track=False
),
2021-04-10 01:16:18 +02:00
position_as_of_timestamp=0,
position=0,
is_playing=False,
)
2021-02-25 00:07:17 +01:00
2021-02-25 10:22:28 +01:00
def add_listener(self, listener: DeviceStateHandler.Listener):
self._device.add_listener(listener)
2021-02-25 00:07:17 +01:00
def ready(self) -> None:
2021-05-22 03:26:33 +02:00
self._device.update_state(Connect.PutStateReason.NEW_DEVICE, 0, self._state)
2021-02-25 10:22:28 +01:00
2021-05-22 03:26:33 +02:00
def on_message(self, uri: str, headers: typing.Dict[str, str], payload: bytes):
2021-02-25 10:22:28 +01:00
pass