This commit is contained in:
2026-02-15 21:13:57 -08:00
parent e3b0fdbddb
commit 7db8a5908a
11 changed files with 316 additions and 179 deletions

View File

@@ -2,28 +2,82 @@
set -Eeuo pipefail
URL="${1:-$(wl-paste -p)}"
MPV_SOCKET=/tmp/mpvsocket
URL="${1:-}"
MPV_SOCKET="/tmp/mpvsocket"
ICON_PATH="$HOME/.local/share/icons/Magna-Glassy-Dark-Icons/apps/48/mpv.svg"
TITLE="mpv-add.sh"
notify() {
local message="$1"
notify-send -i "$ICON_PATH" "$TITLE" "$message"
}
trim() {
printf '%s' "$1" | sed 's/^[[:space:]]\+//;s/[[:space:]]\+$//'
}
play_direct() {
mpv -- "$URL" &> /dev/null &
}
wait_for_socket() {
local timeout_ms=2000
local waited=0
while ((waited < timeout_ms)); do
if [[ -S "$MPV_SOCKET" ]]; then
return 0
fi
sleep 0.05
waited=$((waited + 50))
done
return 1
}
is_valid_input() {
local input="$1"
if [[ -f "$input" ]]; then
return 0
fi
if ! command -v yt-dlp > /dev/null 2>&1; then
return 1
fi
if yt-dlp --simulate "$input" > /dev/null 2>&1; then
return 0
fi
return 1
}
if [[ -z "$URL" ]] && command -v wl-paste > /dev/null 2>&1; then
URL="$(wl-paste -p || true)"
fi
URL="$(trim "$URL")"
if [[ -z "$URL" ]]; then
notify-send -i "$ICON_PATH" "$TITLE" "No URL provided"
notify "No URL provided"
exit 1
fi
if ! [[ -f "$URL" ]] && ! yt-dlp --simulate "$URL"; then
notify-send -i "$ICON_PATH" "$TITLE" "Invalid URL"
if ! is_valid_input "$URL"; then
notify "Invalid input: provide a local file path or a yt-dlp supported URL"
exit 1
fi
if ! pgrep -x mpv &> /dev/null; then
mpv "$URL" &> /dev/null &
notify-send -i "$ICON_PATH" "$TITLE" "Playing $URL"
rm -f "$MPV_SOCKET"
mpv --input-ipc-server="$MPV_SOCKET" -- "$URL" &> /dev/null &
notify "Playing $URL"
else
if echo "{ \"command\": [\"script-message\", \"add_to_queue\", \"$URL\" ] }" | socat - "$MPV_SOCKET" &> /dev/null; then
notify-send -i "$ICON_PATH" "$TITLE" "Added $URL to queue"
else
notify-send -i "$ICON_PATH" "$TITLE" "Failed to add $URL to queue"
if [[ -S "$MPV_SOCKET" ]] && wait_for_socket && echo "{ \"command\": [\"script-message\", \"add_to_queue\", \"$URL\" ] }" | socat - "$MPV_SOCKET" &> /dev/null; then
notify "Added $URL to queue"
exit 0
fi
notify "Queue unavailable, opening in new player"
play_direct
notify "Playing $URL"
fi