From 3a52fe4de56a33bcdd9c41c54b0337e0ea05afcf Mon Sep 17 00:00:00 2001 From: Linus Groh Date: Thu, 4 Oct 2018 23:43:54 +0200 Subject: [PATCH 1/3] Add command line options for skip and successful file --- spotdl/handle.py | 8 ++++++++ spotdl/spotdl.py | 42 +++++++++++++++++++++++++++++------------- 2 files changed, 37 insertions(+), 13 deletions(-) diff --git a/spotdl/handle.py b/spotdl/handle.py index 0eb028ea7..25ffb62fa 100644 --- a/spotdl/handle.py +++ b/spotdl/handle.py @@ -28,6 +28,8 @@ 'file-format' : '{artist} - {track_name}', 'search-format' : '{artist} - {track_name} lyrics', 'youtube-api-key' : None, + 'skip' : None, + 'write-successful' : None, 'log-level' : 'INFO' } } @@ -175,6 +177,12 @@ def get_arguments(raw_args=None, to_group=True, to_merge=True): parser.add_argument( '-yk', '--youtube-api-key', default=config['youtube-api-key'], help=argparse.SUPPRESS) + parser.add_argument( + '-sk', '--skip', default=config['skip'], + help='path to file containing tracks to skip') + parser.add_argument( + '-w', '--write-successful', default=config['write-successful'], + help='path to file to write successful tracks to') parser.add_argument( '-c', '--config', default=None, help='path to custom config.yml file') diff --git a/spotdl/spotdl.py b/spotdl/spotdl.py index b9cfbc039..3cee64ffe 100755 --- a/spotdl/spotdl.py +++ b/spotdl/spotdl.py @@ -63,20 +63,31 @@ def check_exists(music_file, raw_song, meta_tags): return False -def download_list(text_file): +def download_list(tracks_file, skip_file=None, write_successful_file=None): """ Download all songs from the list. """ log.info('Checking and removing any duplicate tracks') - lines = internals.get_unique_tracks(text_file) + tracks = internals.get_unique_tracks(tracks_file) # override file with unique tracks - with open(text_file, 'w') as listed: - listed.write('\n'.join(lines)) + with open(tracks_file, 'w') as f: + f.write('\n'.join(tracks)) - log.info(u'Preparing to download {} songs'.format(len(lines))) + # Remove tracks to skip from tracks list + if skip_file is not None: + skip_tracks = internals.get_unique_tracks(skip_file) + len_before = len(tracks) + tracks = [ + track for track in tracks + if track not in skip_tracks + ] + log.info('Skipping {} tracks'.format(len_before - len(tracks))) + + + log.info(u'Preparing to download {} songs'.format(len(tracks))) downloaded_songs = [] - for number, raw_song in enumerate(lines, 1): + for number, raw_song in enumerate(tracks, 1): print('') try: download_single(raw_song, number=number) @@ -89,20 +100,25 @@ def download_list(text_file): download_single(raw_song, number=number) # detect network problems except (urllib.request.URLError, TypeError, IOError): - lines.append(raw_song) + tracks.append(raw_song) # remove the downloaded song from file - internals.trim_song(text_file) + internals.trim_song(tracks_file) # and append it at the end of file - with open(text_file, 'a') as myfile: - myfile.write(raw_song + '\n') + with open(tracks_file, 'a') as f: + f.write(raw_song + '\n') log.warning('Failed to download song. Will retry after other songs\n') # wait 0.5 sec to avoid infinite looping time.sleep(0.5) continue downloaded_songs.append(raw_song) - log.debug('Removing downloaded song from text file') - internals.trim_song(text_file) + # Add track to file of successful downloads + log.debug('Adding downloaded song to write successful file') + if write_successful_file is not None: + with open(write_successful_file, 'a') as f: + f.write(raw_song + '\n') + log.debug('Removing downloaded song from tracks file') + internals.trim_song(tracks_file) return downloaded_songs @@ -193,7 +209,7 @@ def main(): if const.args.song: download_single(raw_song=const.args.song) elif const.args.list: - download_list(text_file=const.args.list) + download_list(tracks_file=const.args.list, skip_file=const.args.skip, write_successful_file=const.args.write_successful) elif const.args.playlist: spotify_tools.write_playlist(playlist_url=const.args.playlist) elif const.args.album: From bef24eef7fc94e1cf59db12d6286846db2310af5 Mon Sep 17 00:00:00 2001 From: Linus Groh Date: Fri, 5 Oct 2018 00:00:23 +0200 Subject: [PATCH 2/3] Place newline before track URL when appending to track file --- spotdl/spotdl.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spotdl/spotdl.py b/spotdl/spotdl.py index 3cee64ffe..f3817987c 100755 --- a/spotdl/spotdl.py +++ b/spotdl/spotdl.py @@ -105,7 +105,7 @@ def download_list(tracks_file, skip_file=None, write_successful_file=None): internals.trim_song(tracks_file) # and append it at the end of file with open(tracks_file, 'a') as f: - f.write(raw_song + '\n') + f.write('\n' + raw_song) log.warning('Failed to download song. Will retry after other songs\n') # wait 0.5 sec to avoid infinite looping time.sleep(0.5) @@ -116,7 +116,7 @@ def download_list(tracks_file, skip_file=None, write_successful_file=None): log.debug('Adding downloaded song to write successful file') if write_successful_file is not None: with open(write_successful_file, 'a') as f: - f.write(raw_song + '\n') + f.write('\n' + raw_song) log.debug('Removing downloaded song from tracks file') internals.trim_song(tracks_file) From 525925de42c33f155d140b29ed2e3997c745ddde Mon Sep 17 00:00:00 2001 From: Linus Groh Date: Sun, 7 Oct 2018 21:40:00 +0200 Subject: [PATCH 3/3] Break long line into multiple --- spotdl/spotdl.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/spotdl/spotdl.py b/spotdl/spotdl.py index f3817987c..1c61ae58d 100755 --- a/spotdl/spotdl.py +++ b/spotdl/spotdl.py @@ -209,7 +209,11 @@ def main(): if const.args.song: download_single(raw_song=const.args.song) elif const.args.list: - download_list(tracks_file=const.args.list, skip_file=const.args.skip, write_successful_file=const.args.write_successful) + download_list( + tracks_file=const.args.list, + skip_file=const.args.skip, + write_successful_file=const.args.write_successful + ) elif const.args.playlist: spotify_tools.write_playlist(playlist_url=const.args.playlist) elif const.args.album: