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() {
header_info
msg_info "Updating Alpine Packages"
apk update
apk upgrade

View File

@ -86,15 +86,21 @@ error_handler() {
}
# 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() {
local msg="$1"
local frames=('⠋' '⠙' '⠹' '⠸' '⠼' '⠴' '⠦' '⠧' '⠇' '⠏')
local frames=(⠋ ⠙ ⠹ ⠸ ⠼ ⠴ ⠦ ⠧ ⠇ ⠏)
local spin_i=0
local interval=0.1
{
while [ "${SPINNER_ACTIVE:-0}" -eq 1 ]; do
printf "\r\e[2K${frames[spin_i]} ${YW}%b${CL}" "$msg" >&2
while [[ "$SPINNER_ACTIVE" -eq 1 ]]; do
printf "\r\e[2K%s %b" "${frames[spin_i]}" "${YW}${msg}${CL}" >&2
spin_i=$(((spin_i + 1) % ${#frames[@]}))
sleep "$interval"
done
@ -105,33 +111,33 @@ start_spinner() {
}
stop_spinner() {
if [ -n "${SPINNER_PID:-}" ]; then
if ps -p "$SPINNER_PID" >/dev/null 2>&1; then
kill "$SPINNER_PID" >/dev/null 2>&1
if [[ -n "$SPINNER_PID" ]] && kill -0 "$SPINNER_PID" 2>/dev/null; then
kill "$SPINNER_PID" 2>/dev/null
sleep 0.1
if ps -p "$SPINNER_PID" >/dev/null 2>&1; then
kill -9 "$SPINNER_PID" >/dev/null 2>&1
fi
fi
kill -0 "$SPINNER_PID" 2>/dev/null && kill -9 "$SPINNER_PID" 2>/dev/null
wait "$SPINNER_PID" 2>/dev/null || true
unset SPINNER_PID
fi
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() {
local msg="$1"
if echo "$MSG_INFO_SHOWN_LIST" | grep -Fqx "$msg"; then
return
fi
MSG_INFO_SHOWN_LIST="${MSG_INFO_SHOWN_LIST}${msg}"$'\n'
[[ -n "${MSG_INFO_SHOWN["$msg"]+x}" ]] && return
MSG_INFO_SHOWN["$msg"]=1
if [ "${SPINNER_ACTIVE:-0}" -eq 1 ]; then
return
fi
[[ "$SPINNER_ACTIVE" -eq 1 ]] && return
spinner_guard
SPINNER_ACTIVE=1
start_spinner "$msg"
}
@ -139,17 +145,14 @@ msg_info() {
msg_ok() {
local msg="$1"
stop_spinner
printf "\e[?25h\r\e[2K${CM}${GN}%b${CL}\n" "$msg" >&2
unset SPINNER_PID
SPINNER_ACTIVE=0
MSG_INFO_SHOWN_LIST=$(echo "$MSG_INFO_SHOWN_LIST" | grep -Fvx "$msg")
printf "\e[?25h\r\e[2K%s %b\n" "${CM}" "${GN}${msg}${CL}" >&2
unset MSG_INFO_SHOWN["$msg"]
}
msg_error() {
stop_spinner
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"
}