Riyyi
6 years ago
3 changed files with 115 additions and 1 deletions
@ -0,0 +1,110 @@ |
|||||||
|
#!/bin/sh |
||||||
|
|
||||||
|
PIPE="$XDG_CACHE_HOME/mpv/umpv_fifo" |
||||||
|
|
||||||
|
help() { |
||||||
|
B=$(tput bold) |
||||||
|
U=$(tput smul) |
||||||
|
N=$(tput sgr0) |
||||||
|
|
||||||
|
cat << EOF |
||||||
|
${B}NAME${N} |
||||||
|
mpv.sh - mpv playback functions |
||||||
|
|
||||||
|
${B}SYNOPSIS${N} |
||||||
|
${B}./mpv.sh${N} [${U}OPTION${N}] [${U}ARGS${N}...] |
||||||
|
|
||||||
|
${B}DESCRIPTION${N} |
||||||
|
mpv.sh 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() { |
||||||
|
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]' "${@:-$CLIP}" |
||||||
|
} |
||||||
|
|
||||||
|
queue() { |
||||||
|
OPTIONS="--no-terminal --force-window --input-file=$PIPE" |
||||||
|
|
||||||
|
# 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 |
Loading…
Reference in new issue