Compare commits
	
		
			2 Commits
		
	
	
		
			f67691e8d7
			...
			7797c47195
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 7797c47195 | |||
| c34856d134 | 
							
								
								
									
										199
									
								
								yt
									
									
									
									
									
								
							
							
						
						
									
										199
									
								
								yt
									
									
									
									
									
								
							@ -27,14 +27,22 @@ test -n "$YT_PL_DIR" \
 | 
				
			|||||||
	|| test -n "$XDG_DATA_HOME" && YT_PL_DIR="$XDG_DATA_HOME/yt" \
 | 
						|| test -n "$XDG_DATA_HOME" && YT_PL_DIR="$XDG_DATA_HOME/yt" \
 | 
				
			||||||
	|| YT_PL_DIR="$HOME/.local/share/yt"
 | 
						|| YT_PL_DIR="$HOME/.local/share/yt"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					test -d "$YT_PL_DIR" \
 | 
				
			||||||
 | 
						|| mkdir -p "$YT_PL_DIR"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# formatted $YT_PL_DIR for use with sed
 | 
				
			||||||
 | 
					P="$(printf '%s\n' "$YT_PL_DIR" | sed 's;\/;\\/;g')" 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
argv0="$0"
 | 
					argv0="$0"
 | 
				
			||||||
com="$1"
 | 
					com="$1"
 | 
				
			||||||
 | 
					u='add | archive | clone | list | new | pick | play | search | sync | verify'
 | 
				
			||||||
FMT='%(title)s – %(channel)s (%(duration>%H:%M:%S)s) [%(webpage_url)s]'
 | 
					FMT='%(title)s – %(channel)s (%(duration>%H:%M:%S)s) [%(webpage_url)s]'
 | 
				
			||||||
WBAPI='https://archive.org/wayback/available?url='
 | 
					WBAPI='https://archive.org/wayback/available?url='
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
add() { # adds a video to a playlist file
 | 
					add() { # adds a video to a playlist file
 | 
				
			||||||
 | 
						test -z "$2" || test -n "$3" && usage 'add uri playlist'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	while test -f "$YT_PL_DIR/$2.m3u"; do
 | 
						while test -f "$YT_PL_DIR/$2.m3u"; do
 | 
				
			||||||
		file="$YT_PL_DIR/$2.m3u"
 | 
							file="$YT_PL_DIR/$2.m3u"
 | 
				
			||||||
		video="$(printf '%s\n' "$1" \
 | 
							video="$(printf '%s\n' "$1" \
 | 
				
			||||||
@ -47,8 +55,8 @@ add() { # adds a video to a playlist file
 | 
				
			|||||||
				"$argv0" "$file" "$video"
 | 
									"$argv0" "$file" "$video"
 | 
				
			||||||
			exit
 | 
								exit
 | 
				
			||||||
		else
 | 
							else
 | 
				
			||||||
			cache "$video"
 | 
								cache "$video" &
 | 
				
			||||||
			archive "$video"
 | 
								archive "$video" &
 | 
				
			||||||
			printf "%s\n" "$video" >> "$file"
 | 
								printf "%s\n" "$video" >> "$file"
 | 
				
			||||||
		fi
 | 
							fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -57,6 +65,8 @@ add() { # adds a video to a playlist file
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
archive() { # archives a video to the Wayback Machine
 | 
					archive() { # archives a video to the Wayback Machine
 | 
				
			||||||
 | 
						test -z "$1" && usage 'archive uri...'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	while test -n "$1"; do
 | 
						while test -n "$1"; do
 | 
				
			||||||
		if test -n "$(printf '%s\n' "$1" | grep -e 'web\.archive\.org')"
 | 
							if test -n "$(printf '%s\n' "$1" | grep -e 'web\.archive\.org')"
 | 
				
			||||||
		then
 | 
							then
 | 
				
			||||||
@ -78,6 +88,8 @@ archive() { # archives a video to the Wayback Machine
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
cache() { # cache the video title for faster retrieval
 | 
					cache() { # cache the video title for faster retrieval
 | 
				
			||||||
 | 
						test -z "$1" && usage 'cache video...'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	test -e "$cachefile" || touch "$cachefile"
 | 
						test -e "$cachefile" || touch "$cachefile"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	while test -n "$1"; do
 | 
						while test -n "$1"; do
 | 
				
			||||||
@ -88,13 +100,28 @@ cache() { # cache the video title for faster retrieval
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
clone() { # clones a YouTube playlist to a file
 | 
					clone() { # clones a YouTube playlist to a file
 | 
				
			||||||
	test -d "$YT_PL_DIR" || mkdir -p "$YT_PL_DIR"
 | 
						test -z "$1" && usage 'clone uri [playlist]'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	test -n "$2" && file="$2" \
 | 
						n=1
 | 
				
			||||||
		|| file="$YT_PL_DIR/$(yt-dlp -s -I '1:1' --print '%(playlist)s' "$1").m3u"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	yt-dlp --flat-playlist "$1" --print url > "$file"
 | 
						while test -z "$title"; do
 | 
				
			||||||
	verify "$file"
 | 
							title="$(yt-dlp -s -I "$n" --print '%(playlist)s' "$1" || true)"
 | 
				
			||||||
 | 
							n="$((n + 1))"
 | 
				
			||||||
 | 
						done
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						creator="$(yt-dlp -s -I "$n" --print '%(playlist_uploader)s' "$1")"
 | 
				
			||||||
 | 
						filename="$(printf '%s\n' "$title" | sed 's/ /_/g')"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						file="$YT_PL_DIR/$filename.m3u"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						videos="$(yt-dlp --flat-playlist "$1" --print url)"
 | 
				
			||||||
 | 
						prefix="$(printf "#EXTM3U\n#EXTART:%s\n#PLAYLIST:%s [%s]\n" \
 | 
				
			||||||
 | 
							"$creator" "$title" "$1")"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						printf "%s: %s: Saving playlist to %s.\n" "$argv0" "$title" "$file" 1>&2
 | 
				
			||||||
 | 
						printf '%s\n\n%s\n' "$prefix" "$videos" >"$file"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						verify "$filename"
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
lines() {
 | 
					lines() {
 | 
				
			||||||
@ -105,6 +132,8 @@ lines() {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
list() {
 | 
					list() {
 | 
				
			||||||
 | 
						test -n "$1" && usage 'list'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if test -z "$YTPICK"; then
 | 
						if test -z "$YTPICK"; then
 | 
				
			||||||
		printf "%s: Please set \$YTPICK to your preferred picking tool." \
 | 
							printf "%s: Please set \$YTPICK to your preferred picking tool." \
 | 
				
			||||||
			"$argv0" 1>&2
 | 
								"$argv0" 1>&2
 | 
				
			||||||
@ -117,7 +146,7 @@ list() {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
menu() {
 | 
					menu() {
 | 
				
			||||||
		playlist="$(ls "$YT_PL_DIR" | sed 's/\.m3u//g' | $YTPICK)"
 | 
							playlist="$(ls "$YT_PL_DIR" | sed 's/\.m3u//g' | sed -n '/[^.old]/p' | $YTPICK)"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		while test -d "$YT_PL_DIR/$playlist"; do
 | 
							while test -d "$YT_PL_DIR/$playlist"; do
 | 
				
			||||||
			dir="$playlist"
 | 
								dir="$playlist"
 | 
				
			||||||
@ -128,16 +157,23 @@ menu() {
 | 
				
			|||||||
		printf '%s/%s\n' "$dir" "$playlist"
 | 
							printf '%s/%s\n' "$dir" "$playlist"
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
music() { # downloads a video, splitting by chapter and only saving the audio
 | 
					new() {
 | 
				
			||||||
	while test -n "$1"; do
 | 
						test -z "$1" && usage 'new playlist...'
 | 
				
			||||||
		yt-dlp -vx --split-chapters -o \
 | 
					
 | 
				
			||||||
			"chapter:%(fulltitle)s - %(section_number)s %(section_title)s.%(ext)s" \
 | 
						file="$YT_PL_DIR/$1.m3u"
 | 
				
			||||||
			"$1" --audio-quality 0 >> log 2>&1
 | 
					
 | 
				
			||||||
		shift
 | 
						if test -f "$file"; then
 | 
				
			||||||
	done
 | 
							printf "%s: %s: File exists." "$argv0" "$file"
 | 
				
			||||||
 | 
						elif test -d "$file"; then
 | 
				
			||||||
 | 
							printf "%s: %s: Is a directory." "$argv0" "$file"
 | 
				
			||||||
 | 
						else
 | 
				
			||||||
 | 
							touch "$file"
 | 
				
			||||||
 | 
						fi
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pick() { # Pick a video to play from a playlist of videos
 | 
					pick() { # Pick a video to play from a playlist of videos
 | 
				
			||||||
 | 
						test -z "$1" && usage 'pick playlist...'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if test -z "$YTPICK"; then
 | 
						if test -z "$YTPICK"; then
 | 
				
			||||||
		printf "%s: Please set \$YTPICK to your preferred picking tool." \
 | 
							printf "%s: Please set \$YTPICK to your preferred picking tool." \
 | 
				
			||||||
			"$argv0" 1>&2
 | 
								"$argv0" 1>&2
 | 
				
			||||||
@ -152,7 +188,7 @@ pick() { # Pick a video to play from a playlist of videos
 | 
				
			|||||||
			then
 | 
								then
 | 
				
			||||||
				continue
 | 
									continue
 | 
				
			||||||
			else
 | 
								else
 | 
				
			||||||
				cache "$line"
 | 
									cache "$line" &
 | 
				
			||||||
			fi
 | 
								fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if test -z "$list"; then
 | 
								if test -z "$list"; then
 | 
				
			||||||
@ -172,17 +208,21 @@ pick() { # Pick a video to play from a playlist of videos
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
play() { # play a video after caching its title
 | 
					play() { # play a video after caching its title
 | 
				
			||||||
 | 
						test -z "$1" && usage 'play uri...'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if test -z "$PLAYER"; then
 | 
						if test -z "$PLAYER"; then
 | 
				
			||||||
		printf "%s: Please set \$PLAYER to your preferred video player." \
 | 
							printf "%s: Please set \$PLAYER to your preferred video player." \
 | 
				
			||||||
			"$argv0" 1>&2
 | 
								"$argv0" 1>&2
 | 
				
			||||||
		exit 78 # sysexits.h(3) EX_CONFIG
 | 
							exit 78 # sysexits.h(3) EX_CONFIG
 | 
				
			||||||
	fi
 | 
						fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	cache "$@"
 | 
						cache "$@" &
 | 
				
			||||||
	"$PLAYER" "$@"
 | 
						"$PLAYER" "$@"
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
queue() {
 | 
					queue() {
 | 
				
			||||||
 | 
						test -z "$1" && usage 'queue playlist...'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if test -z "$PLAYER"; then
 | 
						if test -z "$PLAYER"; then
 | 
				
			||||||
		printf "%s: Please set \$PLAYER to your preferred video player." \
 | 
							printf "%s: Please set \$PLAYER to your preferred video player." \
 | 
				
			||||||
			"$argv0" 1>&2
 | 
								"$argv0" 1>&2
 | 
				
			||||||
@ -196,6 +236,8 @@ queue() {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
search() {
 | 
					search() {
 | 
				
			||||||
 | 
						test -z "$1" && usage 'search term [count]'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if test -z "$YTPICK"; then
 | 
						if test -z "$YTPICK"; then
 | 
				
			||||||
		printf "%s: Please set \$YTPICK to your preferred picking tool." \
 | 
							printf "%s: Please set \$YTPICK to your preferred picking tool." \
 | 
				
			||||||
			"$argv0" 1>&2
 | 
								"$argv0" 1>&2
 | 
				
			||||||
@ -204,6 +246,9 @@ search() {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	results="$(yt-dlp "ytsearch$2:$1" --print "$FMT")"
 | 
						results="$(yt-dlp "ytsearch$2:$1" --print "$FMT")"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						cache "$(printf '%s\n' "$results" | sed -e 's/.*\[//g' -e 's/\]/ /g' \
 | 
				
			||||||
 | 
							| tr -d '\n')" &
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	selection="$(printf '%s\n' "$results" \
 | 
						selection="$(printf '%s\n' "$results" \
 | 
				
			||||||
		| $YTPICK \
 | 
							| $YTPICK \
 | 
				
			||||||
		| sed 's/.*\[//g' \
 | 
							| sed 's/.*\[//g' \
 | 
				
			||||||
@ -229,16 +274,60 @@ search() {
 | 
				
			|||||||
	fi
 | 
						fi
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					searchlocal() {
 | 
				
			||||||
 | 
						test -n "$1" && usage 'searchlocal'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if test -z "$YTPICK"; then
 | 
				
			||||||
 | 
							printf "%s: Please set \$YTPICK to your preferred picking tool." \
 | 
				
			||||||
 | 
								"$argv0" 1>&2
 | 
				
			||||||
 | 
							exit 78 # sysexits.h(3) EX_CONFIG
 | 
				
			||||||
 | 
						fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						$YTPICK <"$cachefile"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sync() {
 | 
				
			||||||
 | 
						if test -z "$1"
 | 
				
			||||||
 | 
						then
 | 
				
			||||||
 | 
							set -- "$YT_PL_DIR"/*.m3u
 | 
				
			||||||
 | 
						else
 | 
				
			||||||
 | 
							set -- $(printf "$@" | sed "s/.* /$P\/&\.m3u /g")
 | 
				
			||||||
 | 
						fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						while test -n "$1"; do
 | 
				
			||||||
 | 
							file="$1"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if test -f "$file"; then
 | 
				
			||||||
 | 
								URL="$(sed -n 's/^\#PLAYLIST:.* \[//p' <"$file" | tr -d ']')"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								if test -n "$URL"; then
 | 
				
			||||||
 | 
									clone "$URL" && mv "$file" "$file.old"
 | 
				
			||||||
 | 
								fi
 | 
				
			||||||
 | 
							fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							shift
 | 
				
			||||||
 | 
						done
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
usage() {
 | 
					usage() {
 | 
				
			||||||
	printf "Usage: %s %s\n" "$argv0" "$@" 1>&2
 | 
						printf "Usage: %s %s\n" "$argv0" "$@" 1>&2
 | 
				
			||||||
	exit 64 # sysexits.h(3) EX_USAGE
 | 
						exit 64 # sysexits.h(3) EX_USAGE
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
verify() { # replaces videos with archived versions if they are not available
 | 
					verify() { # replaces videos with archived versions if they are not available
 | 
				
			||||||
	while test -f "$YT_PL_DIR/$1.m3u"; do
 | 
						test -z "$1" && usage 'verify playlist...'
 | 
				
			||||||
		file="$YT_PL_DIR/$1.m3u"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
		for video in $(lines "$file"); do
 | 
						set -- $(printf '%s\n' "$@" | sed "s/[^ ]*/$P\/&.m3u /g")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						while test -n "$1"; do
 | 
				
			||||||
 | 
							if ! test -f "$1"; then
 | 
				
			||||||
 | 
								printf '%s: %s: No such playlist.\n' \ "$argv0" "$1" 1>&2
 | 
				
			||||||
 | 
								exit 69 # syexits.h(3) EX_UNAVAILABLE
 | 
				
			||||||
 | 
							fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							printf "%s: %s: Verifying playlist.\n" "$argv0" "$1" 1>&2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							for video in $(lines "$1"); do
 | 
				
			||||||
			if test -n "$(yt-dlp -s "$video" 2>&1 \
 | 
								if test -n "$(yt-dlp -s "$video" 2>&1 \
 | 
				
			||||||
				| grep -i -e 'video unavailable' -e 'private video' -e 'been removed')"
 | 
									| grep -i -e 'video unavailable' -e 'private video' -e 'been removed')"
 | 
				
			||||||
			then
 | 
								then
 | 
				
			||||||
@ -254,22 +343,22 @@ verify() { # replaces videos with archived versions if they are not available
 | 
				
			|||||||
					printf "%s: %s: Video not available on the Wayback Machine.\n" \
 | 
										printf "%s: %s: Video not available on the Wayback Machine.\n" \
 | 
				
			||||||
						"$argv0" "$video" 1>&2
 | 
											"$argv0" "$video" 1>&2
 | 
				
			||||||
					# replace the video link with a comment containing link
 | 
										# replace the video link with a comment containing link
 | 
				
			||||||
					content="$(sed "s;^$video;\# $video;g" "$file")"
 | 
										content="$(sed "s;^$video;\# $video;g" "$1")"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
					# write the new content buffer to file
 | 
										# write the new content buffer to file
 | 
				
			||||||
					printf '%s\n' "$content" > "$file"
 | 
										printf '%s\n' "$content" > "$1"
 | 
				
			||||||
				else
 | 
									else
 | 
				
			||||||
					printf "%s: %s: Replacing link with Wayback link.\n" \
 | 
										printf "%s: %s: Replacing link with Wayback link.\n" \
 | 
				
			||||||
						"$argv0" "$video" 1>&2
 | 
											"$argv0" "$video" 1>&2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
					content="$(sed "s;^$video;$wayback_url;g" "$file")"
 | 
										content="$(sed "s;^$video;$wayback_url;g" "$1")"
 | 
				
			||||||
					printf '%s\n' "$content" >"$file"
 | 
										printf '%s\n' "$content" >"$1"
 | 
				
			||||||
					cache "$wayback_url"
 | 
										cache "$wayback_url" &
 | 
				
			||||||
				fi
 | 
									fi
 | 
				
			||||||
			else
 | 
								else
 | 
				
			||||||
				printf '%s: %s: Video available.\n' "$argv0" "$video" 1>&2
 | 
									printf '%s: %s: Video available.\n' "$argv0" "$video" 1>&2
 | 
				
			||||||
				cache "$video"
 | 
									cache "$video" &
 | 
				
			||||||
				archive "$video"
 | 
									archive "$video" &
 | 
				
			||||||
			fi
 | 
								fi
 | 
				
			||||||
		done
 | 
							done
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
@ -284,57 +373,11 @@ for dep in \
 | 
				
			|||||||
do
 | 
					do
 | 
				
			||||||
	if ! command -v "$dep" >/dev/null
 | 
						if ! command -v "$dep" >/dev/null
 | 
				
			||||||
	then
 | 
						then
 | 
				
			||||||
		printf "%s: %s: Missing dependency." "$argv0" "$dep" 1>&2
 | 
							printf "%s: %s: Missing dependency.\n" "$0" "$dep" 1>&2
 | 
				
			||||||
		exit 69 # syexits.h(3) EX_UNAVAILABLE
 | 
							exit 69 # syexits.h(3) EX_UNAVAILABLE
 | 
				
			||||||
	fi
 | 
						fi
 | 
				
			||||||
done
 | 
					done
 | 
				
			||||||
 | 
					
 | 
				
			||||||
case "$com" in
 | 
					test -n "$com" && shift || usage "$u"
 | 
				
			||||||
	add)
 | 
					
 | 
				
			||||||
		shift 2>/dev/null || usage 'add uri file'
 | 
					"$com" "$@"
 | 
				
			||||||
		add "$@"
 | 
					 | 
				
			||||||
		;;
 | 
					 | 
				
			||||||
	archive)
 | 
					 | 
				
			||||||
		shift 2>/dev/null || usage 'archive uri...'
 | 
					 | 
				
			||||||
		archive "$@"
 | 
					 | 
				
			||||||
		;;
 | 
					 | 
				
			||||||
	cache)
 | 
					 | 
				
			||||||
		shift 2>/dev/null || usage 'cache uri...'
 | 
					 | 
				
			||||||
		cache "$@"
 | 
					 | 
				
			||||||
		;;
 | 
					 | 
				
			||||||
	clone)
 | 
					 | 
				
			||||||
		shift 2>/dev/null || usage 'clone uri [file]'
 | 
					 | 
				
			||||||
		clone "$@"
 | 
					 | 
				
			||||||
		;;
 | 
					 | 
				
			||||||
	list)
 | 
					 | 
				
			||||||
		shift 2>/dev/null || usage 'list'
 | 
					 | 
				
			||||||
		list "$@"
 | 
					 | 
				
			||||||
		;;
 | 
					 | 
				
			||||||
	music)
 | 
					 | 
				
			||||||
		shift 2>/dev/null || usage 'music uri...'
 | 
					 | 
				
			||||||
		music "$@"
 | 
					 | 
				
			||||||
		;;
 | 
					 | 
				
			||||||
	pick)
 | 
					 | 
				
			||||||
		shift 2>/dev/null || usage 'pick file...'
 | 
					 | 
				
			||||||
		pick "$@"
 | 
					 | 
				
			||||||
		;;
 | 
					 | 
				
			||||||
	play)
 | 
					 | 
				
			||||||
		shift 2>/dev/null || usage 'play uri...'
 | 
					 | 
				
			||||||
		play "$@"
 | 
					 | 
				
			||||||
		;;
 | 
					 | 
				
			||||||
	queue)
 | 
					 | 
				
			||||||
		shift 2>/dev/null || usage 'queue file...'
 | 
					 | 
				
			||||||
		queue "$@"
 | 
					 | 
				
			||||||
		;;
 | 
					 | 
				
			||||||
	search)
 | 
					 | 
				
			||||||
		shift 2>/dev/null || usage 'search term [count]'
 | 
					 | 
				
			||||||
		search "$@"
 | 
					 | 
				
			||||||
		;;
 | 
					 | 
				
			||||||
	verify)
 | 
					 | 
				
			||||||
		shift 2>/dev/null || usage 'file...'
 | 
					 | 
				
			||||||
		verify "$@"
 | 
					 | 
				
			||||||
		;;
 | 
					 | 
				
			||||||
	*)
 | 
					 | 
				
			||||||
		usage 'add | clone | list | music | pick | play | verify'
 | 
					 | 
				
			||||||
		;;
 | 
					 | 
				
			||||||
esac
 | 
					 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user