librespot-python/librespot/player/Player.py

65 lines
2.2 KiB
Python
Raw Normal View History

2021-02-25 00:07:17 +01:00
from __future__ import annotations
from librespot.core.Session import Session
from librespot.player import PlayerConfiguration, StateWrapper
from librespot.player.metrics import PlaybackMetrics
from librespot.player.mixing import AudioSink
from librespot.player.playback.PlayerSession import PlayerSession
from librespot.player.state.DeviceStateHandler import DeviceStateHandler
from librespot.standard.Closeable import Closeable
2021-02-25 10:22:28 +01:00
import logging
2021-02-25 00:07:17 +01:00
import sched
import time
class Player(Closeable, PlayerSession.Listener, AudioSink.Listener):
VOLUME_MAX: int = 65536
2021-02-25 10:22:28 +01:00
_LOGGER: logging = logging.getLogger(__name__)
2021-02-25 00:07:17 +01:00
_scheduler: sched.scheduler = sched.scheduler(time.time)
_session: Session = None
_conf: PlayerConfiguration = None
_events: Player.EventsDispatcher = None
_sink: AudioSink = None
_metrics: dict[str, PlaybackMetrics] = dict()
_state: StateWrapper = None
_playerSession: PlayerSession = None
_releaseLineFuture = None
_deviceStateListener: DeviceStateHandler.Listener = None
def __init__(self, conf: PlayerConfiguration, session: Session):
self._conf = conf
self._session = session
self._events = Player.EventsDispatcher(conf)
self._sink = AudioSink(conf, self)
2021-02-25 10:22:28 +01:00
self._init_state()
def _init_state(self):
2021-04-10 01:16:18 +02:00
self._state = StateWrapper.StateWrapper(self._session, self, self._conf)
2021-02-25 00:07:17 +01:00
class Anonymous(DeviceStateHandler.Listener):
2021-02-25 10:22:28 +01:00
_player: Player = None
def __init__(self, player: Player):
self._player = player
2021-02-25 00:07:17 +01:00
def ready(self) -> None:
pass
2021-04-10 01:16:18 +02:00
def command(
self,
endpoint: DeviceStateHandler.Endpoint,
data: DeviceStateHandler.CommandBody,
) -> None:
self._player._LOGGER.debug("Received command: {}".format(endpoint))
2021-02-25 00:07:17 +01:00
2021-02-25 10:22:28 +01:00
self._deviceStateListener = Anonymous(self)
self._state.add_listener(self._deviceStateListener)
2021-02-25 00:07:17 +01:00
def volume_up(self, steps: int = 1):
2021-02-25 10:22:28 +01:00
if self._state is None:
2021-02-25 00:07:17 +01:00
return
class EventsDispatcher:
def __init__(self, conf: PlayerConfiguration):
pass