diff --git a/tools/arkmanager b/tools/arkmanager index 2fcdd9d..a1be1f4 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -158,6 +158,7 @@ else install_datadir="${install_datadir:-${install_bindir%/*}/share/arkmanager}" fi + #--------------------- # functions #--------------------- @@ -365,14 +366,24 @@ function runSteamCMDspinner(){ runSteamCMD "$@" return $? else + if [ -z "$progressDisplayType" ]; then + if stty <&1 >/dev/null 2>&1; then + progressDisplayType=spinner + else + progressDisplayType=dots + fi + fi runSteamCMD "$@" >/dev/null 2>&1 & local scpid=$! local pos=0 - local spinner=( '-' '/' '|' '\' ) + local spinner=( '\b-' '\b/' '\b|' '\b\\' ) + if [ "$progressDisplayType" == "dots" ]; then + spinner=( '.' ) + fi echo -n ' ... ' while kill -0 $scpid 2>/dev/null; do - printf "\b%c" "${spinner[$pos]}" - (( pos = (pos + 1) % 4 )) + echo -ne "${spinner[$pos]}" + (( pos = (pos + 1) % ${#spinner[*]} )) sleep 0.5 done echo -ne '\b \b' @@ -1153,10 +1164,9 @@ getModIds(){ doDownloadMod(){ local modid=$1 local modsrcdir="$steamcmdroot/steamapps/workshop/content/$mod_appid/$modid" - local moddldir="$steamcmdroot/steamapps/workshop/downloads/$mod_appid/$modid" - local dlsize=0 + local moddldir="$steamcmdroot/steamapps/workshop/downloads/$mod_appid" cd "$steamcmdroot" - rm "$steamcmdroot/steamapps/workshop/appworkshop_${mod_appid}.acf" 2>/dev/null + retries=10 while true; do echo -n "Downloading mod $modid" @@ -1166,14 +1176,14 @@ doDownloadMod(){ break else echo - echo "Checking mod $modid" - if [ ! -d "$moddldir" ]; then break; fi - local newsize="`du -s "$moddldir/.." | cut -f1`" - if [ $newsize -eq $dlsize ]; then - echo "Mod $modid update not progressing - aborting" - return 1 + if [ ! -d "$moddldir" ]; then + echo "Mod $modid download failed" + break + fi + (( retries = retries - 1 )) + if (( retries <= 0 )); then + echo "Retries exhausted" fi - dlsize=$newsize echo "Mod $modid not fully downloaded - retrying" fi done @@ -1705,6 +1715,12 @@ while true; do --verbose) verbose=1 ;; + --dots) + progressDisplayType=dots + ;; + --spinner) + progressDisplayType=spinner + ;; --*) options+=( "$1" ) ;;