From a077939be7608f753e0fca07b0089d7e3ad40cfb Mon Sep 17 00:00:00 2001 From: 7x11x13 Date: Sun, 23 Jun 2024 19:31:33 -0400 Subject: [PATCH] Fix missing transcodings error --- scdl/__init__.py | 2 +- scdl/scdl.py | 39 +++++++++++++++++++++------------------ 2 files changed, 22 insertions(+), 19 deletions(-) diff --git a/scdl/__init__.py b/scdl/__init__.py index 02958ca..7531993 100644 --- a/scdl/__init__.py +++ b/scdl/__init__.py @@ -1,3 +1,3 @@ # -*- encoding: utf-8 -*- """Python Soundcloud Music Downloader.""" -__version__ = "v2.9.1" +__version__ = "v2.9.2" diff --git a/scdl/scdl.py b/scdl/scdl.py index 9ef8794..1e66199 100755 --- a/scdl/scdl.py +++ b/scdl/scdl.py @@ -756,30 +756,33 @@ def download_hls( logger.debug(f"Trancodings: {track.media.transcodings}") - transcodings = { - transcoding.preset: transcoding - for transcoding in track.media.transcodings - if transcoding.format.protocol == "hls" - } + transcodings = [t for t in track.media.transcodings if t.format.protocol == "hls"] - preset = None + transcoding = None ext = None - if not kwargs.get("onlymp3") and "aac_1_0" in transcodings: - preset = "aac_1_0" - ext = ".m4a" - elif kwargs.get("opus") and "opus_0_0" in transcodings: - preset = "opus_0_0" - ext = ".opus" - elif "mp3_1_0" in transcodings: - preset = "mp3_1_0" - ext = ".mp3" - if not preset: + + # ordered in terms of preference best -> worst + valid_presets = [("mp3", ".mp3")] + + if not kwargs.get("onlymp3"): + if kwargs.get("opus"): + valid_presets = [("opus", ".opus")] + valid_presets + valid_presets = [("aac", ".m4a")] + valid_presets + + transcoding = None + ext = None + for preset_name, preset_ext in valid_presets: + for t in transcodings: + if t.preset.startswith(preset_name): + transcoding = t + ext = preset_ext + if transcoding: + break + else: raise SoundCloudException( f"Could not find valid transcoding. Available transcodings: {[t.preset for t in track.media.transcodings if t.format.protocol == 'hls']}" ) - transcoding = transcodings[preset] - filename = get_filename(track, ext=ext, playlist_info=playlist_info, **kwargs) logger.debug(f"filename : {filename}") # Skip if file ID or filename already exists