diff --git a/SpotifyRecorder.py b/SpotifyRecorder.py index 899a31cc8fdeafe407f8485253ff61ae599ea411..cb83ee5f37bd40a3c4634f5dc1d21441d681a7d0 100644 --- a/SpotifyRecorder.py +++ b/SpotifyRecorder.py @@ -85,27 +85,29 @@ class SpotifyRecorder: def __record_tracks(self, tracks: list): deviceId = self.__get_device_id_by_name(self._spotifyDeviceName) - recordedTracks = [] - skippedTracks = [] - errorTracks = [] + recordedTrackNumbers = [] + skippedTrackNumbers = [] + errorTrackNumbers = [] if self._limit == -1: LOGGER.info(f'Recording track #{self._startNumber} to all') - tracks = tracks[self._startNumber:] + tracks = tracks[self._startNumber - 1:] else: LOGGER.info(f'Recording track #{self._startNumber} to (including) #{self._startNumber + self._limit - 1}') - tracks = tracks[self._startNumber:self._startNumber + self._limit] + tracks = tracks[self._startNumber - 1:self._startNumber - 1 + self._limit] for index, track in enumerate(tracks): + indexInPlaylist = self._startNumber + index + if track['is_local']: # It's not possible to add a local track to a playlist using the web API. # https://github.com/plamere/spotipy/issues/793#issuecomment-1082421408 LOGGER.info(f'Skipping local track "{track["track"]["name"]}"') - skippedTracks.append(track['track']['name']) + skippedTrackNumbers.append(indexInPlaylist) continue - indexInPlaylist = self._startNumber + index - LOGGER.info(f'>>> Recording track {index + 1}/{len(tracks)}: #{indexInPlaylist} "{track["track"]["name"]}"...') + LOGGER.info( + f'>>> Recording track {index + 1}/{len(tracks)}: #{indexInPlaylist} "{track["track"]["name"]}"...') try: filePath = self.__determine_file_path(indexInPlaylist + 1, track) recorder = SpotifyAudioRecorder(self._audioDeviceName, filePath) @@ -114,13 +116,23 @@ class SpotifyRecorder: timeWaitedForPlaying = self.__wait_for_track_playing(track['track']['id']) self.__wait_for_track_end(track, timeWaitedForPlaying) - recordedTracks.append(track['track']['name']) + recordedTrackNumbers.append(indexInPlaylist) except Exception as e: LOGGER.error(f'An error occurred while recording track "{track["track"]["name"]}"', exc_info=e) - errorTracks.append(track['track']['name']) + errorTrackNumbers.append(indexInPlaylist) LOGGER.info('### DONE ###') - LOGGER.info(f'{len(tracks)} tracks, {len(recordedTracks)} recorded, {len(skippedTracks)} skipped, {len(errorTracks)} errors') + + LOGGER.info('>>> Skipped <<<') + for number in skippedTrackNumbers: + LOGGER.info(f'Skipped #{number}') + + LOGGER.info('>>> Errors <<<') + for number in errorTrackNumbers: + LOGGER.info(f'Error #{number}') + + LOGGER.info( + f'### {len(tracks)} tracks, {len(recordedTrackNumbers)} recorded, {len(skippedTrackNumbers)} skipped, {len(errorTrackNumbers)} errors ###') def __determine_file_path(self, index: int, track) -> str: artists = track['track']['artists'] @@ -179,7 +191,7 @@ class SpotifyRecorder: raise RuntimeError('Device not found') - def __play_track(self, deviceId: str, trackUri: str): + def __play_track(self, deviceId: str, trackUri: str) -> None: self._spotify.start_playback(device_id=deviceId, uris=[trackUri]) def __wait_for_track_playing(self, expectedTrackId: str) -> float: @@ -194,7 +206,7 @@ class SpotifyRecorder: LOGGER.debug(f'\t\tTrack started playing after {duration:.1f}s') break else: - raise RuntimeError('Wrong track started playing') + raise RuntimeError(f'Wrong track started playing (actual: {currentPlayback["item"]["id"]}, expected: {expectedTrackId})') time.sleep(1) @@ -215,7 +227,7 @@ if __name__ == '__main__': SETTINGS['audioDeviceName'], SETTINGS['destinationFolder'], SETTINGS['startNumber'], - SETTINGS['limit'],) + SETTINGS['limit'], ) spotifyBackup.run()