Wrap MPD's state into a transfer struct before finalising the Song
This commit is contained in:
parent
1bb2032b9f
commit
b8bcdc5a83
2 changed files with 19 additions and 8 deletions
|
@ -9,16 +9,17 @@ from yarl import URL
|
|||
|
||||
from ..config.model import MpdConfig
|
||||
from ..player import Player
|
||||
from ..song import Artwork, PlaybackState, Song, to_artwork, to_brainz
|
||||
from ..song import PlaybackState, Song, to_artwork, to_brainz
|
||||
from ..song_receiver import Receiver
|
||||
from ..tools.types import option_fmap, un_maybe_plural
|
||||
from .artwork_cache import MpdArtworkCache
|
||||
from .types import CurrentSongResponse, StatusResponse
|
||||
from .types import MpdState
|
||||
|
||||
|
||||
def mpd_current_to_song(
|
||||
status: StatusResponse, current: CurrentSongResponse, art: Artwork
|
||||
) -> Song:
|
||||
|
||||
def mpd_state_to_song(mpd: MpdState) -> Song:
|
||||
status = mpd.status
|
||||
current = mpd.current
|
||||
return Song(
|
||||
state=PlaybackState(status["state"]),
|
||||
queue_index=int(current["pos"]),
|
||||
|
@ -34,8 +35,8 @@ def mpd_current_to_song(
|
|||
disc=option_fmap(int, current.get("disc")),
|
||||
duration=float(status["duration"]),
|
||||
elapsed=float(status["elapsed"]),
|
||||
musicbrainz=to_brainz(current),
|
||||
art=art,
|
||||
musicbrainz=to_brainz(mpd.current),
|
||||
art=to_artwork(mpd.art),
|
||||
)
|
||||
|
||||
|
||||
|
@ -77,6 +78,7 @@ class MpdStateListener(Player):
|
|||
status, current = await asyncio.gather(
|
||||
self.client.status(), self.client.currentsong()
|
||||
)
|
||||
state = MpdState(status, current)
|
||||
|
||||
if starting_idle_count != self.idle_count:
|
||||
return
|
||||
|
@ -90,7 +92,8 @@ class MpdStateListener(Player):
|
|||
if starting_idle_count != self.idle_count:
|
||||
return
|
||||
|
||||
song = mpd_current_to_song(status, current, to_artwork(art))
|
||||
state = MpdState(status, current, art)
|
||||
song = mpd_state_to_song(state)
|
||||
rprint(song)
|
||||
await self.update(song)
|
||||
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
from dataclasses import dataclass
|
||||
from typing import Literal, NotRequired, Protocol, TypedDict
|
||||
|
||||
from ..song.musicbrainz import MusicBrainzTags
|
||||
|
@ -76,3 +77,10 @@ class CurrentSongResponse(CurrentSongTags):
|
|||
|
||||
|
||||
ReadPictureResponse = TypedDict("ReadPictureResponse", {"binary": bytes})
|
||||
|
||||
|
||||
@dataclass
|
||||
class MpdState:
|
||||
status: StatusResponse
|
||||
current: CurrentSongResponse
|
||||
art: bytes | None = None
|
||||
|
|
Loading…
Reference in a new issue