diff --git a/ani-cli b/ani-cli index 552244b..bc8e234 100755 --- a/ani-cli +++ b/ani-cli @@ -754,12 +754,28 @@ episode_selection() { fi } +continue_watching() { + if ((IS_ROFI == 1)); then + msg="$(printf '%s\n%s' "$(generate_span "Anime: $anime_id")" "$(generate_span "Next episode: $((episode + 1))")")" + 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 "$msg" \ + -p "Continue watching?" -window-title 'aniwrapper' <<< "Yes|No") + else + inf "Continue watching $selection_id?" + prompt "Next episode -> $((episode + 1)) [Y/n]" + read -r choice + [ -z "$choice" ] && choice="y" + fi + + [[ "$choice" =~ ^(y|Y|Yes)$ ]] && return 0 || return 1 +} + open_episode() { anime_id="$1" episode="$2" ddir="$3" - # Don't update watch history if downloading episode insert_history "watch" "$anime_id" "$episode" lg "Getting data for episode $episode" @@ -792,6 +808,15 @@ open_episode() { else ((SILENT != 1)) && inf "Playing $anime_id - Episode $episode" fi + if ((is_autoplay == 1)); then + lg "Waiting for video to finish playing..." + wait "$PID" + if ((episode + 1 <= LAST_EP_NUMBER)) && 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 +876,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 +965,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 +1106,11 @@ 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 + elif ((is_autoplay == 0)); then + show_menu fi } diff --git a/aniwrapper b/aniwrapper index 94702b9..9b9bd63 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 @@ -35,12 +36,13 @@ help_text() { printf "%s\n" "$line" done <<< " Usage: - aniwrapper [-dhpqSv] [-t | -T ] [] + aniwrapper [-adhpqSv] [-t | -T ] [] aniwrapper -f [-t | -T ] [-pSv] []\ aniwrapper -c [-dhpqSv] [] aniwrapper -Q aniwrapper -C Options: + -a enable autoplay -c enable command-line mode (rofi disabled) -C connect to history database -d download episode in command-line mode @@ -87,23 +89,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 +173,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 +275,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 +358,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;") diff --git a/docs/man/aniwrapper.1 b/docs/man/aniwrapper.1 index 8c8def7..6f5e56c 100644 --- a/docs/man/aniwrapper.1 +++ b/docs/man/aniwrapper.1 @@ -1,5 +1,19 @@ -.\" Automatically generated by Pandoc 2.14.2 +.\" Automatically generated by Pandoc 2.17.1.1 .\" +.\" Define V font for inline verbatim, using C font in formats +.\" that render this, and otherwise B font. +.ie "\f[CB]x\f[]"x" \{\ +. ftr V B +. ftr VI BI +. ftr VB B +. ftr VBI BI +.\} +.el \{\ +. ftr V CR +. ftr VI CI +. ftr VB CB +. ftr VBI CBI +.\} .TH "ANIWRAPPER" "1" "February 4, 2022" "aniwrapper 1.0.0" "Man Page" .hy .SH NAME @@ -8,7 +22,7 @@ aniwrapper - A rofi wrapper around ani-cli: a command-line tool to stream, download, and play anime .SH SYNOPSIS .PP -\f[B]aniwrapper\f[R] [-dhpqrSv] [-t \f[I]theme\f[R] | -T +\f[B]aniwrapper\f[R] [-adhpqrSv] [-t \f[I]theme\f[R] | -T \f[I]config_path\f[R]] [\f[I]query\f[R]] .PD 0 .P @@ -43,6 +57,9 @@ aniwrapper.rasi theme .IP \[bu] 2 best quality .TP +\f[B]-a\f[R] +Enable autoplay in streaming mode +.TP \f[B]-c\f[R] Enable command-line mode (disable \f[B]rofi\f[R]) .TP diff --git a/docs/man/aniwrapper.1.md b/docs/man/aniwrapper.1.md index 68dfed1..5c92990 100644 --- a/docs/man/aniwrapper.1.md +++ b/docs/man/aniwrapper.1.md @@ -12,7 +12,7 @@ aniwrapper - A rofi wrapper around ani-cli: a command-line tool to stream, downl # SYNOPSIS -**aniwrapper** [-dhpqrSv] [-t _theme_ | -T _config_path_] [_query_]\ +**aniwrapper** [-adhpqrSv] [-t _theme_ | -T _config_path_] [_query_]\ **aniwrapper** -f _directory_path_ [-t _theme_ | -T _config_path_] [-pSv] [_query_]\ **aniwrapper** -c [-dhpqrSv] [_query_]\ **aniwrapper** -Q _query_\ @@ -32,6 +32,9 @@ Defaults: - aniwrapper.rasi theme - best quality +**-a** +: Enable autoplay in streaming mode + **-c** : Enable command-line mode (disable **rofi**)