Navidrome-Tracker/ListenBrainz.py
2025-04-22 16:35:48 -05:00

60 lines
1.8 KiB
Python

from dataclasses import dataclass
@dataclass
class ListenBrainzScrobble:
artist_name: str
release_name: str
track_name: str
# Optional
artist_mbids: list[str] | None = None
release_group_mbid: str | None = None
release_mbid: str | None = None
recording_mbid: str | None = None
track_mbid: str | None = None
work_mbids: list[str] | None = None
tracknumber: str | None = None
isrc: str | None = None
spotify_id: str | None = None
tags: list[str] | None = None
media_player: str | None = None
media_player_version: str | None = None
submission_client: str | None = None
submission_client_version: str | None = None
music_service: str | None = None
music_service_name: str | None = None
origin_url: str | None = None
duration: int | None = None
duration_ms: int | None = None
@staticmethod
def from_json(data: dict):
additional_info_keys = [
'artist_mbids',
'release_group_mbid',
'release_mbid',
'recording_mbid',
'track_mbid',
'work_mbids',
'tracknumber',
'isrc',
'spotify_id',
'tags',
'media_player',
'media_player_version',
'submission_client',
'submission_client_version',
'music_service',
'music_service_name',
'origin_url',
'duration',
'duration_ms'
]
add_info = data['additional_info']
return ListenBrainzScrobble(
artist_name=data['artist_name'],
release_name=data['release_name'],
track_name=data['track_name'],
**{key:(add_info[key] if key in add_info else None) for key in additional_info_keys}
)