about summary refs log blame commit diff stats
path: root/hm/soispha/pkgs/scripts/specific/ytcc/yts
blob: 5a22a2c9094faf983795ab16ebabb63a7d0abf3e (plain) (tree)
1
2
3
4
5
6
7
8
9
10

                             
                                                    
                                              


                             
           






                                                                      























                                                                               











                    













                                                                                              
                                       









                                                                                              
 
                                                                    
                                                                                                                                                                                       

                          
                           


                          





                                       


                                             


                                             











                                                    
                            
                
                                 





                                          
                             
       
            
#!/usr/bin/env dash

# shellcheck source=/dev/null
SHELL_LIBRARY_VERSION="2.0.13" . %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 <id> = watch id
# d, drop <id> = mark id as watched
# p, pick <id> = 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