diff --git a/setup.py b/setup.py index f28754e..efdc632 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ setup( name="tiddl", - version="1.9.3", + version="1.9.4", description="TIDDL (Tidal Downloader) is a Python CLI application that allows downloading Tidal tracks.", long_description=open("README.md", encoding="utf-8").read(), long_description_content_type="text/markdown", diff --git a/tiddl/__init__.py b/tiddl/__init__.py index edb23a8..46f02d7 100644 --- a/tiddl/__init__.py +++ b/tiddl/__init__.py @@ -140,8 +140,10 @@ def downloadTrack( playlist="", cover_data=b"", ) -> tuple[str, str]: - if track.get("status") == 404: - raise ValueError(track) + if track.get("status", 200) != 200 or not track["allowStreaming"]: + raise ValueError( + f"The track is not streamable: {track["title"]} ({track["id"]})" + ) file_dir, file_name = formatFilename(file_template, track, playlist) @@ -191,7 +193,7 @@ def downloadTrack( with open(file_path, "wb+") as f: f.write(track_data) - if not cover_data: + if not cover_data and track["album"]["cover"]: cover = Cover(track["album"]["cover"]) cover_data = cover.content @@ -235,8 +237,8 @@ def downloadAlbum(album_id: str | int, skip_existing: bool): if SAVE_COVER: album_cover.save(f"{download_path}/{file_dir}") - except ValueError: - logger.warning(f"track unavailable") + except ValueError as e: + logger.error(e) skip_existing = not args.no_skip failed_input = [] @@ -264,11 +266,14 @@ def downloadAlbum(album_id: str | int, skip_existing: bool): logger.warning(f"{e.error['userMessage']} ({e.error['status']})") continue - downloadTrack( - track, - file_template=track_template, - skip_existing=skip_existing, - ) + try: + downloadTrack( + track, + file_template=track_template, + skip_existing=skip_existing, + ) + except ValueError as e: + logger.error(e) continue