From 1b797bee3ecb85b21823867060bb60ca2bbf9079 Mon Sep 17 00:00:00 2001 From: ksyasuda Date: Sat, 4 Jun 2022 02:05:37 -0700 Subject: [PATCH] add autoplay flag for continue watching prompt after each episode --- ani-cli | 159 ++++++++++++++++++++++++++++++++--------------------- aniwrapper | 26 ++++++--- 2 files changed, 114 insertions(+), 71 deletions(-) diff --git a/ani-cli b/ani-cli index 552244b..affd907 100755 --- a/ani-cli +++ b/ani-cli @@ -754,6 +754,21 @@ episode_selection() { fi } +continue_watching() { + if ((IS_ROFI == 1)); then + choice=$(rofi -dmenu -dpi "$DPI" -config "$ROFI_CFG" \ + -theme-str 'listview {columns: 1;} window {width: 25%;}' \ + -i -l 2 -no-custom -sep '|' -a 0 -mesg "$(generate_span "Next episode: $((episode + 1))")" \ + -p "Continue watching $selection_id?:" -window-title 'aniwrapper' <<< "Yes|No") + else + inf "Continue watching $selection_id?" + prompt "Next episode -> $((episode + 1)) [y/n]" + read -r choice + fi + + [[ "$choice" =~ ^(y|Y|Yes)$ ]] && return 0 || return 1 +} + open_episode() { anime_id="$1" episode="$2" @@ -792,6 +807,14 @@ open_episode() { else ((SILENT != 1)) && inf "Playing $anime_id - Episode $episode" fi + if ((is_autoplay == 1)); then + wait "$PID" + if continue_watching; then + open_episode "$anime_id" "$((episode + 1))" "$ddir" + else + exit 0 + fi + fi else lg "Downloading episode $episode ..." dl_dir="${ddir// /}/$anime_id" @@ -851,8 +874,12 @@ parse_args() { quality=best is_download=0 is_resume=0 - while getopts 'd:Hsvq:cf:t:T:CQ:D:Sp:r' OPT; do + is_autoplay=0 + while getopts 'ad:Hsvq:cf:t:T:CQ:D:Sp:r' OPT; do case "$OPT" in + a) + is_autoplay=1 + ;; d) is_download=1 download_dir="$OPTARG" @@ -936,6 +963,71 @@ parse_args() { done } +show_menu() { + if ((SILENT != 1)); then + episode=${ep_choice_end:-$ep_choice_start} + choice='' + while :; do + inf "Currently playing $selection_id episode" "${episode// /}/$LAST_EP_NUMBER" + ((episode != LAST_EP_NUMBER)) && menu_line_alternate "next episode" "n" + ((episode != FIRST_EP_NUMBER)) && menu_line_alternate "previous episode" "p" + ((FIRST_EP_NUMBER != LAST_EP_NUMBER)) && menu_line_alternate "select episode" "s" + menu_line_alternate "replay current episode" "r" + menu_line_alternate "search for another anime" "a" + menu_line_alternate "download current episode" "d" + menu_line_alternate "download current episode (with quality selection)" "D" + menu_line_alternate "select video quality (current: $quality)" "Q" + menu_line_strong "exit" "q" + prompt "Enter choice" + read -r choice + case $choice in + n) + episode=$((episode + 1)) + ;; + p) + episode=$((episode - 1)) + ;; + + s) + episode_selection + episode=$ep_choice_start + ;; + + r) + episode=$((episode)) + ;; + a) + stream + episode=$ep_choice_start + lg "NEW EPISODE: $selection_id - $episode" + ;; + Q) + set_video_quality + episode=$((episode)) + ;; + + d) + get_dl_dir + is_download=1 + ;; + D) + get_dl_dir + set_video_quality + is_download=1 + ;; + q) + break + ;; + + *) + die "invalid choice" + ;; + esac + open_episode "$selection_id" "$episode" "$download_dir" + done + fi +} + main() { case $scrape in query) @@ -1012,72 +1104,13 @@ main() { open_episode "$selection_id" "$ep" "$download_dir" done - if [[ "$is_download" -eq 1 ]]; then + if ((is_download == 1)); then lg "Finished downloading episodes: $episodes for $selection_id... exiting" exit 0 fi - if ((SILENT != 1)); then - episode=${ep_choice_end:-$ep_choice_start} - choice='' - while :; do - inf "Currently playing $selection_id episode" "${episode// /}/$LAST_EP_NUMBER" - ((episode != LAST_EP_NUMBER)) && menu_line_alternate "next episode" "n" - ((episode != FIRST_EP_NUMBER)) && menu_line_alternate "previous episode" "p" - ((FIRST_EP_NUMBER != LAST_EP_NUMBER)) && menu_line_alternate "select episode" "s" - menu_line_alternate "replay current episode" "r" - menu_line_alternate "search for another anime" "a" - menu_line_alternate "download current episode" "d" - menu_line_alternate "download current episode (with quality selection)" "D" - menu_line_alternate "select video quality (current: $quality)" "Q" - menu_line_strong "exit" "q" - prompt "Enter choice" - read -r choice - case $choice in - n) - episode=$((episode + 1)) - ;; - p) - episode=$((episode - 1)) - ;; - - s) - episode_selection - episode=$ep_choice_start - ;; - - r) - episode=$((episode)) - ;; - a) - stream - episode=$ep_choice_start - lg "NEW EPISODE: $selection_id - $episode" - ;; - Q) - set_video_quality - episode=$((episode)) - ;; - - d) - get_dl_dir - is_download=1 - ;; - D) - get_dl_dir - set_video_quality - is_download=1 - ;; - q) - break - ;; - - *) - die "invalid choice" - ;; - esac - open_episode "$selection_id" "$episode" "$download_dir" - done + if ((is_autoplay == 0)); then + show_menu fi } diff --git a/aniwrapper b/aniwrapper index 94702b9..bfa32c7 100755 --- a/aniwrapper +++ b/aniwrapper @@ -16,6 +16,7 @@ SUPPORTED_PLAYERS="mpv|vlc" QUALITY=best PLAYER_FN=mpv DPI=96 +IS_AUTOPLAY=0 GET_QUALITY=0 IS_CUSTOM_THEME=0 IS_DOWNLOAD=0 @@ -87,23 +88,26 @@ run() { if ((IS_PLAY_FROM_FILE == 0 && IS_SYNC == 0 && GET_QUALITY == 1)); then get_quality fi + if ((IS_AUTOPLAY)); then + CMD="$CMD -a" + fi if ((SILENT == 1)); then if ((IS_CUSTOM_THEME == 0)); then - "$CMD" -D"$DPI" -Sq "$QUALITY" -t "$theme" -p "$PLAYER_FN" "$@" + $CMD -D"$DPI" -Sq "$QUALITY" -t "$theme" -p "$PLAYER_FN" "$@" else - "$CMD" -D"$DPI" -Sq "$QUALITY" -T "$CFG_FILE" -p "$PLAYER_FN" "$@" + $CMD -D"$DPI" -Sq "$QUALITY" -T "$CFG_FILE" -p "$PLAYER_FN" "$@" fi elif ((VERBOSE == 1)); then if ((IS_CUSTOM_THEME == 0)); then - "$CMD" -D"$DPI" -vq "$QUALITY" -t "$theme" -p "$PLAYER_FN" "$@" + $CMD -D"$DPI" -vq "$QUALITY" -t "$theme" -p "$PLAYER_FN" "$@" else - "$CMD" -D"$DPI" -vq "$QUALITY" -T "$CFG_FILE" -p "$PLAYER_FN" "$@" + $CMD -D"$DPI" -vq "$QUALITY" -T "$CFG_FILE" -p "$PLAYER_FN" "$@" fi else if ((IS_CUSTOM_THEME == 0)); then - "$CMD" -D"$DPI" -q "$QUALITY" -t "$theme" -p "$PLAYER_FN" "$@" + $CMD -D"$DPI" -q "$QUALITY" -t "$theme" -p "$PLAYER_FN" "$@" else - "$CMD" -D"$DPI" -q "$QUALITY" -T "$CFG_FILE" -p "$PLAYER_FN" "$@" + $CMD -D"$DPI" -q "$QUALITY" -T "$CFG_FILE" -p "$PLAYER_FN" "$@" fi fi } @@ -168,8 +172,11 @@ set_theme() { } parse_args() { - while getopts 'cCdD:f:hpqQ:rSt:T:v' OPT; do + while getopts 'acCdD:f:hpqQ:rSt:T:v' OPT; do case "$OPT" in + a) + IS_AUTOPLAY=1 + ;; c) IS_ROFI=0 lg "Command-line (ani-cli) mode set" @@ -267,6 +274,9 @@ check_flags() { if ((VERBOSE == 1 && SILENT == 1)); then die "verbose and silent options cannot be used together" fi + if ((IS_DOWNLOAD == 1 && IS_AUTOPLAY == 1)); then + die "autoplay and download options cannot be used together" + fi if ((IS_DOWNLOAD == 0 && IS_ALTERNATE_PLAYER == 1)); then get_player lg "SELECTED PLAYER FN -> $PLAYER_FN" @@ -347,7 +357,7 @@ main() { span=$(printf '%s\n%s\n' "$(generate_span "Provide a path to a valid directory, or choose from the list below")" "$(generate_span "The program will begin searching for media files from the supplied directory")") play_dir=$( rofi -dpi "$DPI" -dmenu -config "$CFG_FILE" \ - -l 12 -mesg "$span" -p "Enter path to starting directory:" \ + -i -l 12 -mesg "$span" -p "Enter path to starting directory:" \ -async-pre-read 24 -matching 'fuzzy' -window-title 'aniwrapper' \ -sort -sorting-method fzf \ < <(sqlite3 -noheader -list "$CFG_DIR/history.sqlite3" <<< "SELECT directory FROM file_history WHERE filename = 'DIRECTORY' ORDER BY WATCH_DATE DESC;")