From 2f18bb39ee57b0f8c7540e84dc600903da2de074 Mon Sep 17 00:00:00 2001 From: Astounds Date: Wed, 5 Nov 2025 21:21:13 -0500 Subject: [PATCH] apply DRY and enhance progress in update.sh - Centralize constants and remove code duplication - Implement dynamic progress bar with real file count - Remove artificial delays for improved performance --- hyperterm/core/update.sh | 142 +++++++++++++++++++++---------------- hyperterm/hyperterm.sha512 | 2 +- 2 files changed, 82 insertions(+), 62 deletions(-) diff --git a/hyperterm/core/update.sh b/hyperterm/core/update.sh index a914901..8a1c3b0 100644 --- a/hyperterm/core/update.sh +++ b/hyperterm/core/update.sh @@ -1,5 +1,13 @@ #!/bin/bash # shellcheck source=/dev/null + +# Constants +readonly HYPERTERM_DIR="$HOME/.hyperterm" +readonly URL_1="https://git.fridu.us/heckyel/hyperterm" +readonly URL_2="https://c.fridu.us/software/hyperterm.git" +readonly REPO_ERROR_MSG_ES="El repositorio no está disponible o no hay conexión a Internet." +readonly REPO_ERROR_MSG_EN="The repository is unavailable or there's no internet connection." + #---------------------------- # Check if a command exists #---------------------------- @@ -15,22 +23,16 @@ function _url_exists() { } #------------------ -# Set working URLs +# Get working URLs #------------------ -function _urls() { - URL_1="https://git.fridu.us/heckyel/hyperterm" - URL_2="https://c.fridu.us/software/hyperterm.git" - +function _get_repo_urls() { if [ "$(_url_exists "$URL_1")" -eq 200 ]; then - URL="$URL_1" - RAW="$URL_1/raw/branch/master" + echo "$URL_1|$URL_1/raw/branch/master" elif [ "$(_url_exists "$URL_2")" -eq 200 ]; then - URL="$URL_2" - RAW="$URL_2/plain" + echo "$URL_2|$URL_2/plain" else - msg_err "El repositorio no está disponible o no hay conexión a Internet." \ - "The repository is unavailable or there's no internet connection." - exit 1 + msg_err "$REPO_ERROR_MSG_ES" "$REPO_ERROR_MSG_EN" + return 1 fi } @@ -40,44 +42,66 @@ function _urls() { function download_file() { local remote_path=$1 local local_path=$2 - mkdir -p "$(dirname "$local_path")" - curl -Ls "$RAW/$remote_path" -o "$local_path" + local repo_info + local raw_url + + repo_info=$(_get_repo_urls) || return 1 + raw_url="${repo_info#*|}" + + install -d "$(dirname "$local_path")" + curl -Ls "$raw_url/$remote_path" -o "$local_path" } -#---------------------------- +#-------------------------------- # Download _custom.sh if missing -#---------------------------- +#-------------------------------- function ifexists_custom() { - _urls - local custom_path="$HOME/.hyperterm/_custom.sh" + local custom_path="$HYPERTERM_DIR/_custom.sh" if [ ! -e "$custom_path" ]; then download_file "hyperterm/_custom.sh" "$custom_path" fi } -#---------------------------- +#------------------- # Show progress bar -#---------------------------- +#------------------- function show_progress() { - case $1 in - 1) printf '%s\r' "##### (33%)" ;; - 2) printf '%s\r' "############# (66%)" ;; - 3) printf '%s\n' "####################### (100%) done!" ;; - esac + local current=$1 + local total=$2 + local message=${3:-"Procesando"} + + if [[ $total -eq 0 ]]; then + printf '\r%s... ' "$message" + return + fi + + local percentage=$((current * 100 / total)) + local filled=$((percentage / 5)) # 20 chars max + local empty=$((20 - filled)) + + printf '\r[%*s%*s] %d%% (%d/%d) %s' \ + "$filled" "$(printf '#%.0s' $(seq 1 $filled))" \ + "$empty" "" \ + "$percentage" "$current" "$total" "$message" + + [[ $current -eq $total ]] && printf '\n' } -#---------------------------- +#------------------------------ # Update HyperTerm environment -#---------------------------- +#------------------------------ function updbashrc() { - _urls + local repo_info + local url + repo_info=$(_get_repo_urls) || return 1 + url="${repo_info%|*}" # Step 1: Download checksum and _custom.sh - download_file "hyperterm/hyperterm.sha512" "$HOME/.hyperterm/hyperterm.sha512" + download_file "hyperterm/hyperterm.sha512" "$HYPERTERM_DIR/hyperterm.sha512" ifexists_custom # Step 2: Verify checksum - (cd "$HOME/.hyperterm/" && sha512sum -c hyperterm.sha512 &> /dev/null) + (cd "$HYPERTERM_DIR" && sha512sum -c hyperterm.sha512 &> /dev/null) local _integer=$? if [[ "$_integer" -eq 0 ]]; then @@ -99,21 +123,22 @@ function updbashrc() { "Get your copy at: https://c.fridu.us/software/hyperterm.git" printf '%b\n' "$RESET" else - msg "Fallo de checksum. Re-descargando archivos desde: $URL" \ - "Checksum failed. Re-downloading files from: $URL" - show_progress 1 - sleep 1 + msg "Fallo de checksum. Re-descargando archivos desde: $url" \ + "Checksum failed. Re-downloading files from: $url" + + # Count total files to download + local total_files + total_files=$(wc -l < "$HYPERTERM_DIR/hyperterm.sha512") + local current_file=0 # Step 3: Download all files from hyperterm.sha512 like list while IFS= read -r line; do file=$(echo "$line" | cut -d' ' -f2) file=${file#./} - download_file "hyperterm/$file" "$HOME/.hyperterm/$file" - done < "$HOME/.hyperterm/hyperterm.sha512" - show_progress 2 - sleep 1 - - show_progress 3 + ((current_file++)) + show_progress "$current_file" "$total_files" "Descargando $file" + download_file "hyperterm/$file" "$HYPERTERM_DIR/$file" + done < "$HYPERTERM_DIR/hyperterm.sha512" _colors_bash "$@" source "$HOME/.bashrc" fi @@ -123,25 +148,20 @@ function updbashrc() { # Overwrite _custom.sh interactively #------------------------------------ function updbashrc_custom() { - _urls - if [ "$(_url_exists "$URL")" -eq 200 ]; then - while true; do - question=$(msg "¿Estás seguro de sobre-escribir _custom.sh? [s/N]: " \ - "Are you sure to overwrite _custom.sh? [y/N]: ") - read -r -p "$question" input - case "$input" in - [yY]|[sS]) - download_file "hyperterm/_custom.sh" "$HOME/.hyperterm/_custom.sh" - source "$HOME/.bashrc" - break ;; - [nN]|"") break ;; - *) msg "Por favor responde sí o no." \ - "Please answer yes or no." ;; - esac - done - else - msg_err "El repositorio no está disponible o no hay conexión a Internet." \ - "The repository is unavailable or there's no internet connection." - return 1 - fi + _get_repo_urls > /dev/null || return 1 + + while true; do + question=$(msg "¿Estás seguro de sobre-escribir _custom.sh? [s/N]: " \ + "Are you sure to overwrite _custom.sh? [y/N]: ") + read -r -p "$question" input + case "$input" in + [yY]|[sS]) + download_file "hyperterm/_custom.sh" "$HYPERTERM_DIR/_custom.sh" + source "$HOME/.bashrc" + break ;; + [nN]|"") break ;; + *) msg "Por favor responde sí o no." \ + "Please answer yes or no." ;; + esac + done } diff --git a/hyperterm/hyperterm.sha512 b/hyperterm/hyperterm.sha512 index 497eecd..b6e7c4b 100644 --- a/hyperterm/hyperterm.sha512 +++ b/hyperterm/hyperterm.sha512 @@ -1,6 +1,6 @@ cdfe049ec07f02a1893cda29c13085d06709e09a30b0c2e1111585278315f03139d61080c883cb3fd87f2bf64e05d9b5e5eaaad84c97ced890d83c73eb399fcb ../.bash_profile f363606f41a2c2c8f1cc44110c64fe23b1c8feb4c788ee006222db0f5c7a3adeac2b0948626b313adc985e9b8d303a0b9ce1c5ba42746810accb54efddcd4b84 ./hyperterm.sh -b760a908a3f6222b974abc1f7464bde0f5427f120f1e7ef1c6d97ae61769e552ef3b5cb88e193e955da72a592f07eadb812413dd50a691cd3dbb33e3da581ea6 ./core/update.sh +4abefb655c995c0a8d97fd7d92ad1eb2da22c5ba4684e2bf4b2b86b2eec24b764f77675f50f8ff8989f78fdb9c38ecc7dda3554f098780e9fe922343b90bacc9 ./core/update.sh 1cfba599047d84a17ff92b695ebf527a505a30acc9ec21a2b9f410a7ea6dde4b23b5cf62e557d82f2fe9a8980649942424b879ca53baae4d4cb3057681baa7b6 ./core/colors.sh c5ae12ee08361d1264fde5c73868fd0a80fd8810ac4e614cc333335679ad68d629d9bb88a04d27a8002d62f454105f1168df9ea63c7300c9272380b6d5311278 ./core/git.sh f3e00b2aa8ab9f3ab44570adaa2520408ed66fd00f551654d60b64a4be3546ec781b7efa39bcd774937e654b6ffb4c7af3f21eeb36caf9c01f82f85cf28e2b4d ./core/languages.sh