This commit is contained in:
CanbiZ 2025-03-27 09:10:29 +01:00
parent 6dbfa24bda
commit 456c67eea4
2 changed files with 29 additions and 27 deletions

View File

@ -21,7 +21,6 @@ catch_errors
function update_script() { function update_script() {
header_info header_info
msg_info "Updating Alpine Packages" msg_info "Updating Alpine Packages"
apk update apk update
apk upgrade apk upgrade

View File

@ -86,15 +86,21 @@ error_handler() {
} }
# This function displays an informational message with logging support. # This function displays an informational message with logging support.
declare -A MSG_INFO_SHOWN
SPINNER_ACTIVE=0
SPINNER_PID=""
trap 'stop_spinner' EXIT INT TERM HUP
start_spinner() { start_spinner() {
local msg="$1" local msg="$1"
local frames=('⠋' '⠙' '⠹' '⠸' '⠼' '⠴' '⠦' '⠧' '⠇' '⠏') local frames=(⠋ ⠙ ⠹ ⠸ ⠼ ⠴ ⠦ ⠧ ⠇ ⠏)
local spin_i=0 local spin_i=0
local interval=0.1 local interval=0.1
{ {
while [ "${SPINNER_ACTIVE:-0}" -eq 1 ]; do while [[ "$SPINNER_ACTIVE" -eq 1 ]]; do
printf "\r\e[2K${frames[spin_i]} ${YW}%b${CL}" "$msg" >&2 printf "\r\e[2K%s %b" "${frames[spin_i]}" "${YW}${msg}${CL}" >&2
spin_i=$(((spin_i + 1) % ${#frames[@]})) spin_i=$(((spin_i + 1) % ${#frames[@]}))
sleep "$interval" sleep "$interval"
done done
@ -105,33 +111,33 @@ start_spinner() {
} }
stop_spinner() { stop_spinner() {
if [ -n "${SPINNER_PID:-}" ]; then if [[ -n "$SPINNER_PID" ]] && kill -0 "$SPINNER_PID" 2>/dev/null; then
if ps -p "$SPINNER_PID" >/dev/null 2>&1; then kill "$SPINNER_PID" 2>/dev/null
kill "$SPINNER_PID" >/dev/null 2>&1
sleep 0.1 sleep 0.1
if ps -p "$SPINNER_PID" >/dev/null 2>&1; then kill -0 "$SPINNER_PID" 2>/dev/null && kill -9 "$SPINNER_PID" 2>/dev/null
kill -9 "$SPINNER_PID" >/dev/null 2>&1
fi
fi
wait "$SPINNER_PID" 2>/dev/null || true wait "$SPINNER_PID" 2>/dev/null || true
unset SPINNER_PID
fi fi
SPINNER_ACTIVE=0 SPINNER_ACTIVE=0
unset SPINNER_PID
} }
MSG_INFO_SHOWN_LIST="" spinner_guard() {
if [[ "$SPINNER_ACTIVE" -eq 1 ]] && [[ -n "$SPINNER_PID" ]]; then
kill "$SPINNER_PID" 2>/dev/null
wait "$SPINNER_PID" 2>/dev/null || true
SPINNER_ACTIVE=0
unset SPINNER_PID
fi
}
msg_info() { msg_info() {
local msg="$1" local msg="$1"
if echo "$MSG_INFO_SHOWN_LIST" | grep -Fqx "$msg"; then [[ -n "${MSG_INFO_SHOWN["$msg"]+x}" ]] && return
return MSG_INFO_SHOWN["$msg"]=1
fi
MSG_INFO_SHOWN_LIST="${MSG_INFO_SHOWN_LIST}${msg}"$'\n'
if [ "${SPINNER_ACTIVE:-0}" -eq 1 ]; then [[ "$SPINNER_ACTIVE" -eq 1 ]] && return
return
fi
spinner_guard
SPINNER_ACTIVE=1 SPINNER_ACTIVE=1
start_spinner "$msg" start_spinner "$msg"
} }
@ -139,17 +145,14 @@ msg_info() {
msg_ok() { msg_ok() {
local msg="$1" local msg="$1"
stop_spinner stop_spinner
printf "\e[?25h\r\e[2K${CM}${GN}%b${CL}\n" "$msg" >&2 printf "\e[?25h\r\e[2K%s %b\n" "${CM}" "${GN}${msg}${CL}" >&2
unset SPINNER_PID unset MSG_INFO_SHOWN["$msg"]
SPINNER_ACTIVE=0
MSG_INFO_SHOWN_LIST=$(echo "$MSG_INFO_SHOWN_LIST" | grep -Fvx "$msg")
} }
msg_error() { msg_error() {
stop_spinner stop_spinner
local msg="$1" local msg="$1"
printf "\r\e[2K${CROSS}${RD}%b${CL}\n" "$msg" >&2 printf "\r\e[2K%s %b\n" "${CROSS}" "${RD}${msg}${CL}" >&2
log_message "ERROR" "$msg" log_message "ERROR" "$msg"
} }