#!/usr/bin/env dash download_to_down() { DOWNLOAD_DIRECTORY="%XDG_MUSIC_DIR/down/spotify" already_downloaded_files="$(mktmp)" fd . "$DOWNLOAD_DIRECTORY" --exclude spotdl.log --exclude spotdl-errors.log >"$already_downloaded_files" if [ -z "$NO_CHECK" ] && [ "$(wc -l <"$already_downloaded_files")" -ne 0 ]; then die "something is already downloaded" fi # [ -e "$DOWNLOAD_DIRECTORY/spotdl.log" ] && rm "$DOWNLOAD_DIRECTORY/spotdl.log" download "$1" "$DOWNLOAD_DIRECTORY" } download() { download_url="$1" output_path="$2" config="$(mktmp)" cat <<EOF | clean >"$config" # Main options --audio slider-kz bandcamp youtube-music piped youtube soundcloud --lyrics genius musixmatch azlyrics synced # FFmpeg options --ffmpeg ffmpeg --threads 16 --bitrate 256k # Spotify options --cache-path %XDG_CACHE_HOME/spotdl/.spotipy # Output options --preload --format opus --output {artists}_-_{title} --print-errors --save-errors $output_path/spotdl-errors.log # TODO: Reactive whence spotdl support for these has improved <2023-12-19> # --generate-lrc --overwrite skip # Misc options --log-level INFO EOF cd "$output_path" || die "BUG: no $output_path" touch "$output_path/spotdl-errors.log" # The sub shell needs to be unquoted, as the arguments may not be treated as one. # shellcheck disable=2046 unbuffer spotdl $(cat "$config") download "$download_url" | tee "$output_path/spotdl.log" [ -d ~/.spotdl ] && rm -r ~/.spotdl } # vim: ft=sh