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.
		
		
		
		
		
			
		
			
				
					
					
						
							110 lines
						
					
					
						
							2.2 KiB
						
					
					
				
			
		
		
	
	
							110 lines
						
					
					
						
							2.2 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() { | 
						|
	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
 | 
						|
 |