#!/bin/sh parse_query() { sed "s/ /+/g" } unquery() { sed "s/+/ /g" } artist() { artist_name=$(printf "" | dmenu -p "Search Artist" | parse_query) json=$(wget -qO- "https://musicbrainz.org/ws/2/release-group/?fmt=json&artist=$(search_artist $artist_name)&type=album|ep" 2>/dev/null) album_name=$(echo "$json" | jq '."release-groups"[] | .title' | sed 's/"//g' | dmenu -p "Select Album") album_id=$(echo "$json" | jq ".\"release-groups\"[] | select(.title==\"$album_name\") .id" | sed "s/\"//g") release_id=$(wget -qO- "https://musicbrainz.org/ws/2/release/?fmt=json&release-group=${album_id}" 2>/dev/null | jq '.releases[0] .id' | sed 's/"//g') recording_names=$(wget -qO- "https://musicbrainz.org/ws/2/recording/?fmt=json&release=${release_id}" 2>/dev/null | jq '.recordings[] | .title' | sed 's/"//g') recordings_query=$(echo "$recording_names" | parse_query) mkdir "$album_name" cd "$album_name" echo "Download $album_name" for name in $recordings_query; do echo "Download $(echo ${name} | unquery)" download "${artist_name}" "${album_name}" "${name}" & done wait } download() { artist_name="$1" album_name="$2" name="$3" query=$(echo "${artist_name} ${album_name} ${name}" | parse_query) video_url=$(wget -qO- "https://www.youtube.com/results?search_query=${query}" 2>/dev/null | grep -E -o '"/watch\?v=[^"]*"' | sed -e 's/"//g' | sed -e "s/\/watch/https:\/\/www.youtube.com\/watch/g" | head -n1) youtube-dl -q --extract-audio --audio-format mp3 "${video_url}" -o "${name}.%(ext)s" mp3info -a "$(echo "$artist_name" | unquery)" -l "$album_name" -t "$(echo $name | sed 's/+/ /g')" "${name}.mp3" mv "${name}.mp3" "$(echo $name | sed 's/+/ /g').mp3" } search_artist() { json=$(wget -qO- "https://musicbrainz.org/ws/2/artist/?fmt=json&limit=100&query=$1" 2>/dev/null) artist_name=$(echo "$json" | jq ".artists[] | .name" | sed "s/\"//g" | dmenu -p "Select Artist") echo "$json" | jq ".artists[] | select(.name==\"$artist_name\") .id" | sed "s/\"//g" } artist