refactor(moonraker): refactor UI dialogs

This commit is contained in:
coderus
2023-01-08 00:13:05 +01:00
parent d02fc2e01f
commit 00a3fbe43b

View File

@@ -37,8 +37,7 @@ function moonraker_systemd() {
} }
function moonraker_setup_dialog() { function moonraker_setup_dialog() {
status_msg "Initializing Moonraker installation ..." print_moonraker_addresses
### return early if python version check fails ### return early if python version check fails
if [[ $(python3_check) == "false" ]]; then if [[ $(python3_check) == "false" ]]; then
local error="Versioncheck failed! Python 3.7 or newer required!\n" local error="Versioncheck failed! Python 3.7 or newer required!\n"
@@ -46,116 +45,85 @@ function moonraker_setup_dialog() {
print_error "${error}" && return print_error "${error}" && return
fi fi
### return early if moonraker already exists local klipper_services=$(find_klipper_systemd)
local moonraker_services local klipper_count=$(echo "${klipper_services}" | wc -w )
moonraker_services=$(moonraker_systemd) for service in ${klipper_services}; do
klipper_names+=( "$(get_instance_name "${service}")" )
done
local moonraker_services=$(moonraker_systemd)
local moonraker_count=$(echo "${moonraker_services}" | wc -w )
for service in ${moonraker_services}; do
moonraker_names+=( "$(get_instance_name "${service}")" )
done
### return early if klipper is not installed ### return early if klipper is not installed
local klipper_services
klipper_services=$(find_klipper_systemd)
if [[ -z ${klipper_services} ]]; then if [[ -z ${klipper_services} ]]; then
local error="Klipper not installed! Please install Klipper first!" local error="Klipper not installed! Please install Klipper first!"
log_error "Moonraker setup started without Klipper being installed. Aborting setup." log_error "Moonraker setup started without Klipper being installed. Aborting setup."
print_error "${error}" && return print_error "${error}" && return
fi fi
local klipper_count user_input=() klipper_names=() moonraker_names=() top_border
klipper_count=$(echo "${klipper_services}" | wc -w ) echo -e "| ${red}~~~~~~~~~ [ Moonraker installation ] ~~~~~~~~${white} |"
for service in ${klipper_services}; do hr
klipper_names+=( "$(get_instance_name "${service}")" )
done
for service in ${moonraker_services}; do
moonraker_names+=( "$(get_instance_name "${service}")" )
done
local moonraker_count=$(echo "${moonraker_services}" | wc -w ) printf "|${green}%-55s${white}|\n" " ${moonraker_count} Moonraker services found!"
if (( klipper_count == 1 )); then local moonraker_folders=()
ok_msg "Klipper installation found!\n" for name in ${moonraker_services}; do
moonraker_count=1 local moonraker_folder=$(get_data_folder $(basename ${name}) moonraker)
elif (( klipper_count > 1 )); then printf "|${cyan}%-57s${white}|\n" "$(basename ${name}) - $(get_moonraker_address $(basename ${name}))"
top_border moonraker_folders+=( "${moonraker_folder}" )
printf "|${green}%-55s${white}|\n" " ${moonraker_count} Moonraker services found!" done
local moonraker_folders=() blank_line
for name in ${moonraker_services}; do printf "|${green}%-55s${white}|\n" " ${klipper_count} Klipper services found!"
local moonraker_folder=$(get_data_folder $(basename ${name}) moonraker) local klipper_available=()
printf "|${cyan}%-57s${white}|\n" "$(basename ${name}) - $(get_moonraker_address $(basename ${name}))" for name in ${klipper_services}; do
moonraker_folders+=( "${moonraker_folder}" ) local klipper_folder=$(get_data_folder $(basename ${name}) klipper)
done printf "|${cyan}%-57s${white}|\n" "$(basename ${name}) - ${klipper_folder}"
blank_line if [[ ! " ${moonraker_folders[*]} " =~ " ${klipper_folder} " ]]; then
printf "|${green}%-55s${white}|\n" " ${klipper_count} Klipper services found!" klipper_available+=( "$(basename ${name})" )
local klipper_available=()
for name in ${klipper_services}; do
local klipper_folder=$(get_data_folder $(basename ${name}) klipper)
printf "|${cyan}%-57s${white}|\n" "$(basename ${name}) - ${klipper_folder}"
if [[ ! " ${moonraker_folders[*]} " =~ " ${klipper_folder} " ]]; then
klipper_available+=( "${name}" )
fi
done
bottom_border
if [[ ${#klipper_available[@]} > 1 ]]; then
echo -e "\nSelect instance to install moonraker:"
echo " 0. Install all"
local i=1
for name in "${klipper_available[@]}"; do
echo " ${i}. $(basename ${name})"
(( i=i+1 ))
done
echo
while true; do
read -p "Select: " moonraker_count
if [[ $moonraker_count =~ ^[0-9]+$ ]] && [[ $moonraker_count -le ${#klipper_available[@]} ]]; then
break
else
error_msg "Invalid Input!"
fi
done
if (( moonraker_count == 0 )); then
for service in "${klipper_available[@]}"; do
user_input+=( "$(basename ${service})" )
done
else
user_input=( "$(basename ${klipper_available[(( moonraker_count-1 ))]})" )
fi
elif [[ ${#klipper_available[@]} == 0 ]]; then
printf "|${red}%-55s${white}|\n" "Moonraker already installed for every Klipper instance!"
echo
return
else
echo -e "\nMoonraker will be installed for $(basename ${klipper_available[0]}) instance"
moonraker_count=1
user_input=( "$(basename ${klipper_available[0]})" )
fi fi
done
local klipper_available_count=${#klipper_available[@]}
hr
printf "|${green}%-55s${white}|\n" " ${klipper_available_count} Moonraker services can be installed:"
local service_name
if (( klipper_available_count == 1 )); then
service_name=$(basename "${klipper_available[@]}")
printf "| 0) %-51s|\n" "${service_name}"
else else
log_error "Internal error. klipper_count of '${klipper_count}' not equal or grather than one!" printf "| 0) %-51s|\n" "Install all"
return 1 local i=1
for name in "${klipper_available[@]}"; do
printf "| ${i}) %-51s|\n" "${name}"
(( i=i+1 ))
done
fi
back_footer
local option
while true; do
read -p "${cyan}Install moonraker for:${white} " option
if [[ ${option} == "B" || ${option} == "b" ]]; then
return
elif [[ $((option)) != $option ]]; then
error_msg "Invalid command!"
elif (( option >= 0 && option < ${#klipper_available[@]} )); then
break
else
error_msg "Invalid command!"
fi
done
if (( option == 0 )); then
user_input=( ${klipper_available[@]} )
else
user_input=( "${klipper_available[(( option-1 ))]}" )
fi fi
for i in ${user_input[@]}; do status_msg "Installing Moonraker ..."
select_msg "${i}"
done
### confirm instance amount
local yn
while true; do
(( moonraker_count == 0 )) && local question="Install Moonraker for all available instances?"
[[ ${#user_input[@]} == 1 ]] && local question="Install Moonraker for $(basename ${user_input[0]}) instance?"
read -p "${cyan}###### ${question} (Y/n):${white} " yn
case "${yn}" in
Y|y|Yes|yes|"")
select_msg "Yes"
break;;
N|n|No|no)
select_msg "No"
abort_msg "Exiting Moonraker setup ...\n"
return;;
*)
error_msg "Invalid Input!";;
esac
done
(( moonraker_count > 0 )) && status_msg "Installing Moonraker for $(basename ${klipper_available[(( moonraker_count-1 ))]}) instance ..."
(( moonraker_count == 1 )) && status_msg "Installing Moonraker ..."
moonraker_setup "${user_input[@]}" moonraker_setup "${user_input[@]}"
} }
@@ -317,18 +285,13 @@ function write_moonraker_conf() {
function configure_moonraker_service() { function configure_moonraker_service() {
local names=("${@}") local names=("${@}")
local moonraker_count=${#names[@]} local moonraker_count=${#names[@]}
local printer_data cfg_dir service env_file instance_name service_name local printer_data cfg_dir service env_file service_name
for service in "${names[@]}"; do for service in "${names[@]}"; do
printer_data=$(get_data_folder "${service}" "klipper") printer_data=$(get_data_folder "${service}" "klipper")
instance_name=$(get_instance_name "${service}")
cfg_dir="${printer_data}/config" cfg_dir="${printer_data}/config"
if [[ "${instance_name}" == "klipper" ]]; then service_name="${service/"klipper"/"moonraker"}"
service_name="moonraker.service"
else
service_name="moonraker-${instance_name}.service"
fi
service="${SYSTEMD}/${service_name}" service="${SYSTEMD}/${service_name}"
env_file="${printer_data}/systemd/moonraker.env" env_file="${printer_data}/systemd/moonraker.env"
@@ -494,7 +457,7 @@ function remove_moonraker_env_file() {
local printer_data file local printer_data file
for service in "${@}"; do for service in "${@}"; do
printer_data=$(get_data_folder ${service} moonraker) printer_data=$(get_data_folder ${service} moonraker)
file="${HOME}/${printer_data}/systemd/moonraker.env" file="${printer_data}/systemd/moonraker.env"
status_msg "Removing ${file} ..." status_msg "Removing ${file} ..."
rm -f "${file}" rm -f "${file}"
ok_msg "${file} removed!" ok_msg "${file} removed!"
@@ -505,7 +468,7 @@ function remove_moonraker_logs() {
local printer_data file local printer_data file
for service in "${@}"; do for service in "${@}"; do
printer_data=$(get_data_folder ${service} moonraker) printer_data=$(get_data_folder ${service} moonraker)
file="${HOME}/${printer_data}/systemd/moonraker.log"* file="${printer_data}/systemd/moonraker.lo"*
status_msg "Removing ${file} ..." status_msg "Removing ${file} ..."
rm -f "${file}" rm -f "${file}"
ok_msg "${file} removed!" ok_msg "${file} removed!"
@@ -574,68 +537,61 @@ function remove_moonraker() {
return return
fi fi
local moonraker_services_count="$(moonraker_systemd | wc -w)" local moonraker_services=$(moonraker_systemd)
if (( moonraker_services_count == 1 )); then if [[ -z ${moonraker_services} ]]; then
user_input=( "$(basename ${moonraker_services})" ) print_error "Moonraker not installed, nothing to do!"
else return
echo "Select Moonraker service to remove:"
echo " 0. Remove all"
local i=1 moonraker_names=() service_name
for name in ${moonraker_services}; do
service_name=$(basename ${name})
echo " ${i}. ${service_name}"
moonraker_names+=( "${service_name}" )
(( i=i+1 ))
done
while true; do
read -p "Select: " moonraker_count
if [[ $moonraker_count =~ ^[0-9]+$ ]]; then
break
else
error_msg "Invalid Input!"
fi
done
local user_input=()
if (( moonraker_count == 0 )); then
user_input=( ${moonraker_names[@]} )
else
user_input=( "${moonraker_names[(( moonraker_count-1 ))]}" )
fi
for i in ${user_input[@]}; do
select_msg "${i}"
done
fi fi
### confirm instance amount top_border
local yn echo -e "| ${red}~~~~~~~ [ Moonraker instance remover ] ~~~~~~${white} |"
hr
local user_input=() moonraker_names=()
local moonraker_services_count="$(moonraker_systemd | wc -w)"
if (( moonraker_services_count == 1 )); then
service_name=$(basename ${moonraker_services})
moonraker_names+=( "${service_name}" )
printf "| 0) %-51s|\n" "${service_name}"
else
printf "| 0) %-51s|\n" "Remove all"
local i=1 service_name
for name in ${moonraker_services}; do
service_name=$(basename ${name})
moonraker_names+=( "${service_name}" )
printf "| ${i}) %-51s|\n" "${service_name}"
(( i=i+1 ))
done
fi
back_footer
local option
while true; do while true; do
(( moonraker_services_count == 1 )) && local question="Remove Moonraker?" read -p "${cyan}Remove Moonraker instance:${white} " option
[[ "${moonraker_count}" == "0" ]] && local question="Remove all Moonraker instances?" if [[ ${option} == "B" || ${option} == "b" ]]; then
(( moonraker_count > 0 )) && [[ ${#user_input[@]} == 1 ]] && local question="Remove Moonraker $(basename ${user_input[0]}) instance?" return
read -p "${cyan}###### ${question} (Y/n):${white} " yn elif [[ $((option)) != $option ]]; then
case "${yn}" in error_msg "Invalid command!"
Y|y|Yes|yes|"") elif (( option >= 0 && option < ${#moonraker_names[@]} )); then
select_msg "Yes" break
break;; else
N|n|No|no) error_msg "Invalid command!"
select_msg "No" fi
abort_msg "Exiting Moonraker setup ...\n"
return;;
*)
error_msg "Invalid Input!";;
esac
done done
if (( option == 0 )); then
user_input=( ${moonraker_names[@]} )
else
user_input=( "${moonraker_names[(( option-1 ))]}" )
fi
remove_moonraker_systemd "${user_input[@]}" remove_moonraker_systemd "${user_input[@]}"
remove_moonraker_env_file "${user_input[@]}" remove_moonraker_env_file "${user_input[@]}"
remove_moonraker_logs "${user_input[@]}" remove_moonraker_logs "${user_input[@]}"
remove_legacy_moonraker_logs remove_legacy_moonraker_logs
if (( ${moonraker_services_count} == 1 || ${moonraker_count} == 0 )); then if (( ${moonraker_services_count} == 1 )) || [[ "${moonraker_count}" == "0" ]]; then
remove_moonraker_api_key remove_moonraker_api_key
remove_moonraker_polkit remove_moonraker_polkit
remove_moonraker_dir remove_moonraker_dir