Support for Tidal qualities <= 1

This commit is contained in:
nathom 2021-04-09 17:37:14 -07:00
parent 0d2ca55be5
commit f8dc9d206f
3 changed files with 88 additions and 41 deletions

View file

@ -93,9 +93,12 @@ class TrackMetadata:
"""
if self.__source == "qobuz":
self.album = resp.get("title")
self.tracktotal = str(resp.get("tracks_count", 1))
self.tracktotal = resp.get("tracks_count", 1)
self.genre = resp.get("genres_list", [])
self.date = resp.get("release_date_original") or resp.get("release_date")
if self.date:
self.year = self.date[:4]
self.copyright = resp.get("copyright")
self.albumartist = safe_get(resp, "artist", "name")
self.label = resp.get("label")
@ -117,8 +120,11 @@ class TrackMetadata:
self.tracktotal = resp.get("numberOfTracks")
# genre not returned by API
self.date = resp.get("releaseDate")
if self.date:
self.year = self.date[:4]
self.copyright = resp.get("copyright")
self.albumartist = resp.get("artist", {}).get("name")
self.albumartist = safe_get(resp, 'artist', 'name')
self.disctotal = resp.get("numberOfVolumes")
self.isrc = resp.get("isrc")
self.explicit = resp.get("explicit", False)
@ -127,9 +133,9 @@ class TrackMetadata:
elif self.__source == "deezer":
self.album = resp.get("title")
self.tracktotal = resp.get("track_total")
self.genre = resp.get("genres", {}).get("data")
self.genre = safe_get(resp, 'genres', 'data')
self.date = resp.get("release_date")
self.albumartist = resp.get("artist", {}).get("name")
self.albumartist = safe_get(resp, 'artist', 'name')
self.label = resp.get("label")
# either 0 or 1
self.explicit = bool(resp.get("parental_warning"))
@ -140,8 +146,8 @@ class TrackMetadata:
raise ValueError(self.__source)
def add_track_meta(self, track: dict):
"""Parse the metadata from a track dict returned by the
Qobuz API.
"""Parse the metadata from a track dict returned by an
API.
:param track:
"""
@ -150,25 +156,23 @@ class TrackMetadata:
self._mod_title(track.get("version"), track.get("work"))
self.composer = track.get("composer", {}).get("name")
self.tracknumber = f"{int(track.get('track_number', 1)):02}"
self.discnumber = str(track.get("media_number", 1))
try:
self.artist = track["performer"]["name"]
except KeyError:
if hasattr(self, "albumartist"):
self.artist = self.albumartist
self.tracknumber = track.get('track_number', 1)
self.discnumber = track.get("media_number", 1)
self.artist = safe_get(track, 'performer', 'name')
if self.artist is None:
self.artist = self.get('albumartist')
elif self.__source == "tidal":
self.title = track.get("title").strip()
self._mod_title(track.get("version"), None)
self.tracknumber = f"{int(track.get('trackNumber', 1)):02}"
self.discnumber = str(track.get("volumeNumber"))
self.tracknumber = track.get('trackNumber', 1)
self.discnumber = track.get("volumeNumber")
self.artist = track.get("artist", {}).get("name")
elif self.__source == "deezer":
self.title = track.get("title").strip()
self._mod_title(track.get("version"), None)
self.tracknumber = f"{int(track.get('track_position', 1)):02}"
self.tracknumber = track.get('track_position', 1)
self.discnumber = track.get("disk_number")
self.artist = track.get("artist", {}).get("name")
@ -364,14 +368,22 @@ class TrackMetadata:
if text is not None and v is not None:
yield (v.__name__, v(encoding=3, text=text))
def __mp4_tags(self) -> Tuple[str, str]:
def __gen_mp4_tags(self) -> Tuple[str, Union[str, int, tuple]]:
"""Generate key, value pairs to tag ALAC or AAC files in
an MP4 container.
:rtype: Tuple[str, str]
"""
for k, v in MP4_KEY.items():
return (v, getattr(self, k))
if k == "tracknumber":
text = [(self.tracknumber, self.tracktotal)]
elif k == 'discnumber':
text = [(self.discnumber, self.get('disctotal', 1))]
else:
text = getattr(self, k)
if v is not None and text is not None:
yield (v, text)
def __setitem__(self, key, val):
"""Dict-like access for tags.