mirror of
https://github.com/nathom/streamrip.git
synced 2025-05-13 14:44:49 -04:00
Allow for multiple artists on Qobuz
This commit is contained in:
parent
c9dfc61d9f
commit
8739c9ec01
1 changed files with 32 additions and 9 deletions
|
@ -131,16 +131,25 @@ class TrackMetadata:
|
||||||
self.album = resp.get("title", "Unknown Album")
|
self.album = resp.get("title", "Unknown Album")
|
||||||
self.tracktotal = resp.get("tracks_count", 1)
|
self.tracktotal = resp.get("tracks_count", 1)
|
||||||
self.genre = resp.get("genres_list") or resp.get("genre") or []
|
self.genre = resp.get("genres_list") or resp.get("genre") or []
|
||||||
self.date = resp.get("release_date_original") or resp.get("release_date")
|
self.date = resp.get("release_date_original") or resp.get(
|
||||||
|
"release_date"
|
||||||
|
)
|
||||||
self.copyright = resp.get("copyright")
|
self.copyright = resp.get("copyright")
|
||||||
|
|
||||||
|
if artists := resp.get("artists"):
|
||||||
|
self.albumartist = ", ".join(a["name"] for a in artists)
|
||||||
|
else:
|
||||||
self.albumartist = safe_get(resp, "artist", "name")
|
self.albumartist = safe_get(resp, "artist", "name")
|
||||||
|
|
||||||
self.albumcomposer = safe_get(resp, "composer", "name")
|
self.albumcomposer = safe_get(resp, "composer", "name")
|
||||||
self.label = resp.get("label")
|
self.label = resp.get("label")
|
||||||
self.description = resp.get("description")
|
self.description = resp.get("description")
|
||||||
self.disctotal = (
|
self.disctotal = (
|
||||||
max(
|
max(
|
||||||
track.get("media_number", 1)
|
track.get("media_number", 1)
|
||||||
for track in safe_get(resp, "tracks", "items", default=[{}])
|
for track in safe_get(
|
||||||
|
resp, "tracks", "items", default=[{}]
|
||||||
|
)
|
||||||
)
|
)
|
||||||
or 1
|
or 1
|
||||||
)
|
)
|
||||||
|
@ -179,14 +188,22 @@ class TrackMetadata:
|
||||||
self.cover_urls = get_cover_urls(resp, self.__source)
|
self.cover_urls = get_cover_urls(resp, self.__source)
|
||||||
self.streamable = resp.get("allowStreaming", False)
|
self.streamable = resp.get("allowStreaming", False)
|
||||||
|
|
||||||
if q := resp.get("audioQuality"): # for album entries in single tracks
|
if q := resp.get(
|
||||||
|
"audioQuality"
|
||||||
|
): # for album entries in single tracks
|
||||||
self._get_tidal_quality(q)
|
self._get_tidal_quality(q)
|
||||||
|
|
||||||
elif self.__source == "deezer":
|
elif self.__source == "deezer":
|
||||||
self.album = resp.get("title", "Unknown Album")
|
self.album = resp.get("title", "Unknown Album")
|
||||||
self.tracktotal = resp.get("track_total", 0) or resp.get("nb_tracks", 0)
|
self.tracktotal = resp.get("track_total", 0) or resp.get(
|
||||||
|
"nb_tracks", 0
|
||||||
|
)
|
||||||
self.disctotal = (
|
self.disctotal = (
|
||||||
max(track.get("disk_number") for track in resp.get("tracks", [{}])) or 1
|
max(
|
||||||
|
track.get("disk_number")
|
||||||
|
for track in resp.get("tracks", [{}])
|
||||||
|
)
|
||||||
|
or 1
|
||||||
)
|
)
|
||||||
self.genre = safe_get(resp, "genres", "data")
|
self.genre = safe_get(resp, "genres", "data")
|
||||||
self.date = resp.get("release_date")
|
self.date = resp.get("release_date")
|
||||||
|
@ -343,7 +360,9 @@ class TrackMetadata:
|
||||||
|
|
||||||
if isinstance(self._genres, list):
|
if isinstance(self._genres, list):
|
||||||
if self.__source == "qobuz":
|
if self.__source == "qobuz":
|
||||||
genres: Iterable = re.findall(r"([^\u2192\/]+)", "/".join(self._genres))
|
genres: Iterable = re.findall(
|
||||||
|
r"([^\u2192\/]+)", "/".join(self._genres)
|
||||||
|
)
|
||||||
genres = set(genres)
|
genres = set(genres)
|
||||||
elif self.__source == "deezer":
|
elif self.__source == "deezer":
|
||||||
genres = (g["name"] for g in self._genres)
|
genres = (g["name"] for g in self._genres)
|
||||||
|
@ -377,7 +396,9 @@ class TrackMetadata:
|
||||||
if hasattr(self, "_copyright"):
|
if hasattr(self, "_copyright"):
|
||||||
if self._copyright is None:
|
if self._copyright is None:
|
||||||
return None
|
return None
|
||||||
copyright: str = re.sub(r"(?i)\(P\)", PHON_COPYRIGHT, self._copyright)
|
copyright: str = re.sub(
|
||||||
|
r"(?i)\(P\)", PHON_COPYRIGHT, self._copyright
|
||||||
|
)
|
||||||
copyright = re.sub(r"(?i)\(C\)", COPYRIGHT, copyright)
|
copyright = re.sub(r"(?i)\(C\)", COPYRIGHT, copyright)
|
||||||
return copyright
|
return copyright
|
||||||
|
|
||||||
|
@ -581,7 +602,9 @@ class TrackMetadata:
|
||||||
|
|
||||||
:rtype: int
|
:rtype: int
|
||||||
"""
|
"""
|
||||||
return sum(hash(v) for v in self.asdict().values() if isinstance(v, Hashable))
|
return sum(
|
||||||
|
hash(v) for v in self.asdict().values() if isinstance(v, Hashable)
|
||||||
|
)
|
||||||
|
|
||||||
def __repr__(self) -> str:
|
def __repr__(self) -> str:
|
||||||
"""Return the string representation of the metadata object.
|
"""Return the string representation of the metadata object.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue