|
|
|
#!/bin/sh
|
|
|
|
|
|
|
|
# Depends: socat
|
|
|
|
|
|
|
|
SOCK="/tmp/umpv-fifo"
|
|
|
|
|
|
|
|
help() {
|
|
|
|
B=$(tput bold)
|
|
|
|
U=$(tput smul)
|
|
|
|
N=$(tput sgr0)
|
|
|
|
|
|
|
|
cat << EOF
|
|
|
|
${B}NAME${N}
|
|
|
|
play - mpv playback functions
|
|
|
|
|
|
|
|
${B}SYNOPSIS${N}
|
|
|
|
${B}play${N} [${U}OPTION${N}] [${U}ARGS${N}...]
|
|
|
|
|
|
|
|
${B}DESCRIPTION${N}
|
|
|
|
play is a script to manage different mpv viewing bahavior.
|
|
|
|
If no ${U}URLS${N} argument is provided, it is read from clipboard instead.
|
|
|
|
The queue option starts a mpv window with a playlist, which all videos of
|
|
|
|
subsequent queue calls get added to.
|
|
|
|
|
|
|
|
${B}OPTIONS${N}
|
|
|
|
${B}help${N}
|
|
|
|
Display usage message and exit.
|
|
|
|
|
|
|
|
[${B}play${N}] [${U}URLS${N}...] (default)
|
|
|
|
Plays videos in a new mpv window.
|
|
|
|
|
|
|
|
${B}shuffle${N} [${U}URLS${N}...]
|
|
|
|
Shuffle audio playlist (disables video playback).
|
|
|
|
|
|
|
|
${B}queue${N} [${U}URLS${N}...]
|
|
|
|
Add multiple videos to the unique mpv's queue.
|
|
|
|
EOF
|
|
|
|
}
|
|
|
|
|
|
|
|
CLIP="$(xclip -selection clipboard -out)"
|
|
|
|
|
|
|
|
play() {
|
|
|
|
MPV="mpv --ytdl-raw-options=add-metadata=,external-downloader=aria2c"
|
|
|
|
if [ -z "$1" ]; then
|
|
|
|
MPV="$MPV $CLIP"
|
|
|
|
# Cut off everything after space
|
|
|
|
LINK="$(echo "$CLIP" | sed -nE 's/^(\S+).*/\1/p')"
|
|
|
|
else
|
|
|
|
MPV="$MPV $*"
|
|
|
|
# Determain which argument holds the urls
|
|
|
|
[ "$1" = "${1#-}" ] && DISPLAY="$1" || DISPLAY="$2"
|
|
|
|
# Cut off everything after space
|
|
|
|
LINK="$(echo "$DISPLAY" | sed -nE 's/^(\S+).*/\1/p')"
|
|
|
|
fi
|
|
|
|
|
|
|
|
notify-send -t 2500 "Loading video: $LINK"
|
|
|
|
# Attempt to load video
|
|
|
|
[ "$($MPV)" ] && notify-send -u critical -t 4000 "Loading video failed.."
|
|
|
|
}
|
|
|
|
|
|
|
|
shuffle() {
|
|
|
|
# Skip first argument
|
|
|
|
shift 1
|
|
|
|
setsid -f mpv --no-video --shuffle \
|
|
|
|
--ytdl-format='bestaudio[ext=m4a]' \
|
|
|
|
"${@:-$CLIP}"
|
|
|
|
}
|
|
|
|
|
|
|
|
queue() {
|
|
|
|
OPTIONS="--no-terminal --force-window --input-ipc-server=$SOCK --"
|
|
|
|
|
|
|
|
# Create mpv cache directory
|
|
|
|
DIR="$(dirname "$SOCK")"
|
|
|
|
[ ! -d "$DIR" ] && mkdir -p "$DIR"
|
|
|
|
|
|
|
|
# Delete socket if no umpv is running
|
|
|
|
if ! pgrep -f "mpv $OPTIONS" > /dev/null; then
|
|
|
|
rm -f "$SOCK"
|
|
|
|
fi
|
|
|
|
|
|
|
|
# Skip first argument
|
|
|
|
shift 1
|
|
|
|
# Set url to argument if provided, clipboard otherwise
|
|
|
|
URLS="${*:-$CLIP}"
|
|
|
|
|
|
|
|
if [ -S "$SOCK" ]; then
|
|
|
|
notify-send -t 2500 "Added video to queue.."
|
|
|
|
# Add video to named pipe
|
|
|
|
echo "$URLS" | awk -v RS=' ' '{ print "raw loadfile "$1" append" }' \
|
|
|
|
| socat UNIX-CONNECT:"$SOCK" -
|
|
|
|
else
|
|
|
|
# Play video
|
|
|
|
notify-send -t 2500 "Loading video: $URLS"
|
|
|
|
# shellcheck disable=2086
|
|
|
|
setsid -f mpv $OPTIONS $URLS
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
|
|
case "$1" in
|
|
|
|
help)
|
|
|
|
help
|
|
|
|
;;
|
|
|
|
shuffle)
|
|
|
|
shuffle "$@"
|
|
|
|
;;
|
|
|
|
queue)
|
|
|
|
queue "$@"
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
play "$@"
|
|
|
|
;;
|
|
|
|
esac
|