diff --git a/scripts/install_klipperscreen.sh b/scripts/install_klipperscreen.sh deleted file mode 100755 index a9262de..0000000 --- a/scripts/install_klipperscreen.sh +++ /dev/null @@ -1,39 +0,0 @@ -install_klipperscreen(){ - python3_check - if [ $py_chk_ok = "true" ]; then - source_kiauh_ini - #KlipperScreen main installation - klipperscreen_setup - #after install actions - restart_klipperscreen - else - ERROR_MSG="Python 3.7 or above required!\n Please upgrade your Python version first." - print_msg && clear_msg - fi -} - -python3_check(){ - status_msg "Your Python 3 version is: $(python3 --version)" - major=$(python3 --version | cut -d" " -f2 | cut -d"." -f1) - minor=$(python3 --version | cut -d"." -f2) - if [ $major -ge 3 ] && [ $minor -ge 7 ]; then - ok_msg "Python version ok!" - py_chk_ok="true" - else - py_chk_ok="false" - fi -} - -klipperscreen_setup(){ - dep=(wget curl unzip dfu-util) - dependency_check - status_msg "Downloading KlipperScreen ..." - # force remove existing KlipperScreen dir - [ -d $KLIPPERSCREEN_DIR ] && rm -rf $KLIPPERSCREEN_DIR - # clone into fresh KlipperScreen dir - cd ${HOME} && git clone $KLIPPERSCREEN_REPO - ok_msg "Download complete!" - status_msg "Installing KlipperScreen ..." - $KLIPPERSCREEN_DIR/scripts/KlipperScreen-install.sh - ok_msg "KlipperScreen successfully installed!" -} diff --git a/scripts/klipperscreen.sh b/scripts/klipperscreen.sh new file mode 100644 index 0000000..146c889 --- /dev/null +++ b/scripts/klipperscreen.sh @@ -0,0 +1,189 @@ +#!/bin/bash + +#=======================================================================# +# Copyright (C) 2020 - 2022 Dominik Willner # +# # +# This file is part of KIAUH - Klipper Installation And Update Helper # +# https://github.com/th33xitus/kiauh # +# # +# This file may be distributed under the terms of the GNU GPLv3 license # +#=======================================================================# + +set -e + +### global variables +SYSTEMD="/etc/systemd/system" +KLIPPERSCREEN_ENV_DIR="${HOME}/.KlipperScreen-env" +KLIPPERSCREEN_DIR="${HOME}/KlipperScreen" +KLIPPERSCREEN_REPO=https://github.com/jordanruthe/KlipperScreen.git +KLIPPER_CONFIG="${HOME}/klipper_config" + +#===================================================# +#============== INSTALL KLIPPERSCREEN ==============# +#===================================================# + +install_klipperscreen(){ + python3_check + if [ "${py_chk_ok}" = "true" ]; then + klipperscreen_setup + restart_klipperscreen + else + ERROR_MSG="Python 3.7 or above required!\n Please upgrade your Python version first." + print_msg && clear_msg + fi +} + +python3_check(){ + status_msg "Your Python 3 version is: $(python3 --version)" + major=$(python3 --version | cut -d" " -f2 | cut -d"." -f1) + minor=$(python3 --version | cut -d"." -f2) + if [ "${major}" -ge 3 ] && [ "${minor}" -ge 7 ]; then + ok_msg "Python version ok!" + py_chk_ok="true" + else + py_chk_ok="false" + fi +} + +klipperscreen_setup(){ + dep=(wget curl unzip dfu-util) + dependency_check + status_msg "Downloading KlipperScreen ..." + # force remove existing KlipperScreen dir + [ -d "${KLIPPERSCREEN_DIR}" ] && rm -rf "${KLIPPERSCREEN_DIR}" + # clone into fresh KlipperScreen dir + cd "${HOME}" && git clone "${KLIPPERSCREEN_REPO}" + ok_msg "Download complete!" + status_msg "Installing KlipperScreen ..." + /bin/bash "${KLIPPERSCREEN_DIR}/scripts/KlipperScreen-install.sh" + ok_msg "KlipperScreen successfully installed!" +} + +#===================================================# +#=============== REMOVE KLIPPERSCREEN ==============# +#===================================================# + +remove_klipperscreen(){ + source_kiauh_ini + + ### remove KlipperScreen dir + if [ -d "${KLIPPERSCREEN_DIR}" ]; then + status_msg "Removing KlipperScreen directory ..." + rm -rf "${KLIPPERSCREEN_DIR}" && ok_msg "Directory removed!" + fi + + ### remove KlipperScreen VENV dir + if [ -d "${KLIPPERSCREEN_ENV_DIR}" ]; then + status_msg "Removing KlipperScreen VENV directory ..." + rm -rf "${KLIPPERSCREEN_ENV_DIR}" && ok_msg "Directory removed!" + fi + + ### remove KlipperScreen service + if [ -e "${SYSTEMD}/KlipperScreen.service" ]; then + status_msg "Removing KlipperScreen service ..." + sudo systemctl stop KlipperScreen + sudo systemctl disable KlipperScreen + sudo rm -f "${SYSTEMD}/KlipperScreen.service" + ###reloading units + sudo systemctl daemon-reload + sudo systemctl reset-failed + ok_msg "KlipperScreen Service removed!" + fi + + ### remove KlipperScreen log + if [ -e "/tmp/KlipperScreen.log" ]; then + status_msg "Removing KlipperScreen log file ..." + rm -f "/tmp/KlipperScreen.log" && ok_msg "File removed!" + fi + + ### remove KlipperScreen log symlink in config dir + + if [ -e "${KLIPPER_CONFIG}/KlipperScreen.log" ]; then + status_msg "Removing KlipperScreen log symlink ..." + rm -f "${KLIPPER_CONFIG}/KlipperScreen.log" && ok_msg "File removed!" + fi + + CONFIRM_MSG="KlipperScreen successfully removed!" +} + +#===================================================# +#=============== UPDATE KLIPPERSCREEN ==============# +#===================================================# + +update_klipperscreen(){ + stop_klipperscreen + cd "${KLIPPERSCREEN_DIR}" + KLIPPERSCREEN_OLDREQ_MD5SUM=$(md5sum "${KLIPPERSCREEN_DIR}/scripts/KlipperScreen-requirements.txt" | cut -d " " -f1) + git pull origin master -q && ok_msg "Fetch successfull!" + git checkout -f master && ok_msg "Checkout successfull" + #KLIPPERSCREEN_NEWREQ_MD5SUM=$(md5sum $KLIPPERSCREEN_DIR/scripts/KlipperScreen-requirements.txt) + if [[ $(md5sum "${KLIPPERSCREEN_DIR}/scripts/KlipperScreen-requirements.txt" | cut -d " " -f1) != "${KLIPPERSCREEN_OLDREQ_MD5SUM}" ]]; then + status_msg "New dependecies detected..." + PYTHONDIR="${HOME}/.KlipperScreen-env" + "${PYTHONDIR}"/bin/pip install -r "${KLIPPERSCREEN_DIR}/scripts/KlipperScreen-requirements.txt" + ok_msg "Dependencies have been installed!" + fi + ok_msg "Update complete!" + start_klipperscreen +} + +#===================================================# +#=============== KLIPPERSCREEN STATUS ==============# +#===================================================# + +klipperscreen_status(){ + klsccount=0 + klipperscreen_data=( + SERVICE + "${KLIPPERSCREEN_DIR}" + "${KLIPPERSCREEN_ENV_DIR}" + ) + + ### count amount of klipperscreen_data service files in /etc/systemd/system + SERVICE_FILE_COUNT=$(ls /etc/systemd/system | grep -E "KlipperScreen" | wc -l) + + ### remove the "SERVICE" entry from the klipperscreen_data array if a KlipperScreen service is installed + [ "${SERVICE_FILE_COUNT}" -gt 0 ] && unset "klipperscreen_data[0]" + + #count+1 for each found data-item from array + for klscd in "${klipperscreen_data[@]}" + do + if [ -e "${klscd}" ]; then + klsccount=$((klsccount + 1)) + fi + done + if [ "${klsccount}" == "${#klipperscreen_data[*]}" ]; then + KLIPPERSCREEN_STATUS="${green}Installed!${default} " + elif [ "${klsccount}" == 0 ]; then + KLIPPERSCREEN_STATUS="${red}Not installed!${default} " + else + KLIPPERSCREEN_STATUS="${yellow}Incomplete!${default} " + fi +} + +read_klipperscreen_versions(){ + if [ -d "${KLIPPERSCREEN_DIR}" ] && [ -d "${KLIPPERSCREEN_DIR}/.git" ]; then + cd "${KLIPPERSCREEN_DIR}" + git fetch origin master -q + LOCAL_KLIPPERSCREEN_COMMIT=$(git describe HEAD --always --tags | cut -d "-" -f 1,2) + REMOTE_KLIPPERSCREEN_COMMIT=$(git describe origin/master --always --tags | cut -d "-" -f 1,2) + else + LOCAL_KLIPPERSCREEN_COMMIT="${NONE}" + REMOTE_KLIPPERSCREEN_COMMIT="${NONE}" + fi +} + +compare_klipperscreen_versions(){ + unset KLIPPERSCREEN_UPDATE_AVAIL + read_klipperscreen_versions + if [ "${LOCAL_KLIPPERSCREEN_COMMIT}" != "${REMOTE_KLIPPERSCREEN_COMMIT}" ]; then + LOCAL_KLIPPERSCREEN_COMMIT="${yellow}$(printf "%-12s" "${LOCAL_KLIPPERSCREEN_COMMIT}")${default}" + REMOTE_KLIPPERSCREEN_COMMIT="${green}$(printf "%-12s" "${REMOTE_KLIPPERSCREEN_COMMIT}")${default}" + KLIPPERSCREEN_UPDATE_AVAIL="true" + update_arr+=(update_klipperscreen) + else + LOCAL_KLIPPERSCREEN_COMMIT="${green}$(printf "%-12s" "${LOCAL_KLIPPERSCREEN_COMMIT}")${default}" + REMOTE_KLIPPERSCREEN_COMMIT="${green}$(printf "%-12s" "${REMOTE_KLIPPERSCREEN_COMMIT}")${default}" + KLIPPERSCREEN_UPDATE_AVAIL="false" + fi +}