Ali Hatami Tajik
2 years ago
3 changed files with 253 additions and 0 deletions
@ -0,0 +1,42 @@ |
|||
#!/bin/env bash |
|||
|
|||
source ./src/scripts/utils/source.sh |
|||
source ./src/scripts/utils/progressbar.sh |
|||
|
|||
while getopts 'v' OPTION; do |
|||
case "$OPTION" in |
|||
v) |
|||
_V=1 |
|||
;; |
|||
?) |
|||
echo "usage: ./setup.sh [-v]" >&2 |
|||
exit 1 |
|||
;; |
|||
esac |
|||
done |
|||
|
|||
draw_progress_bar 0 |
|||
log '.: Setting up sono-os v0.1.0 :.' |
|||
|
|||
sleep 1 |
|||
draw_progress_bar 5 |
|||
log 'Installing scripts ...' |
|||
# TODO |
|||
sleep 1 |
|||
|
|||
draw_progress_bar 45 |
|||
log 'Installing config files ...' |
|||
# TODO |
|||
sleep 1 |
|||
|
|||
draw_progress_bar 65 |
|||
log 'Configuring Logger ...' |
|||
# TODO |
|||
sleep 1 |
|||
|
|||
draw_progress_bar 85 |
|||
log 'Copying rules to udev ...' |
|||
# TODO |
|||
sleep 1 |
|||
|
|||
draw_progress_bar 100 |
@ -0,0 +1,205 @@ |
|||
#!/bin/bash |
|||
# https://github.com/pollev/bash_progress_bar - See license at end of file |
|||
|
|||
# Usage: |
|||
# Source this script |
|||
# enable_trapping <- optional to clean up properly if user presses ctrl-c |
|||
# setup_scroll_area <- create empty progress bar |
|||
# draw_progress_bar 10 <- advance progress bar |
|||
# draw_progress_bar 40 <- advance progress bar |
|||
# block_progress_bar 45 <- turns the progress bar yellow to indicate some action is requested from the user |
|||
# draw_progress_bar 90 <- advance progress bar |
|||
# destroy_scroll_area <- remove progress bar |
|||
|
|||
# Constants |
|||
CODE_SAVE_CURSOR="\033[s" |
|||
CODE_RESTORE_CURSOR="\033[u" |
|||
CODE_CURSOR_IN_SCROLL_AREA="\033[1A" |
|||
COLOR_FG="\e[30m" |
|||
COLOR_BG="\e[42m" |
|||
COLOR_BG_BLOCKED="\e[43m" |
|||
RESTORE_FG="\e[39m" |
|||
RESTORE_BG="\e[49m" |
|||
|
|||
# Variables |
|||
PROGRESS_BLOCKED="false" |
|||
TRAPPING_ENABLED="false" |
|||
TRAP_SET="false" |
|||
|
|||
CURRENT_NR_LINES=0 |
|||
|
|||
setup_scroll_area() { |
|||
# If trapping is enabled, we will want to activate it whenever we setup the scroll area and remove it when we break the scroll area |
|||
if [ "$TRAPPING_ENABLED" = "true" ]; then |
|||
trap_on_interrupt |
|||
fi |
|||
|
|||
lines=$(tput lines) |
|||
CURRENT_NR_LINES=$lines |
|||
let lines=$lines-1 |
|||
# Scroll down a bit to avoid visual glitch when the screen area shrinks by one row |
|||
log -en "\n" |
|||
|
|||
# Save cursor |
|||
log -en "$CODE_SAVE_CURSOR" |
|||
# Set scroll region (this will place the cursor in the top left) |
|||
log -en "\033[0;${lines}r" |
|||
|
|||
# Restore cursor but ensure its inside the scrolling area |
|||
log -en "$CODE_RESTORE_CURSOR" |
|||
log -en "$CODE_CURSOR_IN_SCROLL_AREA" |
|||
|
|||
# Start empty progress bar |
|||
draw_progress_bar 0 |
|||
} |
|||
|
|||
destroy_scroll_area() { |
|||
lines=$(tput lines) |
|||
# Save cursor |
|||
log -en "$CODE_SAVE_CURSOR" |
|||
# Set scroll region (this will place the cursor in the top left) |
|||
log -en "\033[0;${lines}r" |
|||
|
|||
# Restore cursor but ensure its inside the scrolling area |
|||
log -en "$CODE_RESTORE_CURSOR" |
|||
log -en "$CODE_CURSOR_IN_SCROLL_AREA" |
|||
|
|||
# We are done so clear the scroll bar |
|||
clear_progress_bar |
|||
|
|||
# Scroll down a bit to avoid visual glitch when the screen area grows by one row |
|||
log -en "\n\n" |
|||
|
|||
# Once the scroll area is cleared, we want to remove any trap previously set. Otherwise, ctrl+c will exit our shell |
|||
if [ "$TRAP_SET" = "true" ]; then |
|||
trap - INT |
|||
fi |
|||
} |
|||
|
|||
draw_progress_bar() { |
|||
percentage=$1 |
|||
lines=$(tput lines) |
|||
let lines=$lines |
|||
|
|||
# Check if the window has been resized. If so, reset the scroll area |
|||
if [ "$lines" -ne "$CURRENT_NR_LINES" ]; then |
|||
setup_scroll_area |
|||
fi |
|||
|
|||
# Save cursor |
|||
log -en "$CODE_SAVE_CURSOR" |
|||
|
|||
# Move cursor position to last row |
|||
log -en "\033[${lines};0f" |
|||
|
|||
# Clear progress bar |
|||
tput el |
|||
|
|||
# Draw progress bar |
|||
PROGRESS_BLOCKED="false" |
|||
print_bar_text $percentage |
|||
|
|||
# Restore cursor position |
|||
log -en "$CODE_RESTORE_CURSOR" |
|||
} |
|||
|
|||
block_progress_bar() { |
|||
percentage=$1 |
|||
lines=$(tput lines) |
|||
let lines=$lines |
|||
# Save cursor |
|||
log -en "$CODE_SAVE_CURSOR" |
|||
|
|||
# Move cursor position to last row |
|||
log -en "\033[${lines};0f" |
|||
|
|||
# Clear progress bar |
|||
tput el |
|||
|
|||
# Draw progress bar |
|||
PROGRESS_BLOCKED="true" |
|||
print_bar_text $percentage |
|||
|
|||
# Restore cursor position |
|||
log -en "$CODE_RESTORE_CURSOR" |
|||
} |
|||
|
|||
clear_progress_bar() { |
|||
lines=$(tput lines) |
|||
let lines=$lines |
|||
# Save cursor |
|||
log -en "$CODE_SAVE_CURSOR" |
|||
|
|||
# Move cursor position to last row |
|||
log -en "\033[${lines};0f" |
|||
|
|||
# clear progress bar |
|||
tput el |
|||
|
|||
# Restore cursor position |
|||
log -en "$CODE_RESTORE_CURSOR" |
|||
} |
|||
|
|||
print_bar_text() { |
|||
local percentage=$1 |
|||
local cols=$(tput cols) |
|||
let bar_size=$cols-17 |
|||
|
|||
local color="${COLOR_FG}${COLOR_BG}" |
|||
if [ "$PROGRESS_BLOCKED" = "true" ]; then |
|||
color="${COLOR_FG}${COLOR_BG_BLOCKED}" |
|||
fi |
|||
|
|||
# Prepare progress bar |
|||
let complete_size=($bar_size*$percentage)/100 |
|||
let remainder_size=$bar_size-$complete_size |
|||
progress_bar=$(log -ne "["; log -en "${color}"; printf_new "#" $complete_size; log -en "${RESTORE_FG}${RESTORE_BG}"; printf_new "." $remainder_size; log -ne "]"); |
|||
|
|||
# Print progress bar |
|||
log -ne " Progress ${percentage}% ${progress_bar}" |
|||
} |
|||
|
|||
enable_trapping() { |
|||
TRAPPING_ENABLED="true" |
|||
} |
|||
|
|||
trap_on_interrupt() { |
|||
# If this function is called, we setup an interrupt handler to cleanup the progress bar |
|||
TRAP_SET="true" |
|||
trap cleanup_on_interrupt INT |
|||
} |
|||
|
|||
cleanup_on_interrupt() { |
|||
destroy_scroll_area |
|||
exit |
|||
} |
|||
|
|||
printf_new() { |
|||
str=$1 |
|||
num=$2 |
|||
v=$(printf "%-${num}s" "$str") |
|||
log -ne "${v// /$str}" |
|||
} |
|||
|
|||
|
|||
# SPDX-License-Identifier: MIT |
|||
# |
|||
# Copyright (c) 2018--2020 Polle Vanhoof |
|||
# |
|||
# Permission is hereby granted, free of charge, to any person obtaining a copy |
|||
# of this software and associated documentation files (the "Software"), to deal |
|||
# in the Software without restriction, including without limitation the rights |
|||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
|||
# copies of the Software, and to permit persons to whom the Software is |
|||
# furnished to do so, subject to the following conditions: |
|||
# |
|||
# The above copyright notice and this permission notice shall be included in all |
|||
# copies or substantial portions of the Software. |
|||
# |
|||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
|||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
|||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
|||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
|||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
|||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
|||
# SOFTWARE. |
Loading…
Reference in new issue