diff options
-rwxr-xr-x | bin/playlist | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/bin/playlist b/bin/playlist new file mode 100755 index 0000000..bd01d23 --- /dev/null +++ b/bin/playlist @@ -0,0 +1,103 @@ +#!/bin/sh +set -eu + +usage() { + cat <<-'EOF' + Usage: + playlist ACTION + playlist -h + EOF +} + +help() { + cat <<-'EOF' + + Options: + -h, --help show this message + + ACTION one of: + - prompt + - run + + + Manage the playlist. + + + Examples: + + Enqueue a video: + + $ playlist prompt + + + Play the next video in the queue: + + $ playlist run + EOF +} + +for flag in "$@"; do + case "$flag" in + --) + break + ;; + --help) + usage + help + exit + ;; + *) + ;; + esac +done + +while getopts 'h' flag; do + case "$flag" in + h) + usage + help + exit + ;; + *) + usage >&2 + exit 2 + ;; + esac +done +shift $((OPTIND - 1)) +ACTION="${1:-}" + +eval "$(assert-arg "$ACTION" 'ACTION')" + +F="$XDG_DATA_HOME"/euandreh/playlist.txt + +prompt() { + ENTRY="$(zenity --text 'URL of the video to enqueue:' --entry ||:)" + if [ -n "$ENTRY" ]; then + echo "$ENTRY" >> "$F" + fi +} + +run() { + next="$(head -n1 "$F")" + if [ -z "$next" ]; then + return + fi + mpv "$next" + echo "$next" >> "queue.$F" + tail -n+2 "$F" | sponge "$F" +} + +case "$ACTION" in + prompt) + prompt + ;; + run) + run + ;; + *) + printf 'Bad ACTION: %s.\n\n' "$ACTION" >&2 + usage >&2 + exit 2 + ;; +esac |