88from librespot .metadata import TrackId
99import ffmpy
1010
11- from zotify .const import TRACKS , ALBUM , GENRES , NAME , ITEMS , DISC_NUMBER , TRACK_NUMBER , IS_PLAYABLE , ARTISTS , IMAGES , URL , \
11+ from zotify .const import TRACKS , ALBUM , GENRES , NAME , ITEMS , DISC_NUMBER , TRACK_NUMBER , TOTAL_TRACKS , IS_PLAYABLE , ARTISTS , IMAGES , URL , \
1212 RELEASE_DATE , ID , TRACKS_URL , FOLLOWED_ARTISTS_URL , SAVED_TRACKS_URL , TRACK_STATS_URL , CODEC_MAP , EXT_MAP , DURATION_MS , \
1313 HREF , ARTISTS , WIDTH
1414from zotify .termoutput import Printer , PrintChannel
@@ -46,7 +46,7 @@ def get_followed_artists() -> list:
4646 return artists
4747
4848
49- def get_song_info (song_id ) -> Tuple [List [str ], List [Any ], str , str , Any , Any , Any , Any , Any , Any , int ]:
49+ def get_song_info (song_id ) -> Tuple [List [str ], List [Any ], str , str , Any , Any , Any , Any , Any , Any , Any , int ]:
5050 """ Retrieves metadata for downloaded songs """
5151 with Loader (PrintChannel .PROGRESS_INFO , "Fetching track information..." ):
5252 (raw , info ) = Zotify .invoke_url (f'{ TRACKS_URL } ?ids={ song_id } &market=from_token' )
@@ -65,6 +65,7 @@ def get_song_info(song_id) -> Tuple[List[str], List[Any], str, str, Any, Any, An
6565 release_year = info [TRACKS ][0 ][ALBUM ][RELEASE_DATE ].split ('-' )[0 ]
6666 disc_number = info [TRACKS ][0 ][DISC_NUMBER ]
6767 track_number = info [TRACKS ][0 ][TRACK_NUMBER ]
68+ total_tracks = info [TRACKS ][0 ][ALBUM ][TOTAL_TRACKS ]
6869 scraped_song_id = info [TRACKS ][0 ][ID ]
6970 is_playable = info [TRACKS ][0 ][IS_PLAYABLE ]
7071 duration_ms = info [TRACKS ][0 ][DURATION_MS ]
@@ -75,7 +76,7 @@ def get_song_info(song_id) -> Tuple[List[str], List[Any], str, str, Any, Any, An
7576 image = i
7677 image_url = image [URL ]
7778
78- return artists , info [TRACKS ][0 ][ARTISTS ], album_name , album_id , name , image_url , release_year , disc_number , track_number , scraped_song_id , is_playable , duration_ms
79+ return artists , info [TRACKS ][0 ][ARTISTS ], album_name , album_id , name , image_url , release_year , disc_number , track_number , total_tracks , scraped_song_id , is_playable , duration_ms
7980 except Exception as e :
8081 raise ValueError (f'Failed to parse TRACKS_URL response: { str (e )} \n { raw } ' )
8182
@@ -156,7 +157,7 @@ def download_track(mode: str, track_id: str, extra_keys=None, disable_progressba
156157 output_template = Zotify .CONFIG .get_output (mode )
157158
158159 (artists , raw_artists , album_name , album_id , name , image_url , release_year , disc_number ,
159- track_number , scraped_song_id , is_playable , duration_ms ) = get_song_info (track_id )
160+ track_number , total_tracks , scraped_song_id , is_playable , duration_ms ) = get_song_info (track_id )
160161
161162 song_name = fix_filename (artists [0 ]) + ' - ' + fix_filename (name )
162163
@@ -171,7 +172,8 @@ def download_track(mode: str, track_id: str, extra_keys=None, disable_progressba
171172 output_template = output_template .replace ("{song_name}" , fix_filename (name ))
172173 output_template = output_template .replace ("{release_year}" , fix_filename (release_year ))
173174 output_template = output_template .replace ("{disc_number}" , fix_filename (disc_number ))
174- output_template = output_template .replace ("{track_number}" ,'{:02d}' .format (int (fix_filename (track_number ))))
175+ output_template = output_template .replace ("{track_number}" , '{:02d}' .format (int (fix_filename (track_number ))))
176+ output_template = output_template .replace ("{total_tracks}" , fix_filename (total_tracks ))
175177 output_template = output_template .replace ("{id}" , fix_filename (scraped_song_id ))
176178 output_template = output_template .replace ("{track_id}" , fix_filename (track_id ))
177179 output_template = output_template .replace ("{ext}" , ext )
@@ -268,7 +270,7 @@ def download_track(mode: str, track_id: str, extra_keys=None, disable_progressba
268270 Printer .print (PrintChannel .SKIPS , f"### Skipping lyrics for { song_name } : lyrics not available ###" )
269271 convert_audio_format (filename_temp )
270272 try :
271- set_audio_tags (filename_temp , artists , genres , name , album_name , release_year , disc_number , track_number )
273+ set_audio_tags (filename_temp , artists , genres , name , album_name , release_year , disc_number , track_number , total_tracks )
272274 set_music_thumbnail (filename_temp , image_url )
273275 except Exception :
274276 Printer .print (PrintChannel .ERRORS , "Unable to write metadata, ensure ffmpeg is installed and added to your PATH." )
0 commit comments