#!/usr/bin/env dash # shellcheck source=/dev/null SHELL_LIBRARY_VERSION="2.0.10" . %SHELL_LIBRARY_PATH TASK_UUID=ce4f9e07-8324-4570-8be6-967955e9271e # these are used in version() AUTHORS="Soispha" YEARS="2023" NAME="neorg" help_text=" # Commands: # w, watch = watch id # d, drop = mark id as watched # p, pick = leave id as is; This is a noop # # These lines can be re-ordered; they are executed from top to bottom. # vim: ft=gitrebase" help() { cat << EOF A help script to make selecting videos to play for ytcc easier. USAGE: $NAME [OPTIONS] [COMMAND] OPTIONS: --help | -h Display this help and exit. --version | -v Display version and copyright information and exit. COMMANDS: order MODE Select the ordering mode. ARGUMENTS: MODE := date | raw date will sort descending by publishing date, whilest raw esxposes the ytcc interface. See the help info of the 'ytcc list --help' '--order-by' option for more details. EOF } for arg in "$@"; do case "$arg" in "--help") help; exit 0; ;; "--version") version; exit 0; ;; esac done if [ -n "$1" ]; then case "$1" in "order") shift 1; case "$1" in "date") set -- "--order-by" "publish_date" "desc" oder_mode_set=true; ;; "raw") shift 1; if [ -n "$1" ]; then [ -z "$2" ] && die "A first argument to 'order raw' requires a second" set -- "--order-by" "$1" "$2" fi oder_mode_set=true; ;; *) die "'$1' is not a valid subcommand for 'order'; See '--help' for a list"; ;; esac ;; *) die "'$1' is not a valid subcommand; See '--help' for a list"; ;; esac fi # Set the default ordering mode [ -z "$oder_mode_set" ] && set -- "--order-by" "publish_date" "desc" table="$(ytcc --output json list "$@" | jq --raw-output 'map("pick \(.id) \(.title) (\(.playlists | map(.name) | join(", "))) [\(.duration | gsub("^\\s+|\\s+$";""))]") | join("\n")')" selection_file="$(mktmp)"; # This is trapped on EXIT # shellcheck disable=SC2317 cleanup() { task stop "$TASK_UUID" } trap cleanup EXIT task start "$TASK_UUID" echo "$table" > "$selection_file"; echo "$help_text" >> "$selection_file"; $EDITOR "$selection_file" is_first=true; while read -r line; do cmd="$(echo "$line" | awk '{print $1}')"; case "$cmd" in "" ) # An empty line, simply ignore it ;; "#") # This is a comment, do nothing here ;; "pick" | "p") # noop do nothing here ;; "drop" | "d") id="$(echo "$line" | awk '{print $2}')"; ytcc mark "$id"; dbg "Marked as watched: $id" ;; "watch" | "w") id="$(echo "$line" | awk '{print $2}')"; if [ "$is_first" = "true" ]; then set -- "$id" else set -- "$@" "$id" fi dbg "Added to be watched: $id" is_first=false ;; esac done < "$selection_file" [ -n "$1" ] && ytc "id" "$@"; exit 0; # vim: ft=sh