dotfiles/.bin/subsonic
2023-11-04 10:58:13 +01:00

98 lines
2.6 KiB
Bash
Executable File

#!/bin/sh
# subsonic
alias subsonic-cli="\subsonic-cli -c $HOME/.subsonic-cli.conf"
subsonic-play() {
# $1 songId
for song in $@
do
echo $song > /tmp/.playing
subsonic-cli stream -p id $song \
| mpv --loop=no - || exit 0
done
}
subsonic-random() {
while true;
do
echo "Fetching moar dataaa.."
subsonic-play $(subsonic-cli getRandomSongs \
| jq -r '.randomSongs[][].id')
done
}
subsonic-favorites() {
while true;
do
echo "Fetching moar dataaa.."
subsonic-play $(subsonic-cli getStarred \
| jq -r '.starred[][].id' \
| sort -r)
done
}
subsonic-search() {
{
echo "|ALBUMID|ID|ALBUM|ARTIST|TITLE|GENRE|"
printf "|%s|%s|%s|%s|%s|%s|\n" "--------------------------------"\
"--------------------------------"\
"--------" "--------" "--------" "--------"
subsonic-cli search3 \
-p songcount 200 \
-p query "$@" \
| jq -r '.searchResult3[][]|select(.contentType!=null)|[.albumId,.id,.album,.title,.artist,.genre]' \
| tr -d '", ' \
| awk '/^\[/ { S++ } \
/^\]/ { S-- } \
S==0 { NR=0 } \
NR==2 { AID=$0 } \
NR==3 { ID=$0 } \
NR==4 { ALBUM=$0 } \
NR==5 { TITLE=$0 } \
NR==6 { ARTIST=$0 } \
NR==7 { GENRE=$0 } \
NR==0 { printf("|%s|%s|%s|%s|%s|%s|\n", AID, ID, ALBUM, ARTIST, TITLE, GENRE) }'
} | column -s'|' -t
}
subsonic-star() {
[ -f /tmp/.playing ] \
&& subsonic-cli star -p id $(cat /tmp/.playing | tail -1) \
|| echo bruh.
}
subsonic-unstar() {
[ -f /tmp/.playing ] \
&& subsonic-cli unstar -p id $(cat /tmp/.playing | tail -1) \
|| echo bruh.
}
subsonic-download() {
# $1 albumId
NAME=$(subsonic-cli getAlbum -p id $1 \
| jq -r '.album.artist,.album.name' | xargs | tr ' ' '-')
printf "Downloading to %s/subsonic-download/%s.zip\n" "$HOME" "$NAME"
mkdir -p "$HOME/subsonic-download"
subsonic-cli download -p id $1 | pv > "$HOME/subsonic-download/$NAME.zip"
}
if [ -z $1 ]
then
cat <<"EOF"
usage: subsonic <command> <args>
play <song id> - play song with id
download <album id> - download album with id
[un]star - [un]star currently playing song
search <term> - show song/album for term
favorites - play starred songs
random - play random songs
EOF
else
subsonic-$1 $2
fi