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