Fixed MP3 only Album/Track TIDAL downloads; #75

This commit is contained in:
nathom 2021-05-13 17:41:14 -07:00
parent 60e1f05115
commit 68a73e1905
3 changed files with 26 additions and 18 deletions

View file

@ -104,7 +104,10 @@ class Track:
self.cover_url = u self.cover_url = u
def load_meta(self): def load_meta(self):
"""Send a request to the client to get metadata for this Track.""" """Send a request to the client to get metadata for this Track.
Usually only called for single tracks and last.fm playlists.
"""
assert self.id is not None, "id must be set before loading metadata" assert self.id is not None, "id must be set before loading metadata"
self.resp = self.client.get(self.id, media_type="track") self.resp = self.client.get(self.id, media_type="track")
@ -137,7 +140,10 @@ class Track:
:param kwargs: :param kwargs:
""" """
# args override attributes # args override attributes
self.quality = min(kwargs["quality"], self.client.max_quality) self.quality = min(
kwargs["quality"], self.client.max_quality, self.meta.quality
)
self.folder = kwargs["parent_folder"] or self.folder self.folder = kwargs["parent_folder"] or self.folder
self.file_format = kwargs.get("track_format", TRACK_FORMAT) self.file_format = kwargs.get("track_format", TRACK_FORMAT)

View file

@ -184,11 +184,9 @@ class TrackMetadata:
} }
) )
self.streamable = resp.get("allowStreaming", False) self.streamable = resp.get("allowStreaming", False)
if resp.get("audioQuality"): # for album entries in single tracks
self.quality = TIDAL_Q_MAP[resp["audioQuality"]]
self.bit_depth = 24 if self.get("quality", False) == 3 else 16 if q := resp.get("audioQuality"): # for album entries in single tracks
self.sampling_rate = 44100 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")
@ -235,7 +233,7 @@ class TrackMetadata:
self.tracknumber = track.get("track_number", 1) self.tracknumber = track.get("track_number", 1)
self.discnumber = track.get("media_number", 1) self.discnumber = track.get("media_number", 1)
self.artist = safe_get(track, "artist", "name") self.artist = safe_get(track, "performer", "name")
elif self.__source == "tidal": elif self.__source == "tidal":
self.title = track["title"].strip() self.title = track["title"].strip()
@ -243,6 +241,7 @@ class TrackMetadata:
self.tracknumber = track.get("trackNumber", 1) self.tracknumber = track.get("trackNumber", 1)
self.discnumber = track.get("volumeNumber", 1) self.discnumber = track.get("volumeNumber", 1)
self.artist = track.get("artist", {}).get("name") self.artist = track.get("artist", {}).get("name")
self._get_tidal_quality(track["audioQuality"])
elif self.__source == "deezer": elif self.__source == "deezer":
self.title = track["title"].strip() self.title = track["title"].strip()
@ -283,6 +282,12 @@ class TrackMetadata:
logger.debug("Work found: %s", work) logger.debug("Work found: %s", work)
self.title = f"{work}: {self.title}" self.title = f"{work}: {self.title}"
def _get_tidal_quality(self, q: str):
self.quality = TIDAL_Q_MAP[q]
if self.quality >= 2:
self.bit_depth = 24 if self.get("quality") == 3 else 16
self.sampling_rate = 44100
@property @property
def album(self) -> str: def album(self) -> str:
"""Return the album of the track. """Return the album of the track.

View file

@ -105,7 +105,9 @@ class Album(Tracklist):
""" """
# Generate the folder name # Generate the folder name
self.folder_format = kwargs.get("folder_format", FOLDER_FORMAT) self.folder_format = kwargs.get("folder_format", FOLDER_FORMAT)
self.quality = min(kwargs.get("quality", 3), self.client.max_quality) if not hasattr(self, "quality"):
self.quality = min(kwargs.get("quality", 3), self.client.max_quality)
self.folder = self._get_formatted_folder( self.folder = self._get_formatted_folder(
kwargs.get("parent_folder", "StreamripDownloads"), self.quality kwargs.get("parent_folder", "StreamripDownloads"), self.quality
) )
@ -185,7 +187,9 @@ class Album(Tracklist):
else: else:
kwargs["parent_folder"] = self.folder kwargs["parent_folder"] = self.folder
if not track.download(quality=quality, database=database, **kwargs): if not track.download(
quality=min(self.quality, quality), database=database, **kwargs
):
return False return False
logger.debug("tagging tracks") logger.debug("tagging tracks")
@ -216,18 +220,11 @@ class Album(Tracklist):
logging.debug(f"Loading {self.tracktotal} tracks to album") logging.debug(f"Loading {self.tracktotal} tracks to album")
for track in _get_tracklist(resp, self.client.source): for track in _get_tracklist(resp, self.client.source):
if track.get("type") == "Music Video": if track.get("type") == "Music Video":
self.append( self.append(Video.from_album_meta(track, self.client))
Video.from_album_meta(
track,
self.client,
)
)
else: else:
self.append( self.append(
Track.from_album_meta( Track.from_album_meta(
album=self.meta, album=self.meta, track=track, client=self.client
track=track,
client=self.client,
) )
) )