finally
This commit is contained in:
@@ -323,17 +323,30 @@ class EASY_DW:
|
|||||||
# Add parent info based on parent type
|
# Add parent info based on parent type
|
||||||
if self.__parent == "playlist" and hasattr(self.__preferences, "json_data"):
|
if self.__parent == "playlist" and hasattr(self.__preferences, "json_data"):
|
||||||
playlist_data = self.__preferences.json_data
|
playlist_data = self.__preferences.json_data
|
||||||
playlist_name = playlist_data.get('title', 'unknown')
|
is_spotify_playlist = 'display_name' in playlist_data.get('owner', {})
|
||||||
total_tracks = getattr(self.__preferences, 'total_tracks', 0)
|
|
||||||
current_track = getattr(self.__preferences, 'track_number', 0)
|
|
||||||
|
|
||||||
# Format for playlist-parented tracks exactly as required
|
if is_spotify_playlist:
|
||||||
|
playlist_name = playlist_data.get('name', 'unknown')
|
||||||
|
owner = playlist_data.get('owner', {}).get('display_name', 'unknown')
|
||||||
|
total_tracks = playlist_data.get('tracks', {}).get('total', 0)
|
||||||
|
playlist_id = playlist_data.get('id', '')
|
||||||
|
url = f"https://open.spotify.com/playlist/{playlist_id}"
|
||||||
|
else: # Deezer logic
|
||||||
|
playlist_name = playlist_data.get('title', 'unknown')
|
||||||
|
owner = playlist_data.get('creator', {}).get('name', 'unknown')
|
||||||
|
total_tracks = getattr(self.__preferences, 'total_tracks', 0)
|
||||||
|
playlist_id = playlist_data.get('id', '')
|
||||||
|
url = f"https://deezer.com/playlist/{playlist_id}"
|
||||||
|
|
||||||
|
total_tracks_val = getattr(self.__preferences, 'total_tracks', total_tracks)
|
||||||
|
current_track_val = getattr(self.__preferences, 'track_number', 0)
|
||||||
|
|
||||||
parent = {
|
parent = {
|
||||||
"type": "playlist",
|
"type": "playlist",
|
||||||
"name": playlist_name,
|
"name": playlist_name,
|
||||||
"owner": playlist_data.get('creator', {}).get('name', 'unknown'),
|
"owner": owner,
|
||||||
"total_tracks": total_tracks,
|
"total_tracks": total_tracks_val,
|
||||||
"url": f"https://deezer.com/playlist/{self.__preferences.json_data.get('id', '')}"
|
"url": url
|
||||||
}
|
}
|
||||||
elif self.__parent == "album":
|
elif self.__parent == "album":
|
||||||
album_name = self.__song_metadata.get('album', '')
|
album_name = self.__song_metadata.get('album', '')
|
||||||
@@ -375,8 +388,8 @@ class EASY_DW:
|
|||||||
convert_to=self.__convert_to,
|
convert_to=self.__convert_to,
|
||||||
bitrate=self.__bitrate,
|
bitrate=self.__bitrate,
|
||||||
parent=parent,
|
parent=parent,
|
||||||
current_track=current_track,
|
current_track=current_track_val,
|
||||||
total_tracks=total_tracks,
|
total_tracks=total_tracks_val,
|
||||||
summary=summary
|
summary=summary
|
||||||
)
|
)
|
||||||
# self.__c_track might not be fully initialized here if __write_track() hasn't been called
|
# self.__c_track might not be fully initialized here if __write_track() hasn't been called
|
||||||
@@ -415,20 +428,33 @@ class EASY_DW:
|
|||||||
parent = None
|
parent = None
|
||||||
current_track = None
|
current_track = None
|
||||||
total_tracks = None
|
total_tracks = None
|
||||||
|
summary = None
|
||||||
|
|
||||||
spotify_url = getattr(self.__preferences, 'spotify_url', None)
|
spotify_url = getattr(self.__preferences, 'spotify_url', None)
|
||||||
url = spotify_url if spotify_url else self.__link
|
url = spotify_url if spotify_url else self.__link
|
||||||
|
|
||||||
if self.__parent == "playlist" and hasattr(self.__preferences, "json_data"):
|
if self.__parent == "playlist" and hasattr(self.__preferences, "json_data"):
|
||||||
playlist_data = self.__preferences.json_data
|
playlist_data = self.__preferences.json_data
|
||||||
|
is_spotify_playlist = 'display_name' in playlist_data.get('owner', {})
|
||||||
|
if is_spotify_playlist:
|
||||||
|
playlist_name = playlist_data.get('name', 'unknown')
|
||||||
|
owner = playlist_data.get('owner', {}).get('display_name', 'unknown')
|
||||||
|
playlist_id = playlist_data.get('id', '')
|
||||||
|
playlist_url = f"https://open.spotify.com/playlist/{playlist_id}"
|
||||||
|
else: # Deezer logic
|
||||||
|
playlist_name = playlist_data.get('title', 'unknown')
|
||||||
|
owner = playlist_data.get('creator', {}).get('name', 'unknown')
|
||||||
|
playlist_id = playlist_data.get('id', '')
|
||||||
|
playlist_url = f"https://deezer.com/playlist/{playlist_data.get('id', '')}"
|
||||||
|
|
||||||
total_tracks = getattr(self.__preferences, 'total_tracks', 0)
|
total_tracks = getattr(self.__preferences, 'total_tracks', 0)
|
||||||
current_track = getattr(self.__preferences, 'track_number', 0)
|
current_track = getattr(self.__preferences, 'track_number', 0)
|
||||||
parent = {
|
parent = {
|
||||||
"type": "playlist",
|
"type": "playlist",
|
||||||
"name": playlist_data.get('title', 'unknown'),
|
"name": playlist_name,
|
||||||
"owner": playlist_data.get('creator', {}).get('name', 'unknown'),
|
"owner": owner,
|
||||||
"total_tracks": total_tracks,
|
"total_tracks": total_tracks,
|
||||||
"url": f"https://deezer.com/playlist/{playlist_data.get('id', '')}"
|
"url": playlist_url
|
||||||
}
|
}
|
||||||
elif self.__parent == "album":
|
elif self.__parent == "album":
|
||||||
album_name = self.__song_metadata.get('album', '')
|
album_name = self.__song_metadata.get('album', '')
|
||||||
@@ -442,18 +468,34 @@ class EASY_DW:
|
|||||||
"total_tracks": total_tracks,
|
"total_tracks": total_tracks,
|
||||||
"url": f"https://deezer.com/album/{self.__preferences.song_metadata.get('album_id', '')}"
|
"url": f"https://deezer.com/album/{self.__preferences.song_metadata.get('album_id', '')}"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if self.__parent is None:
|
||||||
|
track_info = {
|
||||||
|
"name": self.__song_metadata.get('music', 'Unknown Track'),
|
||||||
|
"artist": self.__song_metadata.get('artist', 'Unknown Artist')
|
||||||
|
}
|
||||||
|
summary = {
|
||||||
|
"successful_tracks": [f"{track_info['name']} - {track_info['artist']}"],
|
||||||
|
"skipped_tracks": [],
|
||||||
|
"failed_tracks": [],
|
||||||
|
"total_successful": 1,
|
||||||
|
"total_skipped": 0,
|
||||||
|
"total_failed": 0,
|
||||||
|
}
|
||||||
|
|
||||||
report_progress(
|
report_progress(
|
||||||
reporter=Download_JOB.progress_reporter,
|
reporter=Download_JOB.progress_reporter,
|
||||||
report_type="track",
|
report_type="track",
|
||||||
song=self.__song_metadata['music'],
|
song=self.__song_metadata['music'],
|
||||||
artist=self.__song_metadata['artist'],
|
artist=self.__song_metadata['artist'],
|
||||||
|
album=self.__song_metadata.get("album", ""),
|
||||||
status="done",
|
status="done",
|
||||||
url=url,
|
url=url,
|
||||||
parent=parent,
|
parent=parent,
|
||||||
current_track=current_track,
|
current_track=current_track,
|
||||||
total_tracks=total_tracks,
|
total_tracks=total_tracks,
|
||||||
convert_to=self.__convert_to
|
convert_to=self.__convert_to,
|
||||||
|
summary=summary
|
||||||
)
|
)
|
||||||
|
|
||||||
except Exception as e: # Covers failures within download_try or download_episode_try
|
except Exception as e: # Covers failures within download_try or download_episode_try
|
||||||
@@ -589,15 +631,26 @@ class EASY_DW:
|
|||||||
|
|
||||||
if self.__parent == "playlist" and hasattr(self.__preferences, "json_data"):
|
if self.__parent == "playlist" and hasattr(self.__preferences, "json_data"):
|
||||||
playlist_data = self.__preferences.json_data
|
playlist_data = self.__preferences.json_data
|
||||||
playlist_name = playlist_data.get('title', 'unknown')
|
is_spotify_playlist = 'display_name' in playlist_data.get('owner', {})
|
||||||
|
if is_spotify_playlist:
|
||||||
|
playlist_name = playlist_data.get('name', 'unknown')
|
||||||
|
owner = playlist_data.get('owner', {}).get('display_name', 'unknown')
|
||||||
|
playlist_id = playlist_data.get('id', '')
|
||||||
|
playlist_url = f"https://open.spotify.com/playlist/{playlist_id}"
|
||||||
|
else: # Deezer logic
|
||||||
|
playlist_name = playlist_data.get('title', 'unknown')
|
||||||
|
owner = playlist_data.get('creator', {}).get('name', 'unknown')
|
||||||
|
playlist_id = playlist_data.get('id', '')
|
||||||
|
playlist_url = f"https://deezer.com/playlist/{playlist_data.get('id', '')}"
|
||||||
|
|
||||||
total_tracks = getattr(self.__preferences, 'total_tracks', 0)
|
total_tracks = getattr(self.__preferences, 'total_tracks', 0)
|
||||||
current_track = getattr(self.__preferences, 'track_number', 0)
|
current_track = getattr(self.__preferences, 'track_number', 0)
|
||||||
parent = {
|
parent = {
|
||||||
"type": "playlist",
|
"type": "playlist",
|
||||||
"name": playlist_name,
|
"name": playlist_name,
|
||||||
"owner": playlist_data.get('creator', {}).get('name', 'unknown'),
|
"owner": owner,
|
||||||
"total_tracks": total_tracks,
|
"total_tracks": total_tracks,
|
||||||
"url": f"https://deezer.com/playlist/{self.__preferences.json_data.get('id', '')}"
|
"url": playlist_url
|
||||||
}
|
}
|
||||||
elif self.__parent == "album":
|
elif self.__parent == "album":
|
||||||
album_name = self.__song_metadata.get('album', '')
|
album_name = self.__song_metadata.get('album', '')
|
||||||
@@ -617,6 +670,7 @@ class EASY_DW:
|
|||||||
report_type="track",
|
report_type="track",
|
||||||
song=self.__song_metadata.get("music", ""),
|
song=self.__song_metadata.get("music", ""),
|
||||||
artist=self.__song_metadata.get("artist", ""),
|
artist=self.__song_metadata.get("artist", ""),
|
||||||
|
album=self.__song_metadata.get("album", ""),
|
||||||
status="initializing",
|
status="initializing",
|
||||||
url=url,
|
url=url,
|
||||||
parent=parent,
|
parent=parent,
|
||||||
@@ -720,14 +774,25 @@ class EASY_DW:
|
|||||||
|
|
||||||
if self.__parent == "playlist" and hasattr(self.__preferences, "json_data"):
|
if self.__parent == "playlist" and hasattr(self.__preferences, "json_data"):
|
||||||
playlist_data = self.__preferences.json_data
|
playlist_data = self.__preferences.json_data
|
||||||
playlist_name = playlist_data.get('title', 'unknown')
|
is_spotify_playlist = 'display_name' in playlist_data.get('owner', {})
|
||||||
|
if is_spotify_playlist:
|
||||||
|
playlist_name = playlist_data.get('name', 'unknown')
|
||||||
|
owner = playlist_data.get('owner', {}).get('display_name', 'unknown')
|
||||||
|
playlist_id = playlist_data.get('id', '')
|
||||||
|
playlist_url = f"https://open.spotify.com/playlist/{playlist_id}"
|
||||||
|
else: # Deezer logic
|
||||||
|
playlist_name = playlist_data.get('title', 'unknown')
|
||||||
|
owner = playlist_data.get('creator', {}).get('name', 'unknown')
|
||||||
|
playlist_id = playlist_data.get('id', '')
|
||||||
|
playlist_url = f"https://deezer.com/playlist/{playlist_data.get('id', '')}"
|
||||||
|
|
||||||
total_tracks = getattr(self.__preferences, 'total_tracks', 0)
|
total_tracks = getattr(self.__preferences, 'total_tracks', 0)
|
||||||
current_track = getattr(self.__preferences, 'track_number', 0)
|
current_track = getattr(self.__preferences, 'track_number', 0)
|
||||||
parent = {
|
parent = {
|
||||||
"type": "playlist", "name": playlist_name,
|
"type": "playlist", "name": playlist_name,
|
||||||
"owner": playlist_data.get('creator', {}).get('name', 'unknown'),
|
"owner": owner,
|
||||||
"total_tracks": total_tracks,
|
"total_tracks": total_tracks,
|
||||||
"url": f"https://deezer.com/playlist/{playlist_data.get('id', '')}"
|
"url": playlist_url
|
||||||
}
|
}
|
||||||
elif self.__parent == "album":
|
elif self.__parent == "album":
|
||||||
album_name = self.__song_metadata.get('album', '')
|
album_name = self.__song_metadata.get('album', '')
|
||||||
@@ -938,10 +1003,12 @@ class EASY_DW:
|
|||||||
class DW_TRACK:
|
class DW_TRACK:
|
||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
preferences: Preferences
|
preferences: Preferences,
|
||||||
|
parent: str = None
|
||||||
) -> None:
|
) -> None:
|
||||||
|
|
||||||
self.__preferences = preferences
|
self.__preferences = preferences
|
||||||
|
self.__parent = parent
|
||||||
self.__ids = self.__preferences.ids
|
self.__ids = self.__preferences.ids
|
||||||
self.__song_metadata = self.__preferences.song_metadata
|
self.__song_metadata = self.__preferences.song_metadata
|
||||||
self.__quality_download = self.__preferences.quality_download
|
self.__quality_download = self.__preferences.quality_download
|
||||||
@@ -956,7 +1023,7 @@ class DW_TRACK:
|
|||||||
infos_dw['media_url'] = media[0]
|
infos_dw['media_url'] = media[0]
|
||||||
|
|
||||||
# For individual tracks, parent is None (not part of album or playlist)
|
# For individual tracks, parent is None (not part of album or playlist)
|
||||||
track = EASY_DW(infos_dw, self.__preferences, parent=None).easy_dw()
|
track = EASY_DW(infos_dw, self.__preferences, parent=self.__parent).easy_dw()
|
||||||
|
|
||||||
# Check if track failed but was NOT intentionally skipped
|
# Check if track failed but was NOT intentionally skipped
|
||||||
if not track.success and not getattr(track, 'was_skipped', False):
|
if not track.success and not getattr(track, 'was_skipped', False):
|
||||||
@@ -968,29 +1035,6 @@ class DW_TRACK:
|
|||||||
logger.error(f"{error_msg} (Link: {current_link})")
|
logger.error(f"{error_msg} (Link: {current_link})")
|
||||||
raise TrackNotFound(message=error_msg, url=current_link)
|
raise TrackNotFound(message=error_msg, url=current_link)
|
||||||
|
|
||||||
if track.success and not getattr(track, 'was_skipped', False):
|
|
||||||
track_info = {
|
|
||||||
"name": track.tags.get('music', 'Unknown Track'),
|
|
||||||
"artist": track.tags.get('artist', 'Unknown Artist')
|
|
||||||
}
|
|
||||||
summary = {
|
|
||||||
"successful_tracks": [f"{track_info['name']} - {track_info['artist']}"],
|
|
||||||
"skipped_tracks": [],
|
|
||||||
"failed_tracks": [],
|
|
||||||
"total_successful": 1,
|
|
||||||
"total_skipped": 0,
|
|
||||||
"total_failed": 0,
|
|
||||||
}
|
|
||||||
report_progress(
|
|
||||||
reporter=Download_JOB.progress_reporter,
|
|
||||||
report_type="track",
|
|
||||||
song=track_info['name'],
|
|
||||||
artist=track_info['artist'],
|
|
||||||
status="done",
|
|
||||||
url=track.link,
|
|
||||||
summary=summary
|
|
||||||
)
|
|
||||||
|
|
||||||
return track
|
return track
|
||||||
|
|
||||||
class DW_ALBUM:
|
class DW_ALBUM:
|
||||||
@@ -1401,6 +1445,8 @@ class DW_PLAYLIST:
|
|||||||
c_preferences.song_metadata = c_song_metadata_item # This is the full metadata dict for a successful track
|
c_preferences.song_metadata = c_song_metadata_item # This is the full metadata dict for a successful track
|
||||||
c_preferences.track_number = idx
|
c_preferences.track_number = idx
|
||||||
c_preferences.total_tracks = total_tracks
|
c_preferences.total_tracks = total_tracks
|
||||||
|
c_preferences.json_data = self.__json_data
|
||||||
|
c_preferences.link = f"https://deezer.com/track/{c_preferences.ids}"
|
||||||
|
|
||||||
# Download the track using the EASY_DW downloader
|
# Download the track using the EASY_DW downloader
|
||||||
# Wrap this in a try-except block to handle individual track failures
|
# Wrap this in a try-except block to handle individual track failures
|
||||||
|
|||||||
@@ -105,7 +105,8 @@ class DeeLogin:
|
|||||||
convert_to=None,
|
convert_to=None,
|
||||||
bitrate=None,
|
bitrate=None,
|
||||||
save_cover=stock_save_cover,
|
save_cover=stock_save_cover,
|
||||||
market=stock_market
|
market=stock_market,
|
||||||
|
playlist_context=None
|
||||||
) -> Track:
|
) -> Track:
|
||||||
|
|
||||||
link_is_valid(link_track)
|
link_is_valid(link_track)
|
||||||
@@ -171,8 +172,15 @@ class DeeLogin:
|
|||||||
preferences.save_cover = save_cover
|
preferences.save_cover = save_cover
|
||||||
preferences.market = market
|
preferences.market = market
|
||||||
|
|
||||||
|
if playlist_context:
|
||||||
|
preferences.json_data = playlist_context['json_data']
|
||||||
|
preferences.track_number = playlist_context['track_number']
|
||||||
|
preferences.total_tracks = playlist_context['total_tracks']
|
||||||
|
preferences.spotify_url = playlist_context['spotify_url']
|
||||||
|
|
||||||
try:
|
try:
|
||||||
track = DW_TRACK(preferences).dw()
|
parent = 'playlist' if playlist_context else None
|
||||||
|
track = DW_TRACK(preferences, parent=parent).dw()
|
||||||
return track
|
return track
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"Failed to download track: {str(e)}")
|
logger.error(f"Failed to download track: {str(e)}")
|
||||||
@@ -211,7 +219,8 @@ class DeeLogin:
|
|||||||
convert_to=None,
|
convert_to=None,
|
||||||
bitrate=None,
|
bitrate=None,
|
||||||
save_cover=stock_save_cover,
|
save_cover=stock_save_cover,
|
||||||
market=stock_market
|
market=stock_market,
|
||||||
|
playlist_context=None
|
||||||
) -> Album:
|
) -> Album:
|
||||||
|
|
||||||
link_is_valid(link_album)
|
link_is_valid(link_album)
|
||||||
@@ -252,6 +261,12 @@ class DeeLogin:
|
|||||||
preferences.save_cover = save_cover
|
preferences.save_cover = save_cover
|
||||||
preferences.market = market
|
preferences.market = market
|
||||||
|
|
||||||
|
if playlist_context:
|
||||||
|
preferences.json_data = playlist_context['json_data']
|
||||||
|
preferences.track_number = playlist_context['track_number']
|
||||||
|
preferences.total_tracks = playlist_context['total_tracks']
|
||||||
|
preferences.spotify_url = playlist_context['spotify_url']
|
||||||
|
|
||||||
album = DW_ALBUM(preferences).dw()
|
album = DW_ALBUM(preferences).dw()
|
||||||
|
|
||||||
return album
|
return album
|
||||||
@@ -631,7 +646,8 @@ class DeeLogin:
|
|||||||
convert_to=None,
|
convert_to=None,
|
||||||
bitrate=None,
|
bitrate=None,
|
||||||
save_cover=stock_save_cover,
|
save_cover=stock_save_cover,
|
||||||
market=stock_market
|
market=stock_market,
|
||||||
|
playlist_context=None
|
||||||
) -> Track:
|
) -> Track:
|
||||||
|
|
||||||
link_dee = self.convert_spoty_to_dee_link_track(link_track)
|
link_dee = self.convert_spoty_to_dee_link_track(link_track)
|
||||||
@@ -652,7 +668,8 @@ class DeeLogin:
|
|||||||
convert_to=convert_to,
|
convert_to=convert_to,
|
||||||
bitrate=bitrate,
|
bitrate=bitrate,
|
||||||
save_cover=save_cover,
|
save_cover=save_cover,
|
||||||
market=market
|
market=market,
|
||||||
|
playlist_context=playlist_context
|
||||||
)
|
)
|
||||||
|
|
||||||
return track
|
return track
|
||||||
@@ -674,7 +691,8 @@ class DeeLogin:
|
|||||||
convert_to=None,
|
convert_to=None,
|
||||||
bitrate=None,
|
bitrate=None,
|
||||||
save_cover=stock_save_cover,
|
save_cover=stock_save_cover,
|
||||||
market=stock_market
|
market=stock_market,
|
||||||
|
playlist_context=None
|
||||||
) -> Album:
|
) -> Album:
|
||||||
|
|
||||||
link_dee = self.convert_spoty_to_dee_link_album(link_album)
|
link_dee = self.convert_spoty_to_dee_link_album(link_album)
|
||||||
@@ -693,7 +711,8 @@ class DeeLogin:
|
|||||||
convert_to=convert_to,
|
convert_to=convert_to,
|
||||||
bitrate=bitrate,
|
bitrate=bitrate,
|
||||||
save_cover=save_cover,
|
save_cover=save_cover,
|
||||||
market=market
|
market=market,
|
||||||
|
playlist_context=playlist_context
|
||||||
)
|
)
|
||||||
|
|
||||||
return album
|
return album
|
||||||
@@ -744,6 +763,21 @@ class DeeLogin:
|
|||||||
for index, item in enumerate(playlist_tracks, 1):
|
for index, item in enumerate(playlist_tracks, 1):
|
||||||
is_track = item.get('track')
|
is_track = item.get('track')
|
||||||
if not is_track:
|
if not is_track:
|
||||||
|
logger.warning(f"Skipping an item in playlist {playlist_name} as it does not appear to be a valid track object.")
|
||||||
|
# Create a placeholder for the failed item
|
||||||
|
failed_track_tags = {
|
||||||
|
'name': 'Unknown Skipped Item',
|
||||||
|
'artist': 'Unknown Artist',
|
||||||
|
'error_type': 'InvalidItemStructure',
|
||||||
|
'message': 'Playlist item was not a valid track object.'
|
||||||
|
}
|
||||||
|
failed_track = Track(
|
||||||
|
tags=failed_track_tags,
|
||||||
|
song_path=None, file_format=None, quality=None, link=None, ids=None
|
||||||
|
)
|
||||||
|
failed_track.success = False
|
||||||
|
failed_track.error_message = 'Playlist item was not a valid track object.'
|
||||||
|
tracks.append(failed_track)
|
||||||
continue
|
continue
|
||||||
|
|
||||||
track_info = is_track
|
track_info = is_track
|
||||||
@@ -759,6 +793,13 @@ class DeeLogin:
|
|||||||
link_track = external_urls['spotify']
|
link_track = external_urls['spotify']
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
# Add context for reporting
|
||||||
|
playlist_context={
|
||||||
|
'json_data': playlist_json, # spotify json
|
||||||
|
'track_number': index,
|
||||||
|
'total_tracks': total_tracks,
|
||||||
|
'spotify_url': link_track # The individual track's spotify URL
|
||||||
|
}
|
||||||
# Download each track individually via the Spotify-to-Deezer conversion method.
|
# Download each track individually via the Spotify-to-Deezer conversion method.
|
||||||
downloaded_track = self.download_trackspo(
|
downloaded_track = self.download_trackspo(
|
||||||
link_track,
|
link_track,
|
||||||
@@ -776,12 +817,30 @@ class DeeLogin:
|
|||||||
convert_to=convert_to,
|
convert_to=convert_to,
|
||||||
bitrate=bitrate,
|
bitrate=bitrate,
|
||||||
save_cover=save_cover,
|
save_cover=save_cover,
|
||||||
market=market
|
market=market,
|
||||||
|
playlist_context=playlist_context
|
||||||
)
|
)
|
||||||
tracks.append(downloaded_track)
|
tracks.append(downloaded_track)
|
||||||
except (TrackNotFound, NoDataApi) as e:
|
except (TrackNotFound, NoDataApi) as e:
|
||||||
logger.error(f"Failed to download track: {track_name} - {artist_name}")
|
logger.error(f"Failed to download track: {track_name} - {artist_name}")
|
||||||
tracks.append(f"{track_name} - {artist_name}")
|
|
||||||
|
# Create a proper failed Track object
|
||||||
|
error_message = e.message if hasattr(e, 'message') else str(e)
|
||||||
|
failed_track_tags = {
|
||||||
|
'name': track_name,
|
||||||
|
'artist': artist_name,
|
||||||
|
'error_type': e.__class__.__name__,
|
||||||
|
'message': error_message
|
||||||
|
}
|
||||||
|
failed_track = Track(
|
||||||
|
tags=failed_track_tags,
|
||||||
|
song_path=None, file_format=None, quality=None,
|
||||||
|
link=link_track, # The spotify track link
|
||||||
|
ids=None # We don't have the deezer ID
|
||||||
|
)
|
||||||
|
failed_track.success = False
|
||||||
|
failed_track.error_message = error_message
|
||||||
|
tracks.append(failed_track)
|
||||||
|
|
||||||
# Done status
|
# Done status
|
||||||
successful_tracks_list = []
|
successful_tracks_list = []
|
||||||
|
|||||||
Reference in New Issue
Block a user