dotfiles/tmux/.tmux/spotify-tmux.sh
2024-09-18 11:46:22 -06:00

153 lines
3.5 KiB
Bash
Executable File

#!/bin/bash
#CURRENT_WINDOW=$(tmux display-message -p '#I')
#WINDOW=$(tmux display-message -p '#W')
TARGET_NAME='spotify'
TARGET_COMMAND='spotify_player'
LIMIT=1000
VOLUME=80
SPOTIFY_PID=0
CHANGE_VOL=0
for ARGUMENT in "$@"; do
KEY=$(echo "$ARGUMENT" | cut -f1 -d=)
KEY_LENGTH=${#KEY}
VALUE="${ARGUMENT:$KEY_LENGTH+1}"
if [[ "$KEY" == "-v" ]]; then
VOLUME=$VALUE
CHANGE_VOL=1
shift #remove the used switch
fi
done
POSITION=$(tmux list-windows | awk -v name="$TARGET_NAME" '$0 ~ name {print $1}' | awk -F: '{print $1}')
check_deps() {
if command -v "$TARGET_COMMAND" >/dev/null 2>&1; then
if $(command -v tmux >/dev/null 2>&1); then
echo 1
else
echo 0
fi
fi
}
display() {
# echo "$1"
tmux display-message "$1"
}
check_running() {
local output
output=$("$TARGET_COMMAND" get key playback)
if [ "$output" = "null" ]; then
echo 0
else
echo 1
SPOTIFY_PID=$(pgrep spotify_player)
fi
}
get_volume() {
local volume
volume=$("$TARGET_COMMAND" get key playback 2>/dev/null | jq -r '.device.volume_percent')
if test -n "$volume"; then
echo $volume
else
display "Spotify Not Running"
fi
}
set_volume() {
local volume
volume=$(get_volume)
if [[ "$volume" != "$VOLUME" ]]; then
$TARGET_COMMAND playback volume $VOLUME
fi
}
start_spotify() {
display "Starting Spotify"
tmux new-window -n $TARGET_NAME $TARGET_COMMAND &&
tmux swap-window -s $TARGET_NAME -t 1
display "Spotify Window Created"
until [ "$(check_running)" = "1" ]; do
display "Waiting for Spotify"
sleep 1
done
display "Starting Liked Playlist"
$TARGET_COMMAND playback start liked -r --limit=$LIMIT
until [ "$(get_volume)" != "Spotify Not Running" ]; do
display "Checking Initial Volume"
sleep 1
done
display "Checking Volume"
current_volume="$(get_volume)"
if [ "$current_volume" != "$VOLUME" ]; then
display $current_volume
$($TARGET_COMMAND playback volume $VOLUME)
fi
}
restart_spotify() {
pid=$(pgrep $TARGET_COMMAND)
if [[ -n "$pid" ]]; then
until [[ -z $(pgrep $TARGET_COMMAND) ]]; do
display "Spotify: Killing $pid"
$(kill "$pid")
done
start_spotify
until [[ $(check_running) = "1" ]]; do
display "Spotify: Restarting"
sleep 1
done
display "Spotify: Restarted"
fi
}
check_deps >/dev/null
check_running >/dev/null
if [ "$#" -lt 1 ]; then
if [ $SPOTIFY_PID != 0 ]; then
if [[ "$CHANGE_VOL" == 1 ]]; then
set_volume
exit 0
fi
display "Spotify Already Running"
exit 12
fi
if [ -n "$POSITION" ] && [ "$POSITION" -ne 1 ]; then
tmux swap-window -s $TARGET_NAME -t 1
elif [ -n "$POSITION" ] && [ "$POSITION" -eq 1 ]; then
tmux select-window -t $TARGET_NAME
else
start_spotify
fi
else
if [ "$(check_running)" = "0" ]; then
display "Spotify Is Not Running - Restarting"
restart_spotify
fi
echo "$1"
case "$1" in
"n")
$TARGET_COMMAND playback next && set_volume
;;
"p")
$TARGET_COMMAND playback previous && set_volume
;;
"s")
$TARGET_COMMAND playback play-pause && set_volume
;;
"r")
restart_spotify
;;
*)
echo "Usage: $0 [-n|-p|-s|-v]"
exit 1
;;
esac
fi