* Enhanced and improved kaoget.sh to support various download tools.
authorUrban Wallasch <urban.wallasch@freenet.de>
Sat, 24 Apr 2021 09:38:32 +0000 (11:38 +0200)
committerUrban Wallasch <urban.wallasch@freenet.de>
Sat, 24 Apr 2021 09:38:32 +0000 (11:38 +0200)
kaoget.sh

index b461f8f0ccbd2bb62e7ba9410ab759504850cf40..981c355490b0ac9ae12e8fd86aa69ab0187ae5d4 100755 (executable)
--- 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