dotfiles/.local/bin/mpv_menu.sh
2025-05-28 18:33:04 +02:00

72 lines
1.7 KiB
Bash
Executable File

#!/bin/bash
SOCKET="/tmp/mpvsocket"
# Check if the mpv socket exists
if [[ ! -S "$SOCKET" ]]; then
echo " mpv socket not found at $SOCKET"
exit 1
fi
send_cmd() {
echo "$1" | socat - "$SOCKET"
}
get_prop() {
send_cmd "{ \"command\": [\"get_property\", \"$1\"] }" | jq -r '.data'
}
format_time() {
local time=$1
if [[ $time == null || -z $time ]]; then
echo "--:--"
else
printf '%02d:%02d' $((time / 60)) $((time % 60))
fi
}
while true; do
clear
# Get dynamic info
title=$(get_prop "media-title")
position=$(get_prop "playback-time")
duration=$(get_prop "duration")
pos_fmt=$(format_time "$position")
dur_fmt=$(format_time "$duration")
echo " MPV Controller"
echo "=========================="
echo " Title : ${title:-Unknown}"
echo "Position : ${pos_fmt} / ${dur_fmt}"
echo "=========================="
echo "1) Pause / Resume"
echo "2) Next file"
echo "3) Previous file"
echo "4) Increase volume"
echo "5) Decrease volume"
echo "6) Mute / Unmute"
echo "7) Seek forward 10s"
echo "8) Seek backward 10s"
echo "0) Exit"
echo "=========================="
read -rp "Choose an option: " opt
case "$opt" in
1) send_cmd '{ "command": ["cycle", "pause"] }' ;;
2) send_cmd '{ "command": ["playlist-next"] }' ;;
3) send_cmd '{ "command": ["playlist-prev"] }' ;;
4) send_cmd '{ "command": ["add", "volume", 5] }' ;;
5) send_cmd '{ "command": ["add", "volume", -5] }' ;;
6) send_cmd '{ "command": ["cycle", "mute"] }' ;;
7) send_cmd '{ "command": ["seek", 10, "relative"] }' ;;
8) send_cmd '{ "command": ["seek", -10, "relative"] }' ;;
0) echo " Exiting..."; break ;;
*) echo " Invalid option"; sleep 1 ;;
esac
read -rp "Press Enter to continue..."
done