47 lines
1.5 KiB
Bash
Executable File
47 lines
1.5 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
# media player info as JSON for eww media-popup
|
|
|
|
action="${1:-status}"
|
|
|
|
case "$action" in
|
|
status)
|
|
players=$(playerctl -l 2>/dev/null | head -10)
|
|
if [[ -z "$players" ]]; then
|
|
jq -nc '{count:0,players:[]}'
|
|
exit 0
|
|
fi
|
|
|
|
result="[]"
|
|
while IFS= read -r name; do
|
|
status=$(playerctl -p "$name" status 2>/dev/null || echo "Stopped")
|
|
artist=$(playerctl -p "$name" metadata artist 2>/dev/null || echo "")
|
|
title=$(playerctl -p "$name" metadata title 2>/dev/null || echo "")
|
|
album=$(playerctl -p "$name" metadata album 2>/dev/null || echo "")
|
|
|
|
# clean up player name for display
|
|
display=${name%%.*}
|
|
|
|
result=$(jq -c --arg name "$name" --arg display "$display" \
|
|
--arg status "$status" --arg artist "$artist" \
|
|
--arg title "$title" --arg album "$album" \
|
|
'. + [{name:$name, display:$display, status:$status, artist:$artist, title:$title, album:$album}]' <<< "$result")
|
|
done <<< "$players"
|
|
|
|
count=$(jq 'length' <<< "$result")
|
|
jq -nc --argjson count "$count" --argjson players "$result" '{$count,$players}'
|
|
;;
|
|
play-pause)
|
|
playerctl -p "$2" play-pause 2>/dev/null
|
|
( sleep 0.3; data=$(~/.config/eww/scripts/media.sh); eww update media="$data" ) &
|
|
;;
|
|
next)
|
|
playerctl -p "$2" next 2>/dev/null
|
|
( sleep 0.5; data=$(~/.config/eww/scripts/media.sh); eww update media="$data" ) &
|
|
;;
|
|
prev)
|
|
playerctl -p "$2" previous 2>/dev/null
|
|
( sleep 0.5; data=$(~/.config/eww/scripts/media.sh); eww update media="$data" ) &
|
|
;;
|
|
esac
|