Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add command line options for skip and successful file #386

Merged
merged 3 commits into from
Oct 7, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions spotdl/handle.py
Original file line number Diff line number Diff line change
Expand Up @@ -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' }
}

Expand Down Expand Up @@ -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')
Expand Down
46 changes: 33 additions & 13 deletions spotdl/spotdl.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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('\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)
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('\n' + raw_song)
log.debug('Removing downloaded song from tracks file')
internals.trim_song(tracks_file)

return downloaded_songs

Expand Down Expand Up @@ -193,7 +209,11 @@ 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:
Expand Down