diff --git a/src/install.sh b/src/install.sh index e8485377..fb97c55c 100644 --- a/src/install.sh +++ b/src/install.sh @@ -34,14 +34,19 @@ BASE=$(echo "$BASE" | sed -e 's/[^A-Za-z0-9._-]/_/g') TMP="$STORAGE/${BASE%.*}.tmp" rm -f "$TMP" -MSG="Downloading $BASE as boot image..." +MSG="Downloading $BASE ..." info "$MSG" && html "$MSG" +/run/progress.sh "$TMP" "Downloading $BASE ([P])..." & { wget "$BOOT" -O "$TMP" -q --no-check-certificate --show-progress "$PROGRESS"; rc=$?; } || : +fKill "progress.sh" + (( rc != 0 )) && error "Failed to download $BOOT , reason: $rc" && exit 60 [ ! -f "$TMP" ] && error "Failed to download $BOOT" && exit 61 +html "Download finished successfully..." + SIZE=$(stat -c%s "$TMP") if ((SIZE<100000)); then @@ -50,5 +55,4 @@ fi mv -f "$TMP" "$STORAGE/$BASE" -html "Download finished successfully..." return 0 diff --git a/src/progress.sh b/src/progress.sh new file mode 100644 index 00000000..1b88d9af --- /dev/null +++ b/src/progress.sh @@ -0,0 +1,29 @@ +#!/usr/bin/env bash +set -Eeuo pipefail + +escape () { + local s + s=${1//&/\&} + s=${s///\>} + s=${s//'"'/\"} + printf -- %s "$s" + return 0 +} + +file="$1" +body=$(escape "$2") +info="/run/shm/msg.html" + +if [[ "$body" == *"..." ]]; then + body="

${body/.../}

" +fi + +while true +do + if [ -f "$file" ]; then + size=$(stat -c '%s' "$file" | numfmt --to=si --suffix=B) + echo "${body//(\[P\])/($size)}"> "$info" + fi + sleep 1 +done