[ feature request ] flexible update and command line argument
here is a feature that's handle update from pakage manager or remote source [github repos] Hopefully it has some useful features for bashtop. On branch contrib modified: bashtoppull/96/head
parent
82f10faccd
commit
f74ef85165
117
bashtop
117
bashtop
|
@ -125,6 +125,12 @@ menu_quit=(
|
||||||
"│─┼┐│ │ │ │ "
|
"│─┼┐│ │ │ │ "
|
||||||
"└─┘└└─┘ ┴ ┴ ")
|
"└─┘└└─┘ ┴ ┴ ")
|
||||||
|
|
||||||
|
menu_update=(
|
||||||
|
"┬ ┬┌─┐┌┬┐┌─┐┌┬┐┌─┐"
|
||||||
|
"│ │├─┘ ││├─┤ │ ├┤ "
|
||||||
|
"└─┘┴ ─┴┘┴ ┴ ┴ └─┘"
|
||||||
|
)
|
||||||
|
|
||||||
menu_options_selected=(
|
menu_options_selected=(
|
||||||
"╔═╗╔═╗╔╦╗╦╔═╗╔╗╔╔═╗"
|
"╔═╗╔═╗╔╦╗╦╔═╗╔╗╔╔═╗"
|
||||||
"║ ║╠═╝ ║ ║║ ║║║║╚═╗"
|
"║ ║╠═╝ ║ ║║ ║║║║╚═╗"
|
||||||
|
@ -138,6 +144,13 @@ menu_quit_selected=(
|
||||||
"║═╬╗║ ║ ║ ║ "
|
"║═╬╗║ ║ ║ ║ "
|
||||||
"╚═╝╚╚═╝ ╩ ╩ ")
|
"╚═╝╚╚═╝ ╩ ╩ ")
|
||||||
|
|
||||||
|
menu_update_selected=(
|
||||||
|
"╦ ╦╔═╗╔╦╗╔═╗╔╦╗╔═╗"
|
||||||
|
"║ ║╠═╝ ║║╠═╣ ║ ║╣ "
|
||||||
|
"╚═╝╩ ═╩╝╩ ╩ ╩ ╚═╝"
|
||||||
|
)
|
||||||
|
|
||||||
|
declare -r remote_src="https://raw.githubusercontent.com/aristocratos/bashtop/master/bashtop"
|
||||||
declare -A cpu mem swap proc net box theme disks
|
declare -A cpu mem swap proc net box theme disks
|
||||||
declare -a cpu_usage cpu_graph_a cpu_graph_b color_meter color_temp_graph color_cpu color_cpu_graph cpu_history color_mem_graph color_swap_graph
|
declare -a cpu_usage cpu_graph_a cpu_graph_b color_meter color_temp_graph color_cpu color_cpu_graph cpu_history color_mem_graph color_swap_graph
|
||||||
declare -a mem_history swap_history net_history_download net_history_upload mem_graph swap_graph proc_array download_graph upload_graph trace_array
|
declare -a mem_history swap_history net_history_download net_history_upload mem_graph swap_graph proc_array download_graph upload_graph trace_array
|
||||||
|
@ -151,6 +164,8 @@ declare time_left timestamp_start timestamp_end timestamp_input_start timestamp_
|
||||||
declare no_epoch proc_det proc_misc2 sleeping=0 detail_mem_graph proc_det2 proc_out curled git_version has_iostat
|
declare no_epoch proc_det proc_misc2 sleeping=0 detail_mem_graph proc_det2 proc_out curled git_version has_iostat
|
||||||
declare esc_character tab backspace sleepy late_update skip_process_draw winches quitting theme_int notifier
|
declare esc_character tab backspace sleepy late_update skip_process_draw winches quitting theme_int notifier
|
||||||
declare -a disks_free disks_total disks_name disks_free_percent disks_io saved_key themes
|
declare -a disks_free disks_total disks_name disks_free_percent disks_io saved_key themes
|
||||||
|
declare -a menus=("options" "help" "quit") color
|
||||||
|
|
||||||
printf -v esc_character "\u1b"
|
printf -v esc_character "\u1b"
|
||||||
printf -v tab "\u09"
|
printf -v tab "\u09"
|
||||||
printf -v backspace "\u7F"
|
printf -v backspace "\u7F"
|
||||||
|
@ -207,6 +222,12 @@ else
|
||||||
}
|
}
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
has_command () { #? check the avaibility of the command
|
||||||
|
command -v $1 > /dev/null
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
init_() { #? Collect needed information and set options before startig main loop
|
init_() { #? Collect needed information and set options before startig main loop
|
||||||
local i
|
local i
|
||||||
#* Set terminal options, save and clear screen
|
#* Set terminal options, save and clear screen
|
||||||
|
@ -262,7 +283,7 @@ init_() { #? Collect needed information and set options before startig main loop
|
||||||
|
|
||||||
#* Check if newer version of bashtop is available from https://github.com/aristocratos/bashtop
|
#* Check if newer version of bashtop is available from https://github.com/aristocratos/bashtop
|
||||||
if [[ -n $curled ]]; then
|
if [[ -n $curled ]]; then
|
||||||
if ! get_value -v git_version -ss "$(curl -m 2 --raw -r 0-3500 https://raw.githubusercontent.com/aristocratos/bashtop/master/bashtop 2>/dev/null)" -k "version=" -r "[^0-9.]"; then unset git_version; fi
|
if ! get_value -v git_version -ss "$(curl -m 2 --raw -r 0-3500 ${remote_src} 2>/dev/null)" -k "version=" -r "[^0-9.]"; then unset git_version; fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
#* Draw banner to banner array and notify about new updates
|
#* Draw banner to banner array and notify about new updates
|
||||||
|
@ -284,6 +305,7 @@ init_() { #? Collect needed information and set options before startig main loop
|
||||||
done
|
done
|
||||||
print -v banner_out[y] -rs -fg cc -b "← esc"
|
print -v banner_out[y] -rs -fg cc -b "← esc"
|
||||||
if [[ -n $git_version && $git_version != "$version" ]]; then
|
if [[ -n $git_version && $git_version != "$version" ]]; then
|
||||||
|
menus+=("update")
|
||||||
print -v banner_out[y] -rs -fg "#80cc80" -r 15 "[${git_version} available!]" -r $((9-${#git_version}))
|
print -v banner_out[y] -rs -fg "#80cc80" -r 15 "[${git_version} available!]" -r $((9-${#git_version}))
|
||||||
if [[ -n $notifier ]]; then
|
if [[ -n $notifier ]]; then
|
||||||
notify-send -u normal\
|
notify-send -u normal\
|
||||||
|
@ -450,6 +472,96 @@ quit_() { #? Clean exit
|
||||||
exit 0
|
exit 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
update_ () {
|
||||||
|
|
||||||
|
local -a root_dirs=("/bin/" "/usr/bin/")
|
||||||
|
local btop_exec=${remote_src##*/}
|
||||||
|
local btop_path
|
||||||
|
|
||||||
|
for xbin in ${root_dirs[@]} ; do
|
||||||
|
if [[ -x ${xbin}${btop_exec} ]] ; then
|
||||||
|
btop_path=${xbin}${btop_exec}
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# the update will only work if bashtop has been installed in the system.
|
||||||
|
if [[ -z ${btop_path} ]] ; then
|
||||||
|
if [[ -n ${notifier} ]] ; then notify-send "install bashtop in your system first" ;fi
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
declare -A pkg_distro_manager=(
|
||||||
|
[apt-get]="--only-upgrade install bashtop -y" # debian based
|
||||||
|
[dnf]="upgrade bashtop" # fedora
|
||||||
|
[yum]="update bashtop" # redhat ?
|
||||||
|
[zypper]="update bashtop" # open suse
|
||||||
|
[pacman]="-S bashtop" # arch
|
||||||
|
)
|
||||||
|
|
||||||
|
# get dynamicly the related package manager on the current distro
|
||||||
|
local local_pkgman related_opt
|
||||||
|
for pkg in ${!pkg_distro_manager[@]} ; do
|
||||||
|
if has_command ${pkg} ; then
|
||||||
|
local_pkgman=${pkg}
|
||||||
|
related_opt=${pkg_distro_manager[$pkg]}
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# check if the new release version are available via package manager
|
||||||
|
read -a pkgman_version <<< $(sudo ${local_pkgman} ${related_opt} | grep -Po '(\d+\.)+\d+')
|
||||||
|
|
||||||
|
# otherwise download directly from remote repository
|
||||||
|
if [[ -z ${pkgman_version[0]} ]] || [[ ${pkgman_version[0]} != ${git_version} ]] ; then
|
||||||
|
$(curl ${remote_src} -o ${btop_path})
|
||||||
|
if [[ $? -eq 0 ]] ; then
|
||||||
|
if [[ -n ${notifier} ]] ;then notify-send "$btop_exec updated to v${git_version}" ; fi
|
||||||
|
|
||||||
|
if [[ 'menus[${#menus[@]}-1]' == "update" ]] ;then unset 'menus[${#menus[@]}-1]' ; fi # unset update label
|
||||||
|
else
|
||||||
|
if [[ -n ${notifier} ]] ;then notify-send "UPDATE FAILED : require root user" -i face-sad ; fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
[[ "ARGS::PARSE" ]]
|
||||||
|
{
|
||||||
|
usage() {
|
||||||
|
|
||||||
|
cat << EOF
|
||||||
|
|
||||||
|
usage : bashtop [ OPT ]
|
||||||
|
|
||||||
|
--update : upgrade bastop to the new version release
|
||||||
|
--version | -v : get version of bashtop
|
||||||
|
--help | -h : help usage
|
||||||
|
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if [[ -n ${1} ]] ; then
|
||||||
|
case ${1} in
|
||||||
|
"--update")
|
||||||
|
if [[ $UID -ne 0 ]] ; then
|
||||||
|
read -p "require root user : " -s -t 15
|
||||||
|
if [[ -n ${REPLY} ]] ; then
|
||||||
|
sudo -S <<< ${REPLY} $0 --update
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
sleep 1
|
||||||
|
update_
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
"--version"|"-v")
|
||||||
|
echo -e "Bashtop v.${version}" ; exit 0 ;;
|
||||||
|
"--help"|"-h")
|
||||||
|
usage ; exit 0 ;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
sleep_() { #? Restore terminal options, stop and send to background if caught SIGTSTP (ctrl+z)
|
sleep_() { #? Restore terminal options, stop and send to background if caught SIGTSTP (ctrl+z)
|
||||||
tput rmcup
|
tput rmcup
|
||||||
stty echo
|
stty echo
|
||||||
|
@ -2672,8 +2784,6 @@ unpause_() { #? Unpause
|
||||||
|
|
||||||
menu_() { #? Shows the main menu overlay
|
menu_() { #? Shows the main menu overlay
|
||||||
local menu i count keypress selected_int=0 selected up local_rez d_banner=1 menu_out bannerd skipped menu_pause out_out wait_string trans
|
local menu i count keypress selected_int=0 selected up local_rez d_banner=1 menu_out bannerd skipped menu_pause out_out wait_string trans
|
||||||
local -a menus=("options" "help" "quit") color
|
|
||||||
|
|
||||||
until false; do
|
until false; do
|
||||||
|
|
||||||
#* Put program to sleep if caught ctrl-z
|
#* Put program to sleep if caught ctrl-z
|
||||||
|
@ -2740,6 +2850,7 @@ menu_() { #? Shows the main menu overlay
|
||||||
options) options_ ;;
|
options) options_ ;;
|
||||||
help) help_ ;;
|
help) help_ ;;
|
||||||
quit) quit_ ;;
|
quit) quit_ ;;
|
||||||
|
update)update_;;
|
||||||
esac
|
esac
|
||||||
;;
|
;;
|
||||||
m|M|escape|backspace) break ;;
|
m|M|escape|backspace) break ;;
|
||||||
|
|
Loading…
Reference in New Issue