Compare commits

..

7 Commits

Author SHA1 Message Date
Kyle Yasuda
ba6c302022
Merge pull request #5 from ksyasuda/autoplay
add autoplay
2022-06-04 20:37:21 -07:00
ksyasuda
f218b34e21 make autoplay stop after last episode 2022-06-04 16:37:55 -07:00
ksyasuda
e5772469c7 update docs 2022-06-04 16:24:06 -07:00
ksyasuda
2e53ac3bfc cleanup code 2022-06-04 16:24:02 -07:00
ksyasuda
8d6acddea6 make yes default option autoplay prompt 2022-06-04 14:26:36 -07:00
ksyasuda
870920cbf5 move anime_id from prompt to message in rofi prompt 2022-06-04 14:13:24 -07:00
ksyasuda
1b797bee3e add autoplay flag for continue watching prompt after each episode 2022-06-04 02:05:37 -07:00
4 changed files with 142 additions and 78 deletions

165
ani-cli
View File

@ -754,12 +754,28 @@ episode_selection() {
fi 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() { open_episode() {
anime_id="$1" anime_id="$1"
episode="$2" episode="$2"
ddir="$3" ddir="$3"
# Don't update watch history if downloading episode
insert_history "watch" "$anime_id" "$episode" insert_history "watch" "$anime_id" "$episode"
lg "Getting data for episode $episode" lg "Getting data for episode $episode"
@ -792,6 +808,15 @@ open_episode() {
else else
((SILENT != 1)) && inf "Playing $anime_id - Episode $episode" ((SILENT != 1)) && inf "Playing $anime_id - Episode $episode"
fi 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 else
lg "Downloading episode $episode ..." lg "Downloading episode $episode ..."
dl_dir="${ddir// /}/$anime_id" dl_dir="${ddir// /}/$anime_id"
@ -851,8 +876,12 @@ parse_args() {
quality=best quality=best
is_download=0 is_download=0
is_resume=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 case "$OPT" in
a)
is_autoplay=1
;;
d) d)
is_download=1 is_download=1
download_dir="$OPTARG" download_dir="$OPTARG"
@ -936,6 +965,71 @@ parse_args() {
done 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() { main() {
case $scrape in case $scrape in
query) query)
@ -1012,72 +1106,11 @@ main() {
open_episode "$selection_id" "$ep" "$download_dir" open_episode "$selection_id" "$ep" "$download_dir"
done done
if [[ "$is_download" -eq 1 ]]; then if ((is_download == 1)); then
lg "Finished downloading episodes: $episodes for $selection_id... exiting" lg "Finished downloading episodes: $episodes for $selection_id... exiting"
exit 0 exit 0
fi elif ((is_autoplay == 0)); then
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 fi
} }

View File

@ -16,6 +16,7 @@ SUPPORTED_PLAYERS="mpv|vlc"
QUALITY=best QUALITY=best
PLAYER_FN=mpv PLAYER_FN=mpv
DPI=96 DPI=96
IS_AUTOPLAY=0
GET_QUALITY=0 GET_QUALITY=0
IS_CUSTOM_THEME=0 IS_CUSTOM_THEME=0
IS_DOWNLOAD=0 IS_DOWNLOAD=0
@ -35,12 +36,13 @@ help_text() {
printf "%s\n" "$line" printf "%s\n" "$line"
done <<< " done <<< "
Usage: Usage:
aniwrapper [-dhpqSv] [-t <theme> | -T <config_path>] [<query>] aniwrapper [-adhpqSv] [-t <theme> | -T <config_path>] [<query>]
aniwrapper -f <directory_path> [-t <theme> | -T <config_path>] [-pSv] [<query>]\ aniwrapper -f <directory_path> [-t <theme> | -T <config_path>] [-pSv] [<query>]\
aniwrapper -c [-dhpqSv] [<query>] aniwrapper -c [-dhpqSv] [<query>]
aniwrapper -Q <query> aniwrapper -Q <query>
aniwrapper -C aniwrapper -C
Options: Options:
-a enable autoplay
-c enable command-line mode (rofi disabled) -c enable command-line mode (rofi disabled)
-C connect to history database -C connect to history database
-d download episode in command-line mode -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 if ((IS_PLAY_FROM_FILE == 0 && IS_SYNC == 0 && GET_QUALITY == 1)); then
get_quality get_quality
fi fi
if ((IS_AUTOPLAY)); then
CMD="$CMD -a"
fi
if ((SILENT == 1)); then if ((SILENT == 1)); then
if ((IS_CUSTOM_THEME == 0)); 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 else
"$CMD" -D"$DPI" -Sq "$QUALITY" -T "$CFG_FILE" -p "$PLAYER_FN" "$@" $CMD -D"$DPI" -Sq "$QUALITY" -T "$CFG_FILE" -p "$PLAYER_FN" "$@"
fi fi
elif ((VERBOSE == 1)); then elif ((VERBOSE == 1)); then
if ((IS_CUSTOM_THEME == 0)); 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 else
"$CMD" -D"$DPI" -vq "$QUALITY" -T "$CFG_FILE" -p "$PLAYER_FN" "$@" $CMD -D"$DPI" -vq "$QUALITY" -T "$CFG_FILE" -p "$PLAYER_FN" "$@"
fi fi
else else
if ((IS_CUSTOM_THEME == 0)); then 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 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
fi fi
} }
@ -168,8 +173,11 @@ set_theme() {
} }
parse_args() { 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 case "$OPT" in
a)
IS_AUTOPLAY=1
;;
c) c)
IS_ROFI=0 IS_ROFI=0
lg "Command-line (ani-cli) mode set" lg "Command-line (ani-cli) mode set"
@ -267,6 +275,9 @@ check_flags() {
if ((VERBOSE == 1 && SILENT == 1)); then if ((VERBOSE == 1 && SILENT == 1)); then
die "verbose and silent options cannot be used together" die "verbose and silent options cannot be used together"
fi 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 if ((IS_DOWNLOAD == 0 && IS_ALTERNATE_PLAYER == 1)); then
get_player get_player
lg "SELECTED PLAYER FN -> $PLAYER_FN" 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")") 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=$( play_dir=$(
rofi -dpi "$DPI" -dmenu -config "$CFG_FILE" \ 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' \ -async-pre-read 24 -matching 'fuzzy' -window-title 'aniwrapper' \
-sort -sorting-method fzf \ -sort -sorting-method fzf \
< <(sqlite3 -noheader -list "$CFG_DIR/history.sqlite3" <<< "SELECT directory FROM file_history WHERE filename = 'DIRECTORY' ORDER BY WATCH_DATE DESC;") < <(sqlite3 -noheader -list "$CFG_DIR/history.sqlite3" <<< "SELECT directory FROM file_history WHERE filename = 'DIRECTORY' ORDER BY WATCH_DATE DESC;")

View File

@ -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" .TH "ANIWRAPPER" "1" "February 4, 2022" "aniwrapper 1.0.0" "Man Page"
.hy .hy
.SH NAME .SH NAME
@ -8,7 +22,7 @@ aniwrapper - A rofi wrapper around ani-cli: a command-line tool to
stream, download, and play anime stream, download, and play anime
.SH SYNOPSIS .SH SYNOPSIS
.PP .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]] \f[I]config_path\f[R]] [\f[I]query\f[R]]
.PD 0 .PD 0
.P .P
@ -43,6 +57,9 @@ aniwrapper.rasi theme
.IP \[bu] 2 .IP \[bu] 2
best quality best quality
.TP .TP
\f[B]-a\f[R]
Enable autoplay in streaming mode
.TP
\f[B]-c\f[R] \f[B]-c\f[R]
Enable command-line mode (disable \f[B]rofi\f[R]) Enable command-line mode (disable \f[B]rofi\f[R])
.TP .TP

View File

@ -12,7 +12,7 @@ aniwrapper - A rofi wrapper around ani-cli: a command-line tool to stream, downl
# SYNOPSIS # 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** -f _directory_path_ [-t _theme_ | -T _config_path_] [-pSv] [_query_]\
**aniwrapper** -c [-dhpqrSv] [_query_]\ **aniwrapper** -c [-dhpqrSv] [_query_]\
**aniwrapper** -Q _query_\ **aniwrapper** -Q _query_\
@ -32,6 +32,9 @@ Defaults:
- aniwrapper.rasi theme - aniwrapper.rasi theme
- best quality - best quality
**-a**
: Enable autoplay in streaming mode
**-c** **-c**
: Enable command-line mode (disable **rofi**) : Enable command-line mode (disable **rofi**)