148 lines
3.8 KiB
Bash
148 lines
3.8 KiB
Bash
|
#!/bin/bash
|
||
|
|
||
|
next ()
|
||
|
{
|
||
|
osascript -e 'tell application "Spotify" to play next track'
|
||
|
}
|
||
|
|
||
|
back ()
|
||
|
{
|
||
|
osascript -e 'tell application "Spotify" to play previous track'
|
||
|
}
|
||
|
|
||
|
play ()
|
||
|
{
|
||
|
osascript -e 'tell application "Spotify" to playpause'
|
||
|
}
|
||
|
|
||
|
repeat ()
|
||
|
{
|
||
|
REPEAT=$(osascript -e 'tell application "Spotify" to get repeating')
|
||
|
if [ "$REPEAT" = "false" ]; then
|
||
|
sketchybar -m --set spotify.repeat icon.highlight=on
|
||
|
osascript -e 'tell application "Spotify" to set repeating to true'
|
||
|
else
|
||
|
sketchybar -m --set spotify.repeat icon.highlight=off
|
||
|
osascript -e 'tell application "Spotify" to set repeating to false'
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
shuffle ()
|
||
|
{
|
||
|
SHUFFLE=$(osascript -e 'tell application "Spotify" to get shuffling')
|
||
|
if [ "$SHUFFLE" = "false" ]; then
|
||
|
sketchybar -m --set spotify.shuffle icon.highlight=on
|
||
|
osascript -e 'tell application "Spotify" to set shuffling to true'
|
||
|
else
|
||
|
sketchybar -m --set spotify.shuffle icon.highlight=off
|
||
|
osascript -e 'tell application "Spotify" to set shuffling to false'
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
update ()
|
||
|
{
|
||
|
PLAYING=1
|
||
|
if [ "$(echo "$INFO" | jq -r '.["Player State"]')" = "Playing" ]; then
|
||
|
PLAYING=0
|
||
|
TRACK="$(echo "$INFO" | jq -r .Name)"
|
||
|
ARTIST="$(echo "$INFO" | jq -r .Artist)"
|
||
|
ALBUM="$(echo "$INFO" | jq -r .Album)"
|
||
|
SHUFFLE=$(osascript -e 'tell application "Spotify" to get shuffling')
|
||
|
REPEAT=$(osascript -e 'tell application "Spotify" to get repeating')
|
||
|
COVER=$(osascript -e 'tell application "Spotify" to get artwork url of current track')
|
||
|
fi
|
||
|
|
||
|
args=()
|
||
|
if [ $PLAYING -eq 0 ]; then
|
||
|
curl -s --max-time 20 "$COVER" -o /tmp/cover.jpg
|
||
|
if [ "$ARTIST" == "" ]; then
|
||
|
args+=(--set spotify.title label="$TRACK"
|
||
|
--set spotify.album label="Podcast"
|
||
|
--set spotify.artist label="$ALBUM" )
|
||
|
else
|
||
|
args+=(--set spotify.title label="$TRACK"
|
||
|
--set spotify.album label="$ALBUM"
|
||
|
--set spotify.artist label="$ARTIST")
|
||
|
fi
|
||
|
args+=(--set spotify.play icon=
|
||
|
--set spotify.shuffle icon.highlight=$SHUFFLE
|
||
|
--set spotify.repeat icon.highlight=$REPEAT
|
||
|
--set spotify.cover background.image="/tmp/cover.jpg"
|
||
|
background.color=0x00000000
|
||
|
--set spotify.anchor drawing=on )
|
||
|
else
|
||
|
args+=(--set spotify.anchor drawing=off popup.drawing=off
|
||
|
--set spotify.play icon= )
|
||
|
fi
|
||
|
sketchybar -m "${args[@]}"
|
||
|
}
|
||
|
|
||
|
scrubbing() {
|
||
|
DURATION_MS=$(osascript -e 'tell application "Spotify" to get duration of current track')
|
||
|
DURATION=$((DURATION_MS/1000))
|
||
|
|
||
|
TARGET=$((DURATION*PERCENTAGE/100))
|
||
|
osascript -e "tell application \"Spotify\" to set player position to $TARGET"
|
||
|
sketchybar --set spotify.state slider.percentage=$PERCENTAGE
|
||
|
}
|
||
|
|
||
|
scroll() {
|
||
|
DURATION_MS=$(osascript -e 'tell application "Spotify" to get duration of current track')
|
||
|
DURATION=$((DURATION_MS/1000))
|
||
|
|
||
|
FLOAT="$(osascript -e 'tell application "Spotify" to get player position')"
|
||
|
TIME=${FLOAT%.*}
|
||
|
|
||
|
sketchybar --animate linear 10 \
|
||
|
--set spotify.state slider.percentage="$((TIME*100/DURATION))" \
|
||
|
icon="$(date -r $TIME +'%M:%S')" \
|
||
|
label="$(date -r $DURATION +'%M:%S')"
|
||
|
}
|
||
|
|
||
|
mouse_clicked () {
|
||
|
case "$NAME" in
|
||
|
"spotify.next") next
|
||
|
;;
|
||
|
"spotify.back") back
|
||
|
;;
|
||
|
"spotify.play") play
|
||
|
;;
|
||
|
"spotify.shuffle") shuffle
|
||
|
;;
|
||
|
"spotify.repeat") repeat
|
||
|
;;
|
||
|
"spotify.state") scrubbing
|
||
|
;;
|
||
|
*) exit
|
||
|
;;
|
||
|
esac
|
||
|
}
|
||
|
|
||
|
popup () {
|
||
|
sketchybar --set spotify.anchor popup.drawing=$1
|
||
|
}
|
||
|
|
||
|
routine() {
|
||
|
case "$NAME" in
|
||
|
"spotify.state") scroll
|
||
|
;;
|
||
|
*) update
|
||
|
;;
|
||
|
esac
|
||
|
}
|
||
|
|
||
|
case "$SENDER" in
|
||
|
"mouse.clicked") mouse_clicked
|
||
|
;;
|
||
|
"mouse.entered") popup on
|
||
|
;;
|
||
|
"mouse.exited"|"mouse.exited.global") popup off
|
||
|
;;
|
||
|
"routine") routine
|
||
|
;;
|
||
|
"forced") exit 0
|
||
|
;;
|
||
|
*) update
|
||
|
;;
|
||
|
esac
|