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
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"
self.resp = self.client.get(self.id, media_type="track")
@ -137,7 +140,10 @@ class Track:
:param kwargs:
"""
# 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.file_format = kwargs.get("track_format", TRACK_FORMAT)

View file

@ -184,11 +184,9 @@ class TrackMetadata:
}
)
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
self.sampling_rate = 44100
if q := resp.get("audioQuality"): # for album entries in single tracks
self._get_tidal_quality(q)
elif self.__source == "deezer":
self.album = resp.get("title", "Unknown Album")
@ -235,7 +233,7 @@ class TrackMetadata:
self.tracknumber = track.get("track_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":
self.title = track["title"].strip()
@ -243,6 +241,7 @@ class TrackMetadata:
self.tracknumber = track.get("trackNumber", 1)
self.discnumber = track.get("volumeNumber", 1)
self.artist = track.get("artist", {}).get("name")
self._get_tidal_quality(track["audioQuality"])
elif self.__source == "deezer":
self.title = track["title"].strip()
@ -283,6 +282,12 @@ class TrackMetadata:
logger.debug("Work found: %s", work)
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
def album(self) -> str:
"""Return the album of the track.

View file

@ -105,7 +105,9 @@ class Album(Tracklist):
"""
# Generate the folder name
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(
kwargs.get("parent_folder", "StreamripDownloads"), self.quality
)
@ -185,7 +187,9 @@ class Album(Tracklist):
else:
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
logger.debug("tagging tracks")
@ -216,18 +220,11 @@ class Album(Tracklist):
logging.debug(f"Loading {self.tracktotal} tracks to album")
for track in _get_tracklist(resp, self.client.source):
if track.get("type") == "Music Video":
self.append(
Video.from_album_meta(
track,
self.client,
)
)
self.append(Video.from_album_meta(track, self.client))
else:
self.append(
Track.from_album_meta(
album=self.meta,
track=track,
client=self.client,
album=self.meta, track=track, client=self.client
)
)