#!/usr/bin/env dash update() { UPDATE_DIRECTORY="%XDG_MUSIC_DIR/artists" UPDATE_CONFIG_FILE="%XDG_MUSIC_DIR/artists/update.conf" if ! [ -f "$UPDATE_CONFIG_FILE" ]; then error="$( cat <<EOF Please provide an update config file at: '$UPDATE_CONFIG_FILE'. The 'update.conf' file should follow this pattern: <path_to_artist>/<artist_name>|<spotify_url> All comments and empty lines are ignored EOF )" die "$error" fi config_file="$(mktmp)" clean "$UPDATE_CONFIG_FILE" >"$config_file" while IFS="|" read -r artist url; do full_artist="$UPDATE_DIRECTORY/$artist" [ -d "$full_artist" ] || mkdir --parents "$full_artist" [ -d "$full_artist/update" ] || mkdir --parents "$full_artist/update" [ -d "$full_artist/all" ] || mkdir --parents "$full_artist/all" [ -d "$full_artist/filtered" ] || mkdir --parents "$full_artist/filtered" while read -r file; do ln --symbolic --relative "$file" "$full_artist/update/$(basename "$file")" done <"$(tmp fd --type file --extension opus . "$full_artist/all")" msg2 "Updating $artist with url: '$url'" download "$url" "$full_artist/update" while read -r file; do mv "$file" "$full_artist/all" ln --symbolic --relative "$full_artist/all/$(basename "$file")" "$full_artist/filtered/$(basename "$file")" done <"$(tmp fd --type file --extension opus . "$full_artist/update")" while read -r file; do rm "$file" done <"$(tmp fd --type symlink --extension opus . "$full_artist/update")" cp "$full_artist/update/spotdl.log" "$full_artist/all/spotdl.$(date +%Y_%m_%d).log" cp "$full_artist/update/spotdl-errors.log" "$full_artist/all/spotdl-errors.$(date +%Y_%m_%d).log" done <"$config_file" } # vim: ft=sh