From 91f8f682a8bcaaa589793f3fc12b88be1934ad84 Mon Sep 17 00:00:00 2001 From: Urban Wallasch Date: Sat, 24 Apr 2021 11:38:32 +0200 Subject: [PATCH] * Enhanced and improved kaoget.sh to support various download tools. --- kaoget.sh | 116 +++++++++++++++++++++++++++++++++--------------------- 1 file changed, 72 insertions(+), 44 deletions(-) diff --git a/kaoget.sh b/kaoget.sh index b461f8f..981c355 100755 --- a/kaoget.sh +++ b/kaoget.sh @@ -1,24 +1,65 @@ #!/bin/sh -USER="username" -PASS="password" - -if [ -r $HOME/.config/kaoconf ] ; then - . $HOME/.config/kaoconf - [ -n "$BWLDOWN" ] && BWLIM="--limit-rate=$BWLDOWN" +if [ -z "$1" ] ; then + echo "ERROR: missing mandatory argument" + echo "Usage: $(basename $0) listfile|URL [bandwidth_limit]" + exit 1; fi +conffile="$HOME/.config/kaoconf" +[ -r "$conffile" ] && . "$conffile" + URL_FILE="$1" shift -[ -n "$1" ] && BWLIM="--limit-rate=$1" +[ -n "$1" ] && BWLDOWN="$1" + +if [ -n "$GETTER" ] && ! command -v "$GETTER" >/dev/null ; then + echo "Invalid download utility set, trying to figure something out." + GETTER= +fi +[ -z "$GETTER" ] && GETTER=$(command -v wget) +[ -z "$GETTER" ] && GETTER=$(command -v curl) +[ -z "$GETTER" ] && GETTER=$(command -v aria2c) +[ -z "$GETTER" ] && GETTER=$(command -v wget2) +if [ -z "$GETTER" ] ; then + echo "ERROR: No suitable download utility found!" + exit 2 +fi -## Authentication -## 1st alternative: -GET_AUTH="&auth=$USER:$PASS" -## 2nd alternative: -POST_AUTH="--post-data=\'auth=$USER:$PASS\'" -## 3rd alternative: -HTTP_AUTH="--user=$USER --password=$PASS" +case $(basename $GETTER) in + wget ) + GENOPT="-c --retry-connrefused --auth-no-challenge" + OUTOPT="-O" + [ -n "$USER" ] && [ -n "$PASS" ] && HTTP_AUTH="--user=$USER --password=$PASS" + [ -n "$BWLDOWN" ] && BWLIM="--limit-rate=$BWLDOWN" + ;; + curl ) + GENOPT="-C - -L --retry-connrefused" # --progress-bar " + OUTOPT="-o" + [ -n "$USER" ] && [ -n "$PASS" ] && HTTP_AUTH="--user $USER:$PASS" + [ -n "$BWLDOWN" ] && BWLIM="--limit-rate $BWLDOWN" + ;; + aria2c ) + GENOPT="-c --http-auth-challenge=false --always-resume=false" + GENOPT="$GENOPT --console-log-level=error --file-allocation=none" + GENOPT="$GENOPT --download-result=full" + OUTOPT="-o" + [ -n "$USER" ] && [ -n "$PASS" ] && HTTP_AUTH="--http-user=$USER --http-passwd=$PASS" + [ -n "$BWLDOWN" ] && BWLIM="--max-download-limit=$BWLDOWN" + ;; + wget2 ) + # NOTE: apparently, -c does not work in conjunction with -O option + echo "*****************************************" + echo "WARNING: wget2 download resume is broken!" + echo "*****************************************" + GENOPT="-c --retry-connrefused --auth-no-challenge --progress=bar" + OUTOPT="-O" + [ -n "$USER" ] && [ -n "$PASS" ] && HTTP_AUTH="--user=$USER --password=$PASS" + # NOTE: GNU Wget2 1.99.1 gives "Unknown option 'limit-rate' + #[ -n "$BWLDOWN" ] && BWLIM="--limit-rate=$BWLDOWN" + ;; +esac +[ -n "$USER" ] && [ -n "$PASS" ] && GET_AUTH="&auth=$USER:$PASS" case "$URL_FILE" in https://* ) @@ -26,31 +67,23 @@ case "$URL_FILE" in TMP_FILE=$(mktemp kaoget_XXXX) case "$URL_FILE" in *"&q=1&m=0" ) - # If it appears to point to a generated directory listing, wget it. - echo "# If it appears to point to a generated directory listing, wget it." - wget -c --retry-connrefused \ - $POST_AUTH \ - $HTTP_AUTH --auth-no-challenge \ - -O "$TMP_FILE" \ - "$URL_FILE$GET_AUTH" + # URL appears to point to a generated listing, fetch it! + $GETTER $GENOPT $HTTP_AUTH $OUTOPT "$TMP_FILE" "$URL_FILE$GET_AUTH" ;; - *) - # Otherwise, store the URL verbatim. + * ) + # Otherwise, just store the URL verbatim. echo "echo $URL_FILE > $TMP_FILE" echo "$URL_FILE" > $TMP_FILE ;; esac - # Either way, use the new file as the source for download URLs. + # Either way, use the new file to read download URLs from. URL_FILE=$TMP_FILE ;; esac +sed -e 's/[[:space:]]*#.*// ; /^[[:space:]]*$/d' "$URL_FILE" | while read URL; do - case "$URL" in - "#"* ) - continue - ;; */dl.php*f=* ) NAME=${URL#*f=} NAME=${NAME%&*} @@ -64,25 +97,20 @@ while read URL; do continue ;; esac - NAME=$(echo $NAME | sed "s@+@ @g;s@%@\\\\x@g" | xargs -0 printf "%b") NAME=${NAME#*/} NAME=${NAME#*/} NAME=${NAME#*/} - - if [ -n "$NAME" ] ; then - mkdir -p "$(dirname "$NAME")" - PNAME="$NAME".part - mv "$NAME" "$PNAME" 2> /dev/null - wget -c --retry-connrefused \ - $POST_AUTH \ - $HTTP_AUTH --auth-no-challenge \ - $BWLIM \ - -O "$PNAME" \ - "$URL$GET_AUTH" \ - && mv "$PNAME" "$NAME" - fi - -done < "$URL_FILE" + [ -z "$NAME" ] && continue + mkdir -p "$(dirname "$NAME")" + PNAME="$NAME".part + mv "$NAME" "$PNAME" 2>/dev/null + echo "+------------------------------------------------------------------" + echo "| Starting Download:" + echo "| $NAME" + echo "+-------" + $GETTER $GENOPT $HTTP_AUTH $BWLIM $OUTOPT "$PNAME" "$URL$GET_AUTH" && + mv "$PNAME" "$NAME" +done [ -n "$TMP_FILE" ] && rm -f $TMP_FILE -- 2.30.2