Skip to content

Commit ec12c45

Browse files
committed
feat: keep ongoing anime selectable in -c and integrate nextep countdown
1 parent 6803b8a commit ec12c45

1 file changed

Lines changed: 62 additions & 19 deletions

File tree

ani-cli

Lines changed: 62 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -321,14 +321,39 @@ search_anime() {
321321
time_until_next_ep() {
322322
animeschedule="https://animeschedule.net"
323323
query="$(printf "%s\n" "$*" | tr ' ' '+')"
324-
curl -s -G "$animeschedule/api/v3/anime" --data "q=${query}" | sed 's|"id"|\n|g' | sed -nE 's|.*,"route":"([^"]*)","premier.*|\1|p' | while read -r anime; do
325-
data=$(curl -s "$animeschedule/anime/$anime" | sed '1,/"anime-header-list-buttons-wrapper"/d' | sed -nE 's|.*countdown-time-raw" datetime="([^"]*)">.*|Next Raw Release: \1|p;s|.*countdown-time" datetime="([^"]*)">.*|Next Sub Release: \1|p;s|.*english-title">([^<]*)<.*|English Title: \1|p;s|.*main-title".*>([^<]*)<.*|Japanese Title: \1|p')
326-
status="Ongoing"
327-
color="33"
328-
printf "%s\n" "$data"
329-
! (printf "%s\n" "$data" | grep -q "Next Raw Release:") && status="Finished" && color="32"
330-
printf "Status: \033[1;%sm%s\033[0m\n---\n" "$color" "$status"
331-
done
324+
325+
curl -s -G "$animeschedule/api/v3/anime" --data "q=${query}" \
326+
| sed 's|"id"|\n|g' \
327+
| sed -nE 's|.*,"route":"([^"]*)","premier.*|\1|p' \
328+
| {
329+
found=0
330+
331+
while read -r anime; do
332+
data=$(curl -s "$animeschedule/anime/$anime" \
333+
| sed '1,/"anime-header-list-buttons-wrapper"/d' \
334+
| sed -nE '
335+
s|.*countdown-time-raw" datetime="([^"]*)">.*|Next Raw Release: \1|p;
336+
s|.*countdown-time" datetime="([^"]*)">.*|Next Sub Release: \1|p;
337+
s|.*english-title">([^<]*)<.*|English Title: \1|p;
338+
s|.*main-title".*>([^<]*)<.*|Japanese Title: \1|p
339+
')
340+
341+
if printf "%s\n" "$data" | grep -q "Next Sub Release:"; then
342+
printf "%s\n" "$data"
343+
printf "Status: \033[1;33mOngoing\033[0m\n---\n"
344+
found=1
345+
break
346+
fi
347+
348+
if [ "$found" -eq 0 ]; then
349+
printf "%s\n" "$data"
350+
printf "Status: \033[1;32mFinished/Unknown\033[0m\n---\n"
351+
found=1
352+
break
353+
fi
354+
done
355+
}
356+
332357
exit 0
333358
}
334359

@@ -346,9 +371,14 @@ episodes_list() {
346371
process_hist_entry() {
347372
ep_list=$(episodes_list "$id")
348373
latest_ep=$(printf "%s\n" "$ep_list" | tail -n1)
374+
# Update episode count in title
349375
title=$(printf "%s\n" "$title" | sed "s|[0-9]\+ episodes|${latest_ep} episodes|")
350-
ep_no=$(printf "%s" "$ep_list" | sed -n "/^${ep_no}$/{n;p;}") 2>/dev/null
351-
[ -n "$ep_no" ] && printf "%s\t%s - episode %s\n" "$id" "$title" "$ep_no"
376+
next_ep=$(printf "%s" "$ep_list" | sed -n "/^${ep_no}$/{n;p;}")
377+
if [ -n "$next_ep" ]; then
378+
printf "%s\t%s - episode %s\n" "$id" "$title" "$next_ep"
379+
else
380+
printf "%s\t%s - no new episode\n" "$id" "$title"
381+
fi
352382
}
353383

354384
update_history() {
@@ -387,10 +417,6 @@ play_episode() {
387417
[ -z "$episode" ] && get_episode_url
388418
# shellcheck disable=SC2086
389419
case "$player_function" in
390-
debug)
391-
printf "All links:\n%s\nSelected link:\n" "$links"
392-
printf "%s\n" "$episode"
393-
;;
394420
mpv*)
395421
if [ "$no_detach" = 0 ]; then
396422
nohup $player_function $skip_flag --force-media-title="${allanime_title}Episode ${ep_no}" "$episode" $subs_flag $refr_flag >/dev/null 2>&1 &
@@ -583,16 +609,33 @@ esac
583609

584610
# searching
585611
case "$search" in
586-
history)
587-
anime_list=$(while read -r ep_no id title; do process_hist_entry & done <"$histfile")
588-
wait
612+
history)
613+
anime_list=$(while read -r ep_no id title; do
614+
process_hist_entry
615+
done <"$histfile")
589616
[ -z "$anime_list" ] && die "No unwatched series in history!"
617+
618+
# selection
590619
[ -z "${index##*[!0-9]*}" ] && id=$(printf "%s" "$anime_list" | nl -w 2 | sed 's/^[[:space:]]//' | nth "Select anime: " | cut -f1)
591620
[ -z "${index##*[!0-9]*}" ] || id=$(printf "%s" "$anime_list" | sed -n "${index}p" | cut -f1)
621+
592622
[ -z "$id" ] && exit 1
593-
title=$(printf "%s" "$anime_list" | grep "$id" | cut -f2 | sed 's/ - episode.*//')
623+
# get original entry from history file (correct source of truth)
624+
hist_entry=$(awk -F '\t' -v id="$id" '$2 == id {print; exit}' "$histfile")
625+
626+
title=$(printf "%s" "$hist_entry" | cut -f3)
627+
ep_no=$(printf "%s" "$hist_entry" | cut -f1)
628+
594629
ep_list=$(episodes_list "$id")
595-
ep_no=$(printf "%s" "$anime_list" | grep "$id" | cut -f2 | sed -nE 's/.*- episode (.+)$/\1/p')
630+
next_ep=$(printf "%s" "$ep_list" | sed -n "/^${ep_no}$/{n;p;}")
631+
if [ "$search" = "history" ] && [ -z "$next_ep" ]; then
632+
echo ""
633+
echo "Checking next episode for: $title"
634+
echo "-------------------------------------"
635+
time_until_next_ep "$title"
636+
exit 0
637+
fi
638+
596639
allanime_title="$(printf "%s" "$title" | cut -d'(' -f1 | tr -d '[:punct:]')"
597640
;;
598641
*)

0 commit comments

Comments
 (0)