commit f95f16a36f86bf59a82167bb3870106587081a9c Author: CoolnsX Date: Wed Jun 23 16:55:41 2021 +0530 Initialization. diff --git a/ani-cli b/ani-cli new file mode 100755 index 0000000..20d8d5d --- /dev/null +++ b/ani-cli @@ -0,0 +1,246 @@ +#!/bin/sh + +# dependencies: sed curl vlc + +function jumpto () +{ + label=$1 + cmd=$(sed -n "/$label:/{:a;n;p;ba};" $0 | grep -v ':$') + eval "$cmd" + exit +} + +start: + +prog="ani-cli" + +c_red="\033[1;31m" +c_green="\033[1;32m" +c_yellow="\033[1;33m" +c_blue="\033[1;34m" +c_magenta="\033[1;35m" +c_cyan="\033[1;36m" +c_reset="\033[0m" + +help_text () { + while IFS= read line; do + printf "%s\n" "$line" + done <<-EOF + USAGE: $prog + -h show this help text + -d download episode + EOF +} + + +die () { + printf "$c_red%s$c_reset\n" "$*" >&2 + exit 1 +} + +search_anime () { + # get anime name along with its id + search=$1 + titlepattern=' + s_^[[:space:]]*/{ + s/.*href="([^"]*)".*/\1/p + q + }') + + curl -s "$dpage_url" | + sed -n -E ' + /^[[:space:]]*href="([^"]*\.mp4)".*/{ + s/^[[:space:]]*href="([^"]*\.mp4)".*/\1/p + q + } + ' +} + +dep_ch () { + for dep; do + if ! command -v "$dep" >/dev/null ; then + die "Program \"$dep\" not found. Please install it." + fi + done +} + +dep_ch "vlc" "curl" "sed" + +##################### +## Anime selection ## +##################### + +is_download=0 + +while getopts 'hd' OPT; do + case $OPT in + h) + help_text + exit 0 + ;; + d) + is_download=1 + ;; + esac +done + +shift $((OPTIND - 1)) + +#[ -z "$*" ] && { help_text ; die "Search query not provided"; } + +printf "${c_blue}Enter Anime name:${c_magenta} " + +read query + +search_results=$(search_anime "$query") + +[ -z "$search_results" ] && die "No search results found" + +# Creating menu + +menu_format_string='[%d] %s\n' +menu_format_string_c1="$c_blue[$c_cyan%d$c_blue] $c_reset%s\n" +menu_format_string_c2="$c_blue[$c_cyan%d$c_blue] $c_yellow%s$c_reset\n" + +count=1 +while read anime_id; do + # alternating colors for menu + [ $((count % 2)) -eq 0 ] && + menu_format_string=$menu_format_string_c1 || + menu_format_string=$menu_format_string_c2 + + printf "$menu_format_string" "$count" "$anime_id" + count=$((count+1)) +done </dev/null || die "Invalid number entered" + +# Select respective anime_id +count=1 +while read anime_id; do + if [ $count -eq $choice ]; then + selection_id=$anime_id + break + fi + count=$((count+1)) +done </dev/null || die "Invalid number entered" + + +while :; do + + if [ $ep_choice -lt 1 ] || [ $ep_choice -gt $last_ep_number ]; then + die "Episode out of range" + fi + + printf "Getting data for episode %d\n" $ep_choice + + video_url=$(get_links "$selection_id" "$ep_choice") + + case $video_url in + *streamtape*) + # If direct download not available then scrape streamtape.com + BROWSER=${BROWSER:-firefox} + printf "scraping streamtape.com\n" + video_url=$(curl -s "$video_url" | sed -n -E ' + /^