From 41cfdb41d6a7e0aa5bd96750ebabc90a2cf1caf9 Mon Sep 17 00:00:00 2001 From: ksyasuda Date: Thu, 16 Dec 2021 00:21:58 -0800 Subject: [PATCH] implement optional quality selection with -q flag by default the script searches for the best quality video with the -q flag, you will be prompted to choose betweeen 'best' and 'worst' quality --- ani-cli | 19 +++++++------ aniwrapper | 79 +++++++++++++++++++++++++++++++++++++++--------------- 2 files changed, 68 insertions(+), 30 deletions(-) diff --git a/ani-cli b/ani-cli index 555648c..7834888 100755 --- a/ani-cli +++ b/ani-cli @@ -141,14 +141,12 @@ get_links() { q } ') - printf '%s' "$video_url" - # TODO: implement quality selection - # tmp_url=$(printf '%s' "$video_url" | sed -n -E 's/(.*)\.([0-9]+\.[0-9]+)\.[0-9]+\.m3u8/\1.\2.m3u8/p') - # [ -z "$tmp_url" ] || video_url="$tmp_url" - # video_quality=$(get_video_quality "$embedded_video_url" "$video_url") - # # Replace the video with highest quality video - # printf '%s' "$video_url" | sed -n -E "s/(.*)\.m3u8/\1.$video_quality.m3u8/p" + tmp_url=$(printf '%s' "$video_url" | sed -n -E 's/(.*)\.([0-9]+\.[0-9]+)\.[0-9]+\.m3u8/\1.\2.m3u8/p') + [ -z "$tmp_url" ] || video_url="$tmp_url" + video_quality=$(get_video_quality "$embedded_video_url" "$video_url") + # Replace the video with highest quality video + printf '%s' "$video_url" | sed -n -E "s/(.*)\.m3u8/\1.$video_quality.m3u8/p" } dep_ch() { @@ -551,7 +549,8 @@ download_dir="." is_playlist=0 playlist_remove=0 playlist_add=0 -while getopts 'hd:Hpa:P:sv' OPT; do +quality=best +while getopts 'hd:Hpa:P:svq:' OPT; do case "$OPT" in h) help_text @@ -590,6 +589,10 @@ while getopts 'hd:Hpa:P:sv' OPT; do v) VERBOSE=1 ;; + q) + quality="$OPTARG" + log "passed in quality: $quality" + ;; *) printf "%s\n" "Invalid option" exit 1 diff --git a/aniwrapper b/aniwrapper index 031dee0..b7fab1e 100755 --- a/aniwrapper +++ b/aniwrapper @@ -1,36 +1,39 @@ #!/usr/bin/env bash -[ -z "$XDG_CONFIG_HOME" ] && XDG_CONFIG_HOME="$HOME/.config" +set -Eeuo pipefail -CMD=/usr/bin/ani-cli +############# +# Globals # +############# +[ -z "$XDG_CONFIG_HOME" ] && XDG_CONFIG_HOME="$HOME/.config" +CMD="/usr/bin/ani-cli" DEFAULT_DOWNLOAD="$HOME/Videos/sauce" CFG_DIR="$XDG_CONFIG_HOME/aniwrapper" DEFAULT_PLAYLIST="$CFG_DIR/playlists/playlist.txt" CFG_FILE="meh.rasi" +QUALITIES="1. best|2. worst" +QUALITY="best" +CHECK_QUALITY=0 VERBOSE=0 -while getopts 'vh' OPT; do - case "$OPT" in - h) - help_text - ;; - v) - VERBOSE=1 - ;; - *) - log "Invalid option" - exit 1 - ;; - esac -done - quit="6. Quit" options="1. Stream|2. Download|3. Continue|4. Playlist|5. Sync History|$quit" -[ "$VERBOSE" -eq 1 ] && printf "%s\n" "CONFIG DIR: $CFG_DIR" -choice=$(echo "${options[@]}" | rofi -dmenu -sep '|' \ - -config "$CFG_DIR/$CFG_FILE" -l 6 -i -p "Aniwrapper") +############# +# Functions # +############# +get_quality() { + selection=$(rofi -dmenu -config "$CFG_DIR/$CFG_FILE" \ + -l 1 -p "Choose video quality:" -sep '|' <<< "$QUALITIES") + QUALITY=$(awk '{print $2}' <<< "$selection") + log "selected quality: $QUALITY" + if [[ "$QUALITY" == 'best' || "$QUALITY" == 'worst' ]]; then + log "QUALITY: $QUALITY" + else + seppuku "Something went wrong getting the quality: $QUALITY... exiting" + fi +} seppuku() { printf "%s\n" "$*" @@ -43,10 +46,15 @@ quit() { } run() { + if [[ "$CHECK_QUALITY" -eq 1 ]]; then + get_quality + else + log "CHECK_QUALITY disabled... using default: $QUALITY" + fi if [[ "$VERBOSE" -eq 0 ]]; then - "$CMD" "$*" + "$CMD" -q "$QUALITY" "$*" else - "$CMD" -v "$*" + "$CMD" -q "$QUALITY" -v "$*" fi } @@ -56,6 +64,33 @@ log() { fi } +######## +# Main # +######## +while getopts 'vhq' OPT; do + case "$OPT" in + h) + help_text + ;; + v) + VERBOSE=1 + ;; + q) + CHECK_QUALITY=1 + log "Quality prompt enabled" + ;; + *) + log "Invalid option" + exit 1 + ;; + esac +done + +[ "$VERBOSE" -eq 1 ] && printf "%s\n" "CONFIG DIR: $CFG_DIR" + +choice=$(echo "${options[@]}" | rofi -dmenu -sep '|' \ + -config "$CFG_DIR/$CFG_FILE" -l 6 -i -p "Aniwrapper") + [ "$choice" == "$quit" ] && quit selection=$(printf "%s\n" "$choice" | awk '{ print $1 }')