ass/latestalbum
2025-05-03 11:00:44 -06:00

68 lines
2.1 KiB
Bash

#!/bin/sh
# Settings
client="ass"
url=""
user=""
password=""
# Checks if the last retrieved album has changed.
check_album(){
cache_folder="$HOME/.cache/$client"
cache_file="$cache_folder/list"
mkdir -p "$cache_folder" && touch "$cache_file"
album="$(tail -n 1 "$cache_file")"
if [ "$album" = "$1" ]; then
exit
else
printf "%s\n" "$1" | tee -a "$cache_file"
printf "%s\n" "$url/library/albums/$latest_albumid"
printf "%s\n" "$latest_albumcv"
exit
fi
}
# Get album catalog number if it's available (Requires proper tags).
get_cn(){
album="$(echo "$@" | tr -d '()[]')"
# Try looking up directly. (Should be accurate)
curl -sL "https://vgmdb.net/search?" --data-urlencode "q=$album" | \
grep -A1 "Catalog Number" | tail -n1 | \
sed 's/<[^>]*>//g' | sed 's/^[ \t]*//;s/[ \t]*$//'
# If multiple albums were found choose the first one. (Not accurate)
curl -s "https://vgmdb.net/search?" --data-urlencode "q=$album" | \
grep -o '<span class="catalog album-bonus">[^<]*' | \
sed 's/.*>//' | grep -v '^N/A$' | head -n1
}
# Get the latest recently added album with curl in "Artist - Album" format.
get_album(){
curl -s "$url/rest/getAlbumList2.view?u=$user&p=$password&v=1.16.1&c=$client&f=json&type=newest" | \
jq -r '.["subsonic-response"].albumList2.album[0] | "\(.artist) - \(.name)"'
}
# Same thing but with album id.
get_albumid(){
curl -s "$url/rest/getAlbumList2.view?u=$user&p=$password&v=1.16.1&c=$client&f=json&type=newest" | \
jq -r '.["subsonic-response"].albumList2.album[0].id'
}
# Get album cover (kinda unsafe for my standards, should work with public instances lmao)
get_albumcv(){
echo "$url/rest/getCoverArt.view?id=$latest_albumid&u=$user&p=$password&v=1.16.1&c=$client&f=json"
}
latest_album="$(get_album)"
latest_albumid="$(get_albumid)"
latest_albumcv="$(get_albumcv)"
album_name="$(echo "$latest_album" | sed 's/^[^-]* - //')"
catalog_number=$(get_cn "$album_name" | sed 's/[[:space:]]*$//' | tr -d '\r' | sed 's/[^[:print:]\t]//g')
if [ -n "$catalog_number" ]; then
check_album "$(printf "%s [%s]\n" "$latest_album" "$catalog_number")"
else
check_album "$latest_album"
fi