48 lines
1.2 KiB
Python
48 lines
1.2 KiB
Python
from dataclasses import asdict, dataclass
|
|
from typing import Optional
|
|
|
|
from platypush.plugins.media import PlayerState
|
|
from platypush.schemas.mopidy import MopidyStatusSchema
|
|
|
|
from ._track import MopidyTrack
|
|
|
|
|
|
@dataclass
|
|
class MopidyStatus:
|
|
"""
|
|
A dataclass to hold the status of the Mopidy client.
|
|
"""
|
|
|
|
state: PlayerState = PlayerState.STOP
|
|
volume: float = 0
|
|
consume: bool = False
|
|
random: bool = False
|
|
repeat: bool = False
|
|
single: bool = False
|
|
mute: bool = False
|
|
time: Optional[float] = None
|
|
duration: Optional[float] = None
|
|
playing_pos: Optional[int] = None
|
|
track: Optional[MopidyTrack] = None
|
|
|
|
def copy(self):
|
|
return MopidyStatus(
|
|
state=self.state,
|
|
volume=self.volume,
|
|
consume=self.consume,
|
|
random=self.random,
|
|
repeat=self.repeat,
|
|
single=self.single,
|
|
mute=self.mute,
|
|
time=self.time,
|
|
duration=self.duration,
|
|
playing_pos=self.playing_pos,
|
|
track=MopidyTrack(**asdict(self.track)) if self.track else None,
|
|
)
|
|
|
|
def to_dict(self):
|
|
"""
|
|
Convert the Mopidy status to a dictionary.
|
|
"""
|
|
return dict(MopidyStatusSchema().dump(self))
|