| $ cat iampd
|
| #!/bin/bash
|
|
|
| cliext=ogg
|
|
|
| rawurl="${1:-https://archive.org/metadata/gd90-03-29.sbd.nawrocki.3389.sbeok.shnf}"
|
| id="${rawurl%/}"
|
| id="${id##*/}"
|
|
|
| url="https://archive.org/metadata/$id"
|
|
|
| curldata="$(curl -s "$url")"
|
|
|
| mapfile -t files < <(
|
| echo "$curldata" |
|
| jq -r '.files[]
|
| | select(.name != null)
|
| | select(.name|test("\\.(mp3|ogg|flac)$"))
|
| | .name'
|
| )
|
|
|
| for f in "${files[@]}"; do
|
| case "$f" in
|
| *."$cliext") hascliext=1; extpref="$cliext"; break;;
|
| *.flac) hasflac=1 ;;
|
| *.ogg) hasogg=1 ;;
|
| *.mp3) hasmp3=1 ;;
|
| esac
|
| done
|
|
|
| if [[ ! "$extpref" ]]; then
|
| (( hasmp3 )) && extpref='mp3'
|
| (( hasogg )) && extpref='ogg'
|
| (( hasflac )) && extpref='flac'
|
| fi
|
|
|
| for i in "${files[@]}"; do
|
| [[ "$i" = *"$extpref" ]] && playlist+=( "$i" )
|
| done
|
| #printf %s\\n "${playlist[@]}"
|
|
|
| #echo "$curldata"| jq -r '.files[]|select(.name|test("\\.(ogg)$"))'
|
|
|
| dlurl="https://archive.org/download/$id"
|
|
|
| #for i in "${playlist[@]}"; do
|
| # printf '%s/%s\n' "$dlurl" "$i"
|
| #done
|
| #|mpc add
|
|
|
| mpdxspf="$(mktemp --suffix='.xspf' --tmpdir='/library/music/mpdplaylists')"
|
| echo "$curldata" | jq -r --arg base "$dlurl" --arg ext "$extpref" '
|
| # First, filter the input down to just the MP3 file objects
|
| [.files[] | select(.name | test("\\.(mp3)$"))] |
|
|
|
| "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
|
| <playlist version=\"1\" xmlns=\"http://xspf.org\">
|
| <trackList>" +
|
|
|
| # Now map over the filtered array of objects safely
|
| (map(
|
| # (.length | split(":") | (.[0]|tonumber)*60000 + (.[1]|tonumber)*1000) as $ms |
|
| (.length | split(":") | map(tonumber)) as $time_parts |
|
| (if ($time_parts | length) == 2 then
|
| ($time_parts[0] * 60000) + ($time_parts[1] * 1000)
|
| elif ($time_parts | length) == 3 then
|
| ($time_parts[0] * 3600000) + ($time_parts[1] * 60000) + ($time_parts[2] * 1000)
|
| else
|
| (.length | tonumber * 1000)
|
| end) as $ms |
|
| (.name | gsub("\\.mp3$"; "")) as $basename |
|
| " <track>
|
| <location>\($base)/\($basename).\($ext)</location>
|
| <title>\(.title)</title>
|
| <creator>\(.creator)</creator>
|
| <album>\(.album)</album>
|
| <trackNum>\(.track)</trackNum>
|
| <duration>\($ms)</duration>
|
| </track>"
|
| ) | join("\n")) +
|
|
|
| " </trackList>
|
| </playlist>"
|
| ' > "$mpdxspf"
|
|
|
| chmod ugo+r "$mpdxspf"
|
| (( verbose )) && ls -la "$mpdxspf"
|
|
|
| if mpc -h "$MPDSOCK" load "$mpdxspf"; then
|
| # rm "$mpdxspf"
|
| :
|
| else
|
| printf '/usr/bin/mpc failed to load %s\n' "$mpdxspf"
|
| confirm -Y "Do you want to remove the temp .xspf file?" && rm "$mpdxspf" || true
|
| fi
|