From a8e95f9011bdc96df4b898e9c6ef9c60eb79f685 Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Tue, 9 Feb 2016 07:06:05 +1000 Subject: [PATCH 1/3] Fix mod updating re-downloading mod Give up on trying to prevent steamcmd from updating every other workshop item it has downloaded. Instead, give it a certain number of retries, and check if the app's workshop downloads directory exists. --- tools/arkmanager | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/tools/arkmanager b/tools/arkmanager index 2fcdd9d..295ea5c 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -1153,10 +1153,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 +1165,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 From c1a1dc7a1a5c0b5374e2d9e43d7b70e8f169f70b Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Tue, 9 Feb 2016 22:06:16 +1000 Subject: [PATCH 2/3] Add dots progress output --- tools/arkmanager | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/tools/arkmanager b/tools/arkmanager index 295ea5c..8c4467b 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -146,6 +146,7 @@ export TERM=${TERM:-dumb} arkmanagerLog="arkmanager.log" # here are logged the actions performed by arkmanager arkserverLog="arkserver.log" # here is logged the output of ShooterGameServer +progressDisplayType="${progressDisplayType:-spinner}" appid="${appid:-376030}" mod_appid="${mod_appid:-346110}" arkautorestartfile="${arkautorestartfile:-ShooterGame/Saved/.autorestart}" @@ -368,11 +369,14 @@ function runSteamCMDspinner(){ 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' @@ -1704,6 +1708,12 @@ while true; do --verbose) verbose=1 ;; + --dots) + progressDisplayType=dots + ;; + --spinner) + progressDisplayType=spinner + ;; --*) options+=( "$1" ) ;; From 65c9233bc6055b6b1f280257f8809447542e1d3b Mon Sep 17 00:00:00 2001 From: Ben Peddell Date: Tue, 9 Feb 2016 22:13:27 +1000 Subject: [PATCH 3/3] Default to displaying dots when stdout is not a terminal --- tools/arkmanager | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/tools/arkmanager b/tools/arkmanager index 8c4467b..a1be1f4 100755 --- a/tools/arkmanager +++ b/tools/arkmanager @@ -146,7 +146,6 @@ export TERM=${TERM:-dumb} arkmanagerLog="arkmanager.log" # here are logged the actions performed by arkmanager arkserverLog="arkserver.log" # here is logged the output of ShooterGameServer -progressDisplayType="${progressDisplayType:-spinner}" appid="${appid:-376030}" mod_appid="${mod_appid:-346110}" arkautorestartfile="${arkautorestartfile:-ShooterGame/Saved/.autorestart}" @@ -159,6 +158,7 @@ else install_datadir="${install_datadir:-${install_bindir%/*}/share/arkmanager}" fi + #--------------------- # functions #--------------------- @@ -366,6 +366,13 @@ 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