From b75130cc0a9611f195b09cb5572c9c62aa290bed Mon Sep 17 00:00:00 2001 From: Robert Goldmann <deadlocker@gmx.de> Date: Thu, 18 Jan 2024 22:04:49 +0100 Subject: [PATCH] SpotifyRecorder: skip recording for already existing mp3 files --- SpotifyRecorder.py | 34 +++++++++++++++++++++++++--------- 1 file changed, 25 insertions(+), 9 deletions(-) diff --git a/SpotifyRecorder.py b/SpotifyRecorder.py index d8359d7..7c47778 100644 --- a/SpotifyRecorder.py +++ b/SpotifyRecorder.py @@ -98,6 +98,7 @@ class SpotifyRecorder: deviceId = self.__get_device_id_by_name(self._spotifyDeviceName) recordedTrackNumbers = [] + alreadyExistingTrackNumbers = [] skippedTrackNumbers = [] errorTrackNumbers = [] @@ -114,21 +115,28 @@ class SpotifyRecorder: LOGGER.info(f'>>> Recording track {index + 1}/{len(tracks)}: ' f'#{indexInPlaylist} "{track["track"]["name"]}"...') try: - self.__record_single_track(deviceId, indexInPlaylist, track) - recordedTrackNumbers.append(indexInPlaylist) + recordingCreated = self.__record_single_track(deviceId, indexInPlaylist, track) + if recordingCreated: + recordedTrackNumbers.append(indexInPlaylist) + else: + alreadyExistingTrackNumbers.append(indexInPlaylist) except Exception as e: LOGGER.error(f'An error occurred while recording track "{track["track"]["name"]}"', exc_info=e) errorTrackNumbers.append(indexInPlaylist) - self.__print_end_statistics(errorTrackNumbers, recordedTrackNumbers, skippedTrackNumbers, len(tracks)) + self.__print_end_statistics(errorTrackNumbers, recordedTrackNumbers, skippedTrackNumbers, alreadyExistingTrackNumbers, len(tracks)) - def __record_single_track(self, deviceId, indexInPlaylist, track): + def __record_single_track(self, deviceId, indexInPlaylist, track) -> bool: self.__stop_playback_if_playing(deviceId) fileName = self.__determine_file_name(indexInPlaylist, track) filePathWav = f'{fileName}.wav' filePathMp3 = f'{fileName}.mp3' + if os.path.exists(filePathMp3): + LOGGER.info('Track already exists. Skipping.') + return False + recorder = AudioRecorder(self._audioDeviceName, filePathWav) with recorder.record(): @@ -145,12 +153,17 @@ class SpotifyRecorder: LOGGER.debug(f'\t\tRemoving wav file "{filePathWav}"') os.remove(filePathWav) + return True + @staticmethod - def __print_end_statistics(errorTrackNumbers: list[int], recordedTrackNumbers: list[int], - skippedTrackNumbers: list[int], numberOfTracks: int): + def __print_end_statistics(errorTrackNumbers: list[int], + recordedTrackNumbers: list[int], + skippedTrackNumbers: list[int], + alreadyExistingTrackNumbers: list[int], + numberOfTracks: int): LOGGER.info('### DONE ###') - LOGGER.info('>>> Skipped <<<') + LOGGER.info('>>> Skipped local tracks<<<') for number in skippedTrackNumbers: LOGGER.info(f'Skipped #{number}') @@ -158,8 +171,11 @@ class SpotifyRecorder: for number in errorTrackNumbers: LOGGER.info(f'Error #{number}') - LOGGER.info(f'### {numberOfTracks} tracks, {len(recordedTrackNumbers)} recorded, ' - f'{len(skippedTrackNumbers)} skipped, {len(errorTrackNumbers)} errors ###') + LOGGER.info(f'### {numberOfTracks} tracks, ' + f'{len(recordedTrackNumbers)} recorded, ' + f'{len(skippedTrackNumbers)} local tracks skipped, ' + f'{len(alreadyExistingTrackNumbers)} existing tracks skipped, ' + f'{len(errorTrackNumbers)} errors ###') def __determine_file_name(self, index: int, track) -> str: artists = self.__join_artists(track) -- GitLab