This is a collection of dotfiles and scripts for my bspwm setup
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

114 lines
2.4 KiB

#!/bin/sh
PIPE="$XDG_CACHE_HOME/mpv/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 -se c -o)"
play() {
MPV="mpv --ytdl-raw-options=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
mpv --no-video --shuffle \
--ytdl-format='bestaudio[ext=m4a]' \
--ytdl-raw-options='external-downloader=aria2c' \
"${@:-$CLIP}"
}
queue() {
OPTIONS="--no-terminal --force-window --input-file=$PIPE --ytdl-raw-options=external-downloader=aria2c"
# Create mpv cache directory
DIR="$(dirname "$PIPE")"
[ ! -d "$DIR" ] && mkdir -p "$DIR"
# Delete named pipe if no umpv is running
if ! pgrep -f "mpv $OPTIONS" > /dev/null; then
rm -f "$PIPE"
fi
# Skip first argument
shift 1
# Set url to argument if provided, clipboard otherwise
URLS="${*:-$CLIP}"
if [ -p "$PIPE" ]; then
notify-send -t 2500 "Added video to queue.."
# Add video to named pipe
echo "$URLS" \
| awk -v RS=' ' '{ print "raw loadfile "$1" append" }' > "$PIPE"
else
# Create named pipe
mkfifo "$PIPE"
# Play video
play "$OPTIONS" "$URLS"
rm -f "$PIPE"
fi
}
case "$1" in
help)
help
;;
shuffle)
shuffle "$@"
;;
queue)
queue "$@"
;;
*)
play "$@"
;;
esac