#!/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 printf '%s\n' "$ENTRY" >> "$F" fi } run() { next="$(head -n1 "$F")" if [ -z "$next" ]; then return fi mpv "$next" printf '%s\n' "$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