mirror of
https://github.com/dw-0/kiauh.git
synced 2025-12-26 17:23:35 +05:00
Compare commits
3 Commits
v5.1.4
...
5b5baf9810
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5b5baf9810 | ||
|
|
0c6c8bdabf | ||
|
|
f225ed028d |
2
kiauh.py
2
kiauh.py
@@ -1,7 +1,7 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
@@ -27,6 +27,7 @@ from components.crowsnest import (
|
|||||||
)
|
)
|
||||||
from components.klipper.klipper import Klipper
|
from components.klipper.klipper import Klipper
|
||||||
from core.backup_manager.backup_manager import BackupManager
|
from core.backup_manager.backup_manager import BackupManager
|
||||||
|
from core.constants import CURRENT_USER
|
||||||
from core.logger import DialogType, Logger
|
from core.logger import DialogType, Logger
|
||||||
from core.settings.kiauh_settings import KiauhSettings
|
from core.settings.kiauh_settings import KiauhSettings
|
||||||
from core.types.component_status import ComponentStatus
|
from core.types.component_status import ComponentStatus
|
||||||
@@ -72,7 +73,7 @@ def install_crowsnest() -> None:
|
|||||||
Logger.print_info("Installer will prompt you for sudo password!")
|
Logger.print_info("Installer will prompt you for sudo password!")
|
||||||
try:
|
try:
|
||||||
run(
|
run(
|
||||||
f"sudo make install",
|
f"sudo make install BASE_USER={CURRENT_USER}",
|
||||||
cwd=CROWSNEST_DIR,
|
cwd=CROWSNEST_DIR,
|
||||||
shell=True,
|
shell=True,
|
||||||
check=True,
|
check=True,
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
@@ -25,7 +25,6 @@ KLIPPER_SERVICE_NAME = "klipper.service"
|
|||||||
|
|
||||||
# directories
|
# directories
|
||||||
KLIPPER_DIR = Path.home().joinpath("klipper")
|
KLIPPER_DIR = Path.home().joinpath("klipper")
|
||||||
KLIPPER_KCONFIGS_DIR = Path.home().joinpath("klipper-kconfigs")
|
|
||||||
KLIPPER_ENV_DIR = Path.home().joinpath("klippy-env")
|
KLIPPER_ENV_DIR = Path.home().joinpath("klippy-env")
|
||||||
KLIPPER_BACKUP_DIR = BACKUP_ROOT_DIR.joinpath("klipper-backups")
|
KLIPPER_BACKUP_DIR = BACKUP_ROOT_DIR.joinpath("klipper-backups")
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
@@ -46,11 +46,14 @@ def run_klipper_removal(
|
|||||||
Logger.print_info("No Klipper Services installed! Skipped ...")
|
Logger.print_info("No Klipper Services installed! Skipped ...")
|
||||||
|
|
||||||
if (remove_dir or remove_env) and unit_file_exists("klipper", suffix="service"):
|
if (remove_dir or remove_env) and unit_file_exists("klipper", suffix="service"):
|
||||||
completion_msg.text = [
|
completion_msg.text.extend(
|
||||||
"Some Klipper services are still installed:",
|
[
|
||||||
f"● '{KLIPPER_DIR}' was not removed, even though selected for removal.",
|
"\n\n",
|
||||||
f"● '{KLIPPER_ENV_DIR}' was not removed, even though selected for removal.",
|
"Some Klipper services are still installed:",
|
||||||
]
|
f"● '{KLIPPER_DIR}' was not removed.",
|
||||||
|
f"● '{KLIPPER_ENV_DIR}' was not removed.",
|
||||||
|
]
|
||||||
|
)
|
||||||
else:
|
else:
|
||||||
if remove_dir:
|
if remove_dir:
|
||||||
Logger.print_status("Removing Klipper local repository ...")
|
Logger.print_status("Removing Klipper local repository ...")
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
@@ -36,7 +36,9 @@ from components.webui_client.client_utils import (
|
|||||||
)
|
)
|
||||||
from core.instance_manager.instance_manager import InstanceManager
|
from core.instance_manager.instance_manager import InstanceManager
|
||||||
from core.logger import DialogType, Logger
|
from core.logger import DialogType, Logger
|
||||||
|
from core.services.message_service import Message
|
||||||
from core.settings.kiauh_settings import KiauhSettings
|
from core.settings.kiauh_settings import KiauhSettings
|
||||||
|
from core.types.color import Color
|
||||||
from utils.common import check_install_dependencies
|
from utils.common import check_install_dependencies
|
||||||
from utils.git_utils import git_clone_wrapper, git_pull_wrapper
|
from utils.git_utils import git_clone_wrapper, git_pull_wrapper
|
||||||
from utils.input_utils import get_confirm
|
from utils.input_utils import get_confirm
|
||||||
@@ -50,9 +52,15 @@ from utils.sys_utils import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def install_klipper() -> None:
|
def install_klipper() -> Message:
|
||||||
Logger.print_status("Installing Klipper ...")
|
Logger.print_status("Installing Klipper ...")
|
||||||
|
|
||||||
|
completion_msg = Message(
|
||||||
|
title="Klipper Installation Process completed",
|
||||||
|
text=["Klipper installation canceled by the user!"],
|
||||||
|
color=Color.YELLOW,
|
||||||
|
)
|
||||||
|
|
||||||
klipper_list: List[Klipper] = get_instances(Klipper)
|
klipper_list: List[Klipper] = get_instances(Klipper)
|
||||||
moonraker_list: List[Moonraker] = get_instances(Moonraker)
|
moonraker_list: List[Moonraker] = get_instances(Moonraker)
|
||||||
match_moonraker: bool = False
|
match_moonraker: bool = False
|
||||||
@@ -60,28 +68,21 @@ def install_klipper() -> None:
|
|||||||
# if there are more moonraker instances than klipper instances, ask the user to
|
# if there are more moonraker instances than klipper instances, ask the user to
|
||||||
# match the klipper instance count to the count of moonraker instances with the same suffix
|
# match the klipper instance count to the count of moonraker instances with the same suffix
|
||||||
if len(moonraker_list) > len(klipper_list):
|
if len(moonraker_list) > len(klipper_list):
|
||||||
is_confirmed = display_moonraker_info(moonraker_list)
|
if not match_moonraker_instances(moonraker_list):
|
||||||
if not is_confirmed:
|
return completion_msg
|
||||||
Logger.print_status(EXIT_KLIPPER_SETUP)
|
|
||||||
return
|
|
||||||
match_moonraker = True
|
match_moonraker = True
|
||||||
|
|
||||||
install_count, name_dict = get_install_count_and_name_dict(
|
install_count, name_dict = get_install_count_and_name_dict(
|
||||||
klipper_list, moonraker_list
|
klipper_list, moonraker_list
|
||||||
)
|
)
|
||||||
|
|
||||||
if install_count == 0:
|
|
||||||
Logger.print_status(EXIT_KLIPPER_SETUP)
|
|
||||||
return
|
|
||||||
|
|
||||||
is_multi_install = install_count > 1 or (len(name_dict) >= 1 and install_count >= 1)
|
is_multi_install = install_count > 1 or (len(name_dict) >= 1 and install_count >= 1)
|
||||||
if not name_dict and install_count == 1:
|
if not name_dict and install_count == 1:
|
||||||
name_dict = {0: ""}
|
name_dict = {0: ""}
|
||||||
elif is_multi_install and not match_moonraker:
|
elif is_multi_install and not match_moonraker:
|
||||||
custom_names = use_custom_names_or_go_back()
|
custom_names = use_custom_names_or_go_back()
|
||||||
if custom_names is None:
|
if custom_names is None:
|
||||||
Logger.print_status(EXIT_KLIPPER_SETUP)
|
return completion_msg
|
||||||
return
|
|
||||||
|
|
||||||
handle_instance_names(install_count, name_dict, custom_names)
|
handle_instance_names(install_count, name_dict, custom_names)
|
||||||
|
|
||||||
@@ -91,8 +92,10 @@ def install_klipper() -> None:
|
|||||||
run_klipper_setup(klipper_list, name_dict, create_example_cfg)
|
run_klipper_setup(klipper_list, name_dict, create_example_cfg)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
Logger.print_error(e)
|
Logger.print_error(e)
|
||||||
Logger.print_error("Klipper installation failed!")
|
completion_msg.color = Color.RED
|
||||||
return
|
completion_msg.text = ["Klipper installation failed!"]
|
||||||
|
|
||||||
|
return completion_msg
|
||||||
|
|
||||||
|
|
||||||
def run_klipper_setup(
|
def run_klipper_setup(
|
||||||
@@ -155,7 +158,7 @@ def get_install_count_and_name_dict(
|
|||||||
return install_count, name_dict
|
return install_count, name_dict
|
||||||
|
|
||||||
|
|
||||||
def setup_klipper_prerequesites() -> None:
|
def setup_klipper_prerequesites() -> bool:
|
||||||
settings = KiauhSettings()
|
settings = KiauhSettings()
|
||||||
repo = settings.klipper.repo_url
|
repo = settings.klipper.repo_url
|
||||||
branch = settings.klipper.branch
|
branch = settings.klipper.branch
|
||||||
@@ -171,14 +174,13 @@ def setup_klipper_prerequesites() -> None:
|
|||||||
Logger.print_error("Error during installation of Klipper requirements!")
|
Logger.print_error("Error during installation of Klipper requirements!")
|
||||||
raise
|
raise
|
||||||
|
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
def install_klipper_packages() -> None:
|
def install_klipper_packages() -> None:
|
||||||
script = KLIPPER_INSTALL_SCRIPT
|
script = KLIPPER_INSTALL_SCRIPT
|
||||||
packages = parse_packages_from_file(script)
|
packages = parse_packages_from_file(script)
|
||||||
|
|
||||||
# Add pkg-config for rp2040 build
|
|
||||||
packages.append("pkg-config")
|
|
||||||
|
|
||||||
# Add dbus requirement for DietPi distro
|
# Add dbus requirement for DietPi distro
|
||||||
if Path("/boot/dietpi/.version").exists():
|
if Path("/boot/dietpi/.version").exists():
|
||||||
packages.append("dbus")
|
packages.append("dbus")
|
||||||
@@ -226,7 +228,7 @@ def use_custom_names_or_go_back() -> bool | None:
|
|||||||
return _input
|
return _input
|
||||||
|
|
||||||
|
|
||||||
def display_moonraker_info(moonraker_list: List[Moonraker]) -> bool:
|
def match_moonraker_instances(moonraker_list: List[Moonraker]) -> bool:
|
||||||
# todo: only show the klipper instances that are not already installed
|
# todo: only show the klipper instances that are not already installed
|
||||||
Logger.print_dialog(
|
Logger.print_dialog(
|
||||||
DialogType.INFO,
|
DialogType.INFO,
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
@@ -14,6 +14,7 @@ from typing import Type
|
|||||||
from components.klipper import klipper_remove
|
from components.klipper import klipper_remove
|
||||||
from core.menus import FooterType, Option
|
from core.menus import FooterType, Option
|
||||||
from core.menus.base_menu import BaseMenu
|
from core.menus.base_menu import BaseMenu
|
||||||
|
from core.menus.utils.menu_utils import get_checkbox_state
|
||||||
from core.types.color import Color
|
from core.types.color import Color
|
||||||
|
|
||||||
|
|
||||||
@@ -47,11 +48,9 @@ class KlipperRemoveMenu(BaseMenu):
|
|||||||
}
|
}
|
||||||
|
|
||||||
def print_menu(self) -> None:
|
def print_menu(self) -> None:
|
||||||
checked = f"[{Color.apply('x', Color.CYAN)}]"
|
o1 = get_checkbox_state(self.remove_klipper_service)
|
||||||
unchecked = "[ ]"
|
o2 = get_checkbox_state(self.remove_klipper_dir)
|
||||||
o1 = checked if self.remove_klipper_service else unchecked
|
o3 = get_checkbox_state(self.remove_klipper_env)
|
||||||
o2 = checked if self.remove_klipper_dir else unchecked
|
|
||||||
o3 = checked if self.remove_klipper_env else unchecked
|
|
||||||
sel_state = f"{'Select'if not self.select_state else 'Deselect'} everything"
|
sel_state = f"{'Select'if not self.select_state else 'Deselect'} everything"
|
||||||
menu = textwrap.dedent(
|
menu = textwrap.dedent(
|
||||||
f"""
|
f"""
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
@@ -7,7 +7,6 @@
|
|||||||
# This file may be distributed under the terms of the GNU GPLv3 license #
|
# This file may be distributed under the terms of the GNU GPLv3 license #
|
||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
import re
|
import re
|
||||||
from pathlib import Path
|
|
||||||
from subprocess import (
|
from subprocess import (
|
||||||
DEVNULL,
|
DEVNULL,
|
||||||
PIPE,
|
PIPE,
|
||||||
@@ -139,7 +138,6 @@ def start_flash_process(flash_options: FlashOptions) -> None:
|
|||||||
if flash_options.flash_method is FlashMethod.REGULAR:
|
if flash_options.flash_method is FlashMethod.REGULAR:
|
||||||
cmd = [
|
cmd = [
|
||||||
"make",
|
"make",
|
||||||
f"KCONFIG_CONFIG={flash_options.selected_kconfig}",
|
|
||||||
flash_options.flash_command.value,
|
flash_options.flash_command.value,
|
||||||
f"FLASH_DEVICE={flash_options.selected_mcu}",
|
f"FLASH_DEVICE={flash_options.selected_mcu}",
|
||||||
]
|
]
|
||||||
@@ -167,17 +165,17 @@ def start_flash_process(flash_options: FlashOptions) -> None:
|
|||||||
if rc != 0:
|
if rc != 0:
|
||||||
raise Exception(f"Flashing failed with returncode: {rc}")
|
raise Exception(f"Flashing failed with returncode: {rc}")
|
||||||
else:
|
else:
|
||||||
Logger.print_ok("Flashing successful!", start="\n", end="\n\n")
|
Logger.print_ok("Flashing successfull!", start="\n", end="\n\n")
|
||||||
|
|
||||||
except (Exception, CalledProcessError):
|
except (Exception, CalledProcessError):
|
||||||
Logger.print_error("Flashing failed!", start="\n")
|
Logger.print_error("Flashing failed!", start="\n")
|
||||||
Logger.print_error("See the console output above!", end="\n\n")
|
Logger.print_error("See the console output above!", end="\n\n")
|
||||||
|
|
||||||
|
|
||||||
def run_make_clean(kconfig=Path(KLIPPER_DIR.joinpath(".config"))) -> None:
|
def run_make_clean() -> None:
|
||||||
try:
|
try:
|
||||||
run(
|
run(
|
||||||
f"make KCONFIG_CONFIG={kconfig} clean",
|
"make clean",
|
||||||
cwd=KLIPPER_DIR,
|
cwd=KLIPPER_DIR,
|
||||||
shell=True,
|
shell=True,
|
||||||
check=True,
|
check=True,
|
||||||
@@ -187,10 +185,10 @@ def run_make_clean(kconfig=Path(KLIPPER_DIR.joinpath(".config"))) -> None:
|
|||||||
raise
|
raise
|
||||||
|
|
||||||
|
|
||||||
def run_make_menuconfig(kconfig=Path(KLIPPER_DIR.joinpath(".config"))) -> None:
|
def run_make_menuconfig() -> None:
|
||||||
try:
|
try:
|
||||||
run(
|
run(
|
||||||
f"make PYTHON=python3 KCONFIG_CONFIG={kconfig} menuconfig",
|
"make PYTHON=python3 menuconfig",
|
||||||
cwd=KLIPPER_DIR,
|
cwd=KLIPPER_DIR,
|
||||||
shell=True,
|
shell=True,
|
||||||
check=True,
|
check=True,
|
||||||
@@ -200,10 +198,10 @@ def run_make_menuconfig(kconfig=Path(KLIPPER_DIR.joinpath(".config"))) -> None:
|
|||||||
raise
|
raise
|
||||||
|
|
||||||
|
|
||||||
def run_make(kconfig=Path(KLIPPER_DIR.joinpath(".config"))) -> None:
|
def run_make() -> None:
|
||||||
try:
|
try:
|
||||||
run(
|
run(
|
||||||
f"make PYTHON=python3 KCONFIG_CONFIG={kconfig}",
|
"make PYTHON=python3",
|
||||||
cwd=KLIPPER_DIR,
|
cwd=KLIPPER_DIR,
|
||||||
shell=True,
|
shell=True,
|
||||||
check=True,
|
check=True,
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
@@ -39,7 +39,6 @@ class FlashOptions:
|
|||||||
_selected_mcu: str = ""
|
_selected_mcu: str = ""
|
||||||
_selected_board: str = ""
|
_selected_board: str = ""
|
||||||
_selected_baudrate: int = 250000
|
_selected_baudrate: int = 250000
|
||||||
_selected_kconfig: str = ".config"
|
|
||||||
|
|
||||||
def __new__(cls, *args, **kwargs):
|
def __new__(cls, *args, **kwargs):
|
||||||
if not cls._instance:
|
if not cls._instance:
|
||||||
@@ -105,11 +104,3 @@ class FlashOptions:
|
|||||||
@selected_baudrate.setter
|
@selected_baudrate.setter
|
||||||
def selected_baudrate(self, value: int) -> None:
|
def selected_baudrate(self, value: int) -> None:
|
||||||
self._selected_baudrate = value
|
self._selected_baudrate = value
|
||||||
|
|
||||||
@property
|
|
||||||
def selected_kconfig(self) -> str:
|
|
||||||
return self._selected_kconfig
|
|
||||||
|
|
||||||
@selected_kconfig.setter
|
|
||||||
def selected_kconfig(self, value: str) -> None:
|
|
||||||
self._selected_kconfig = value
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
@@ -9,22 +9,18 @@
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
import textwrap
|
import textwrap
|
||||||
from pathlib import Path
|
|
||||||
from shutil import copyfile
|
|
||||||
from typing import List, Set, Type
|
from typing import List, Set, Type
|
||||||
|
|
||||||
from components.klipper import KLIPPER_DIR, KLIPPER_KCONFIGS_DIR
|
from components.klipper import KLIPPER_DIR
|
||||||
from components.klipper_firmware.firmware_utils import (
|
from components.klipper_firmware.firmware_utils import (
|
||||||
run_make,
|
run_make,
|
||||||
run_make_clean,
|
run_make_clean,
|
||||||
run_make_menuconfig,
|
run_make_menuconfig,
|
||||||
)
|
)
|
||||||
from components.klipper_firmware.flash_options import FlashOptions
|
from core.logger import Logger
|
||||||
from core.logger import DialogType, Logger
|
|
||||||
from core.menus import Option
|
from core.menus import Option
|
||||||
from core.menus.base_menu import BaseMenu
|
from core.menus.base_menu import BaseMenu
|
||||||
from core.types.color import Color
|
from core.types.color import Color
|
||||||
from utils.input_utils import get_confirm, get_string_input
|
|
||||||
from utils.sys_utils import (
|
from utils.sys_utils import (
|
||||||
check_package_install,
|
check_package_install,
|
||||||
install_system_packages,
|
install_system_packages,
|
||||||
@@ -32,112 +28,16 @@ from utils.sys_utils import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
# noinspection PyUnusedLocal
|
|
||||||
# noinspection PyMethodMayBeStatic
|
|
||||||
class KlipperKConfigMenu(BaseMenu):
|
|
||||||
def __init__(self, previous_menu: Type[BaseMenu] | None = None):
|
|
||||||
super().__init__()
|
|
||||||
self.title = "Firmware Config Menu"
|
|
||||||
self.title_color = Color.CYAN
|
|
||||||
self.previous_menu: Type[BaseMenu] | None = previous_menu
|
|
||||||
self.flash_options = FlashOptions()
|
|
||||||
self.kconfigs_dirname = KLIPPER_KCONFIGS_DIR
|
|
||||||
self.kconfig_default = KLIPPER_DIR.joinpath(".config")
|
|
||||||
self.configs: List[Path] = []
|
|
||||||
self.kconfig = (
|
|
||||||
self.kconfig_default if not Path(self.kconfigs_dirname).is_dir() else None
|
|
||||||
)
|
|
||||||
|
|
||||||
def run(self) -> None:
|
|
||||||
if not self.kconfig:
|
|
||||||
super().run()
|
|
||||||
else:
|
|
||||||
self.flash_options.selected_kconfig = self.kconfig
|
|
||||||
|
|
||||||
def set_previous_menu(self, previous_menu: Type[BaseMenu] | None) -> None:
|
|
||||||
from core.menus.advanced_menu import AdvancedMenu
|
|
||||||
|
|
||||||
self.previous_menu = (
|
|
||||||
previous_menu if previous_menu is not None else AdvancedMenu
|
|
||||||
)
|
|
||||||
|
|
||||||
def set_options(self) -> None:
|
|
||||||
if not Path(self.kconfigs_dirname).is_dir():
|
|
||||||
return
|
|
||||||
|
|
||||||
self.input_label_txt = "Select config or action to continue (default=N)"
|
|
||||||
self.default_option = Option(
|
|
||||||
method=self.select_config, opt_data=self.kconfig_default
|
|
||||||
)
|
|
||||||
|
|
||||||
option_index = 1
|
|
||||||
for kconfig in Path(self.kconfigs_dirname).iterdir():
|
|
||||||
if not kconfig.name.endswith(".config"):
|
|
||||||
continue
|
|
||||||
kconfig_path = self.kconfigs_dirname.joinpath(kconfig)
|
|
||||||
if Path(kconfig_path).is_file():
|
|
||||||
self.configs += [kconfig]
|
|
||||||
self.options[str(option_index)] = Option(
|
|
||||||
method=self.select_config, opt_data=kconfig_path
|
|
||||||
)
|
|
||||||
option_index += 1
|
|
||||||
self.options["n"] = Option(
|
|
||||||
method=self.select_config, opt_data=self.kconfig_default
|
|
||||||
)
|
|
||||||
|
|
||||||
def print_menu(self) -> None:
|
|
||||||
cfg_found_str = Color.apply(
|
|
||||||
"Previously saved firmware configs found!", Color.GREEN
|
|
||||||
)
|
|
||||||
menu = textwrap.dedent(
|
|
||||||
f"""
|
|
||||||
╟───────────────────────────────────────────────────────╢
|
|
||||||
║ {cfg_found_str:^62} ║
|
|
||||||
║ ║
|
|
||||||
║ Select an existing config or create a new one. ║
|
|
||||||
╟───────────────────────────────────────────────────────╢
|
|
||||||
║ Available firmware configs: ║
|
|
||||||
"""
|
|
||||||
)[1:]
|
|
||||||
|
|
||||||
start_index = 1
|
|
||||||
for i, s in enumerate(self.configs):
|
|
||||||
line = f"{start_index + i}) {s.name}"
|
|
||||||
menu += f"║ {line:<54}║\n"
|
|
||||||
|
|
||||||
new_config = Color.apply("N) Create new firmware config", Color.GREEN)
|
|
||||||
menu += "║ ║\n"
|
|
||||||
menu += f"║ {new_config:<62} ║\n"
|
|
||||||
|
|
||||||
menu += "╟───────────────────────────────────────────────────────╢\n"
|
|
||||||
|
|
||||||
print(menu, end="")
|
|
||||||
|
|
||||||
def select_config(self, **kwargs) -> None:
|
|
||||||
selection: str | None = kwargs.get("opt_data", None)
|
|
||||||
if selection is None:
|
|
||||||
raise Exception("opt_data is None")
|
|
||||||
if not Path(selection).is_file() and selection != self.kconfig_default:
|
|
||||||
raise Exception("opt_data does not exists")
|
|
||||||
self.kconfig = selection
|
|
||||||
|
|
||||||
|
|
||||||
# noinspection PyUnusedLocal
|
# noinspection PyUnusedLocal
|
||||||
# noinspection PyMethodMayBeStatic
|
# noinspection PyMethodMayBeStatic
|
||||||
class KlipperBuildFirmwareMenu(BaseMenu):
|
class KlipperBuildFirmwareMenu(BaseMenu):
|
||||||
def __init__(
|
def __init__(self, previous_menu: Type[BaseMenu] | None = None):
|
||||||
self, kconfig: str | None = None, previous_menu: Type[BaseMenu] | None = None
|
|
||||||
):
|
|
||||||
super().__init__()
|
super().__init__()
|
||||||
self.title = "Build Firmware Menu"
|
self.title = "Build Firmware Menu"
|
||||||
self.title_color = Color.CYAN
|
self.title_color = Color.CYAN
|
||||||
self.previous_menu: Type[BaseMenu] | None = previous_menu
|
self.previous_menu: Type[BaseMenu] | None = previous_menu
|
||||||
self.deps: Set[str] = {"build-essential", "dpkg-dev", "make"}
|
self.deps: Set[str] = {"build-essential", "dpkg-dev", "make"}
|
||||||
self.missing_deps: List[str] = check_package_install(self.deps)
|
self.missing_deps: List[str] = check_package_install(self.deps)
|
||||||
self.flash_options = FlashOptions()
|
|
||||||
self.kconfigs_dirname = KLIPPER_KCONFIGS_DIR
|
|
||||||
self.kconfig_default = KLIPPER_DIR.joinpath(".config")
|
|
||||||
self.kconfig = self.flash_options.selected_kconfig
|
|
||||||
|
|
||||||
def set_previous_menu(self, previous_menu: Type[BaseMenu] | None) -> None:
|
def set_previous_menu(self, previous_menu: Type[BaseMenu] | None) -> None:
|
||||||
from core.menus.advanced_menu import AdvancedMenu
|
from core.menus.advanced_menu import AdvancedMenu
|
||||||
@@ -147,22 +47,16 @@ class KlipperBuildFirmwareMenu(BaseMenu):
|
|||||||
)
|
)
|
||||||
|
|
||||||
def set_options(self) -> None:
|
def set_options(self) -> None:
|
||||||
self.input_label_txt = "Press ENTER to install dependencies"
|
|
||||||
self.default_option = Option(method=self.install_missing_deps)
|
|
||||||
|
|
||||||
def run(self):
|
|
||||||
# immediately start the build process if all dependencies are met
|
|
||||||
if len(self.missing_deps) == 0:
|
if len(self.missing_deps) == 0:
|
||||||
self.start_build_process()
|
self.input_label_txt = "Press ENTER to continue"
|
||||||
|
self.default_option = Option(method=self.start_build_process)
|
||||||
else:
|
else:
|
||||||
super().run()
|
self.input_label_txt = "Press ENTER to install dependencies"
|
||||||
|
self.default_option = Option(method=self.install_missing_deps)
|
||||||
|
|
||||||
def print_menu(self) -> None:
|
def print_menu(self) -> None:
|
||||||
txt = Color.apply("Dependencies are missing!", Color.RED)
|
|
||||||
menu = textwrap.dedent(
|
menu = textwrap.dedent(
|
||||||
f"""
|
"""
|
||||||
╟───────────────────────────────────────────────────────╢
|
|
||||||
║ {txt:^62} ║
|
|
||||||
╟───────────────────────────────────────────────────────╢
|
╟───────────────────────────────────────────────────────╢
|
||||||
║ The following dependencies are required: ║
|
║ The following dependencies are required: ║
|
||||||
║ ║
|
║ ║
|
||||||
@@ -173,11 +67,19 @@ class KlipperBuildFirmwareMenu(BaseMenu):
|
|||||||
status_ok = Color.apply("*INSTALLED*", Color.GREEN)
|
status_ok = Color.apply("*INSTALLED*", Color.GREEN)
|
||||||
status_missing = Color.apply("*MISSING*", Color.RED)
|
status_missing = Color.apply("*MISSING*", Color.RED)
|
||||||
status = status_missing if d in self.missing_deps else status_ok
|
status = status_missing if d in self.missing_deps else status_ok
|
||||||
padding = 40 - len(d) + len(status) + (len(status_ok) - len(status))
|
padding = 39 - len(d) + len(status) + (len(status_ok) - len(status))
|
||||||
d = Color.apply(f"● {d}", Color.CYAN)
|
d = Color.apply(f"● {d}", Color.CYAN)
|
||||||
menu += f"║ {d}{status:>{padding}} ║\n"
|
menu += f"║ {d}{status:>{padding}} ║\n"
|
||||||
|
|
||||||
menu += "║ ║\n"
|
menu += "║ ║\n"
|
||||||
|
|
||||||
|
color = Color.GREEN if len(self.missing_deps) == 0 else Color.RED
|
||||||
|
txt = (
|
||||||
|
"All dependencies are met!"
|
||||||
|
if len(self.missing_deps) == 0
|
||||||
|
else "Dependencies are missing!"
|
||||||
|
)
|
||||||
|
|
||||||
|
menu += f"║ {Color.apply(txt, color):<62} ║\n"
|
||||||
menu += "╟───────────────────────────────────────────────────────╢\n"
|
menu += "╟───────────────────────────────────────────────────────╢\n"
|
||||||
|
|
||||||
print(menu, end="")
|
print(menu, end="")
|
||||||
@@ -196,16 +98,13 @@ class KlipperBuildFirmwareMenu(BaseMenu):
|
|||||||
|
|
||||||
def start_build_process(self, **kwargs) -> None:
|
def start_build_process(self, **kwargs) -> None:
|
||||||
try:
|
try:
|
||||||
run_make_clean(self.kconfig)
|
run_make_clean()
|
||||||
run_make_menuconfig(self.kconfig)
|
run_make_menuconfig()
|
||||||
run_make(self.kconfig)
|
run_make()
|
||||||
|
|
||||||
Logger.print_ok("Firmware successfully built!")
|
Logger.print_ok("Firmware successfully built!")
|
||||||
Logger.print_ok(f"Firmware file located in '{KLIPPER_DIR}/out'!")
|
Logger.print_ok(f"Firmware file located in '{KLIPPER_DIR}/out'!")
|
||||||
|
|
||||||
if self.kconfig == self.kconfig_default:
|
|
||||||
self.save_firmware_config()
|
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
Logger.print_error(e)
|
Logger.print_error(e)
|
||||||
Logger.print_error("Building Klipper Firmware failed!")
|
Logger.print_error("Building Klipper Firmware failed!")
|
||||||
@@ -213,62 +112,3 @@ class KlipperBuildFirmwareMenu(BaseMenu):
|
|||||||
finally:
|
finally:
|
||||||
if self.previous_menu is not None:
|
if self.previous_menu is not None:
|
||||||
self.previous_menu().run()
|
self.previous_menu().run()
|
||||||
|
|
||||||
def save_firmware_config(self) -> None:
|
|
||||||
Logger.print_dialog(
|
|
||||||
DialogType.CUSTOM,
|
|
||||||
[
|
|
||||||
"You can save the firmware build configs for multiple MCUs,"
|
|
||||||
" and use them to update the firmware after a Klipper version upgrade"
|
|
||||||
],
|
|
||||||
custom_title="Save firmware config",
|
|
||||||
)
|
|
||||||
if not get_confirm(
|
|
||||||
"Do you want to save firmware config?", default_choice=False
|
|
||||||
):
|
|
||||||
return
|
|
||||||
|
|
||||||
filename = self.kconfig_default
|
|
||||||
while True:
|
|
||||||
Logger.print_dialog(
|
|
||||||
DialogType.CUSTOM,
|
|
||||||
[
|
|
||||||
"Allowed characters: a-z, 0-9 and '-'",
|
|
||||||
"The name must not contain the following:",
|
|
||||||
"\n\n",
|
|
||||||
"● Any special characters",
|
|
||||||
"● No leading or trailing '-'",
|
|
||||||
],
|
|
||||||
)
|
|
||||||
input_name = get_string_input(
|
|
||||||
"Enter the new firmware config name",
|
|
||||||
regex=r"^[a-z0-9]+([a-z0-9-]*[a-z0-9])?$",
|
|
||||||
)
|
|
||||||
filename = self.kconfigs_dirname.joinpath(f"{input_name}.config")
|
|
||||||
|
|
||||||
if Path(filename).is_file():
|
|
||||||
if get_confirm(
|
|
||||||
f"Firmware config {input_name} already exists, overwrite?",
|
|
||||||
default_choice=False,
|
|
||||||
):
|
|
||||||
break
|
|
||||||
|
|
||||||
if Path(filename).is_dir():
|
|
||||||
Logger.print_error(f"Path {filename} exists and it's a directory")
|
|
||||||
|
|
||||||
if not Path(filename).exists():
|
|
||||||
break
|
|
||||||
|
|
||||||
if not get_confirm(
|
|
||||||
f"Save firmware config to '{filename}'?", default_choice=True
|
|
||||||
):
|
|
||||||
Logger.print_info("Aborted saving firmware config ...")
|
|
||||||
return
|
|
||||||
|
|
||||||
if not Path(self.kconfigs_dirname).exists():
|
|
||||||
Path(self.kconfigs_dirname).mkdir()
|
|
||||||
|
|
||||||
copyfile(self.kconfig_default, filename)
|
|
||||||
|
|
||||||
Logger.print_ok()
|
|
||||||
Logger.print_ok(f"Firmware config successfully saved to {filename}")
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
@@ -10,7 +10,6 @@ from __future__ import annotations
|
|||||||
|
|
||||||
import textwrap
|
import textwrap
|
||||||
import time
|
import time
|
||||||
from pathlib import Path
|
|
||||||
from typing import Type
|
from typing import Type
|
||||||
|
|
||||||
from components.klipper_firmware.firmware_utils import (
|
from components.klipper_firmware.firmware_utils import (
|
||||||
@@ -421,7 +420,6 @@ class KlipperFlashOverviewMenu(BaseMenu):
|
|||||||
mcu = self.flash_options.selected_mcu.split("/")[-1]
|
mcu = self.flash_options.selected_mcu.split("/")[-1]
|
||||||
board = self.flash_options.selected_board
|
board = self.flash_options.selected_board
|
||||||
baudrate = self.flash_options.selected_baudrate
|
baudrate = self.flash_options.selected_baudrate
|
||||||
kconfig = Path(self.flash_options.selected_kconfig).name
|
|
||||||
color = Color.CYAN
|
color = Color.CYAN
|
||||||
subheader = f"[{Color.apply('Overview', color)}]"
|
subheader = f"[{Color.apply('Overview', color)}]"
|
||||||
menu = textwrap.dedent(
|
menu = textwrap.dedent(
|
||||||
@@ -454,13 +452,6 @@ class KlipperFlashOverviewMenu(BaseMenu):
|
|||||||
"""
|
"""
|
||||||
)[1:]
|
)[1:]
|
||||||
|
|
||||||
if self.flash_options.flash_method is FlashMethod.REGULAR:
|
|
||||||
menu += textwrap.dedent(
|
|
||||||
f"""
|
|
||||||
║ Firmware config: {Color.apply(f"{kconfig:<36}", color)} ║
|
|
||||||
"""
|
|
||||||
)[1:]
|
|
||||||
|
|
||||||
menu += textwrap.dedent(
|
menu += textwrap.dedent(
|
||||||
"""
|
"""
|
||||||
║ ║
|
║ ║
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
|
|||||||
@@ -10,7 +10,6 @@ trusted_clients:
|
|||||||
169.254.0.0/16
|
169.254.0.0/16
|
||||||
172.16.0.0/12
|
172.16.0.0/12
|
||||||
192.168.0.0/16
|
192.168.0.0/16
|
||||||
FC00::/7
|
|
||||||
FE80::/10
|
FE80::/10
|
||||||
::1/128
|
::1/128
|
||||||
cors_domains:
|
cors_domains:
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
@@ -12,8 +12,9 @@ import textwrap
|
|||||||
from typing import Type
|
from typing import Type
|
||||||
|
|
||||||
from components.moonraker import moonraker_remove
|
from components.moonraker import moonraker_remove
|
||||||
from core.menus import Option
|
from core.menus import FooterType, Option
|
||||||
from core.menus.base_menu import BaseMenu
|
from core.menus.base_menu import BaseMenu
|
||||||
|
from core.menus.utils.menu_utils import get_checkbox_state
|
||||||
from core.types.color import Color
|
from core.types.color import Color
|
||||||
|
|
||||||
|
|
||||||
@@ -21,14 +22,17 @@ from core.types.color import Color
|
|||||||
class MoonrakerRemoveMenu(BaseMenu):
|
class MoonrakerRemoveMenu(BaseMenu):
|
||||||
def __init__(self, previous_menu: Type[BaseMenu] | None = None):
|
def __init__(self, previous_menu: Type[BaseMenu] | None = None):
|
||||||
super().__init__()
|
super().__init__()
|
||||||
|
|
||||||
self.title = "Remove Moonraker"
|
self.title = "Remove Moonraker"
|
||||||
self.title_color = Color.RED
|
self.title_color = Color.RED
|
||||||
self.previous_menu: Type[BaseMenu] | None = previous_menu
|
self.previous_menu: Type[BaseMenu] | None = previous_menu
|
||||||
|
self.footer_type = FooterType.BACK
|
||||||
|
|
||||||
self.remove_moonraker_service = False
|
self.remove_moonraker_service = False
|
||||||
self.remove_moonraker_dir = False
|
self.remove_moonraker_dir = False
|
||||||
self.remove_moonraker_env = False
|
self.remove_moonraker_env = False
|
||||||
self.remove_moonraker_polkit = False
|
self.remove_moonraker_polkit = False
|
||||||
self.selection_state = False
|
self.select_state = False
|
||||||
|
|
||||||
def set_previous_menu(self, previous_menu: Type[BaseMenu] | None) -> None:
|
def set_previous_menu(self, previous_menu: Type[BaseMenu] | None) -> None:
|
||||||
from core.menus.remove_menu import RemoveMenu
|
from core.menus.remove_menu import RemoveMenu
|
||||||
@@ -46,19 +50,18 @@ class MoonrakerRemoveMenu(BaseMenu):
|
|||||||
}
|
}
|
||||||
|
|
||||||
def print_menu(self) -> None:
|
def print_menu(self) -> None:
|
||||||
checked = f"[{Color.apply('x', Color.CYAN)}]"
|
o1 = get_checkbox_state(self.remove_moonraker_service)
|
||||||
unchecked = "[ ]"
|
o2 = get_checkbox_state(self.remove_moonraker_dir)
|
||||||
o1 = checked if self.remove_moonraker_service else unchecked
|
o3 = get_checkbox_state(self.remove_moonraker_env)
|
||||||
o2 = checked if self.remove_moonraker_dir else unchecked
|
o4 = get_checkbox_state(self.remove_moonraker_polkit)
|
||||||
o3 = checked if self.remove_moonraker_env else unchecked
|
sel_state = f"{'Select'if not self.select_state else 'Deselect'} everything"
|
||||||
o4 = checked if self.remove_moonraker_polkit else unchecked
|
|
||||||
menu = textwrap.dedent(
|
menu = textwrap.dedent(
|
||||||
f"""
|
f"""
|
||||||
╟───────────────────────────────────────────────────────╢
|
╟───────────────────────────────────────────────────────╢
|
||||||
║ Enter a number and hit enter to select / deselect ║
|
║ Enter a number and hit enter to select / deselect ║
|
||||||
║ the specific option for removal. ║
|
║ the specific option for removal. ║
|
||||||
╟───────────────────────────────────────────────────────╢
|
╟───────────────────────────────────────────────────────╢
|
||||||
║ a) {self._get_selection_state_str():37} ║
|
║ a) {sel_state:49} ║
|
||||||
╟───────────────────────────────────────────────────────╢
|
╟───────────────────────────────────────────────────────╢
|
||||||
║ 1) {o1} Remove Service ║
|
║ 1) {o1} Remove Service ║
|
||||||
║ 2) {o2} Remove Local Repository ║
|
║ 2) {o2} Remove Local Repository ║
|
||||||
@@ -72,11 +75,11 @@ class MoonrakerRemoveMenu(BaseMenu):
|
|||||||
print(menu, end="")
|
print(menu, end="")
|
||||||
|
|
||||||
def toggle_all(self, **kwargs) -> None:
|
def toggle_all(self, **kwargs) -> None:
|
||||||
self.selection_state = not self.selection_state
|
self.select_state = not self.select_state
|
||||||
self.remove_moonraker_service = self.selection_state
|
self.remove_moonraker_service = self.select_state
|
||||||
self.remove_moonraker_dir = self.selection_state
|
self.remove_moonraker_dir = self.select_state
|
||||||
self.remove_moonraker_env = self.selection_state
|
self.remove_moonraker_env = self.select_state
|
||||||
self.remove_moonraker_polkit = self.selection_state
|
self.remove_moonraker_polkit = self.select_state
|
||||||
|
|
||||||
def toggle_remove_moonraker_service(self, **kwargs) -> None:
|
def toggle_remove_moonraker_service(self, **kwargs) -> None:
|
||||||
self.remove_moonraker_service = not self.remove_moonraker_service
|
self.remove_moonraker_service = not self.remove_moonraker_service
|
||||||
@@ -97,32 +100,20 @@ class MoonrakerRemoveMenu(BaseMenu):
|
|||||||
and not self.remove_moonraker_env
|
and not self.remove_moonraker_env
|
||||||
and not self.remove_moonraker_polkit
|
and not self.remove_moonraker_polkit
|
||||||
):
|
):
|
||||||
print(
|
msg = "Nothing selected! Select options to remove first."
|
||||||
Color.apply(
|
print(Color.apply(msg, Color.RED))
|
||||||
"Nothing selected! Select options to remove first.", Color.RED
|
|
||||||
)
|
|
||||||
)
|
|
||||||
return
|
return
|
||||||
|
|
||||||
moonraker_remove.run_moonraker_removal(
|
completion_msg = moonraker_remove.run_moonraker_removal(
|
||||||
self.remove_moonraker_service,
|
self.remove_moonraker_service,
|
||||||
self.remove_moonraker_dir,
|
self.remove_moonraker_dir,
|
||||||
self.remove_moonraker_env,
|
self.remove_moonraker_env,
|
||||||
self.remove_moonraker_polkit,
|
self.remove_moonraker_polkit,
|
||||||
)
|
)
|
||||||
|
self.message_service.set_message(completion_msg)
|
||||||
|
|
||||||
self.remove_moonraker_service = False
|
self.remove_moonraker_service = False
|
||||||
self.remove_moonraker_dir = False
|
self.remove_moonraker_dir = False
|
||||||
self.remove_moonraker_env = False
|
self.remove_moonraker_env = False
|
||||||
self.remove_moonraker_polkit = False
|
self.remove_moonraker_polkit = False
|
||||||
|
self.select_state = False
|
||||||
self._go_back()
|
|
||||||
|
|
||||||
def _get_selection_state_str(self) -> str:
|
|
||||||
return (
|
|
||||||
"Select everything" if not self.selection_state else "Deselect everything"
|
|
||||||
)
|
|
||||||
|
|
||||||
def _go_back(self, **kwargs) -> None:
|
|
||||||
if self.previous_menu is not None:
|
|
||||||
self.previous_menu().run()
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
@@ -16,6 +16,8 @@ from components.moonraker import MOONRAKER_DIR, MOONRAKER_ENV_DIR
|
|||||||
from components.moonraker.moonraker import Moonraker
|
from components.moonraker.moonraker import Moonraker
|
||||||
from core.instance_manager.instance_manager import InstanceManager
|
from core.instance_manager.instance_manager import InstanceManager
|
||||||
from core.logger import Logger
|
from core.logger import Logger
|
||||||
|
from core.services.message_service import Message
|
||||||
|
from core.types.color import Color
|
||||||
from utils.fs_utils import run_remove_routines
|
from utils.fs_utils import run_remove_routines
|
||||||
from utils.input_utils import get_selection_input
|
from utils.input_utils import get_selection_input
|
||||||
from utils.instance_utils import get_instances
|
from utils.instance_utils import get_instances
|
||||||
@@ -27,7 +29,12 @@ def run_moonraker_removal(
|
|||||||
remove_dir: bool,
|
remove_dir: bool,
|
||||||
remove_env: bool,
|
remove_env: bool,
|
||||||
remove_polkit: bool,
|
remove_polkit: bool,
|
||||||
) -> None:
|
) -> Message:
|
||||||
|
completion_msg = Message(
|
||||||
|
title="Moonraker Removal Process completed",
|
||||||
|
color=Color.GREEN,
|
||||||
|
)
|
||||||
|
|
||||||
instances = get_instances(Moonraker)
|
instances = get_instances(Moonraker)
|
||||||
|
|
||||||
if remove_service:
|
if remove_service:
|
||||||
@@ -35,27 +42,45 @@ def run_moonraker_removal(
|
|||||||
if instances:
|
if instances:
|
||||||
instances_to_remove = select_instances_to_remove(instances)
|
instances_to_remove = select_instances_to_remove(instances)
|
||||||
remove_instances(instances_to_remove)
|
remove_instances(instances_to_remove)
|
||||||
|
instance_names = [i.service_file_path.stem for i in instances_to_remove]
|
||||||
|
txt = f"● Moonraker instances removed: {', '.join(instance_names)}"
|
||||||
|
completion_msg.text.append(txt)
|
||||||
else:
|
else:
|
||||||
Logger.print_info("No Moonraker Services installed! Skipped ...")
|
Logger.print_info("No Moonraker Services installed! Skipped ...")
|
||||||
|
|
||||||
delete_remaining: bool = remove_polkit or remove_dir or remove_env
|
delete_remaining: bool = remove_polkit or remove_dir or remove_env
|
||||||
if delete_remaining and unit_file_exists("moonraker", suffix="service"):
|
if delete_remaining and unit_file_exists("moonraker", suffix="service"):
|
||||||
Logger.print_info("There are still other Moonraker services installed")
|
completion_msg.text.extend(
|
||||||
Logger.print_info(
|
[
|
||||||
"● Moonraker PolicyKit rules were not removed.", prefix=False
|
"\n\n",
|
||||||
|
"Some Moonraker services are still installed:",
|
||||||
|
"● Moonraker PolicyKit rules were not removed.",
|
||||||
|
f"● '{MOONRAKER_DIR}' was not removed.",
|
||||||
|
f"● '{MOONRAKER_ENV_DIR}' was not removed.",
|
||||||
|
]
|
||||||
)
|
)
|
||||||
Logger.print_info(f"● '{MOONRAKER_DIR}' was not removed.", prefix=False)
|
|
||||||
Logger.print_info(f"● '{MOONRAKER_ENV_DIR}' was not removed.", prefix=False)
|
|
||||||
else:
|
else:
|
||||||
if remove_polkit:
|
if remove_polkit:
|
||||||
Logger.print_status("Removing all Moonraker policykit rules ...")
|
Logger.print_status("Removing all Moonraker policykit rules ...")
|
||||||
remove_polkit_rules()
|
if remove_polkit_rules():
|
||||||
|
completion_msg.text.append("● Moonraker PolicyKit rules removed")
|
||||||
if remove_dir:
|
if remove_dir:
|
||||||
Logger.print_status("Removing Moonraker local repository ...")
|
Logger.print_status("Removing Moonraker local repository ...")
|
||||||
run_remove_routines(MOONRAKER_DIR)
|
if run_remove_routines(MOONRAKER_DIR):
|
||||||
|
completion_msg.text.append("● Moonraker local repository removed")
|
||||||
if remove_env:
|
if remove_env:
|
||||||
Logger.print_status("Removing Moonraker Python environment ...")
|
Logger.print_status("Removing Moonraker Python environment ...")
|
||||||
run_remove_routines(MOONRAKER_ENV_DIR)
|
if run_remove_routines(MOONRAKER_ENV_DIR):
|
||||||
|
completion_msg.text.append("● Moonraker Python environment removed")
|
||||||
|
|
||||||
|
if completion_msg.text:
|
||||||
|
completion_msg.text.insert(0, "The following actions were performed:")
|
||||||
|
else:
|
||||||
|
completion_msg.color = Color.YELLOW
|
||||||
|
completion_msg.centered = True
|
||||||
|
completion_msg.text = ["Nothing to remove."]
|
||||||
|
|
||||||
|
return completion_msg
|
||||||
|
|
||||||
|
|
||||||
def select_instances_to_remove(
|
def select_instances_to_remove(
|
||||||
@@ -97,19 +122,23 @@ def remove_instances(
|
|||||||
delete_moonraker_env_file(instance)
|
delete_moonraker_env_file(instance)
|
||||||
|
|
||||||
|
|
||||||
def remove_polkit_rules() -> None:
|
def remove_polkit_rules() -> bool:
|
||||||
if not MOONRAKER_DIR.exists():
|
if not MOONRAKER_DIR.exists():
|
||||||
log = "Cannot remove policykit rules. Moonraker directory not found."
|
log = "Cannot remove policykit rules. Moonraker directory not found."
|
||||||
Logger.print_warn(log)
|
Logger.print_warn(log)
|
||||||
return
|
return False
|
||||||
|
|
||||||
try:
|
try:
|
||||||
cmd = [f"{MOONRAKER_DIR}/scripts/set-policykit-rules.sh", "--clear"]
|
cmd = [f"{MOONRAKER_DIR}/scripts/set-policykit-rules.sh", "--clear"]
|
||||||
run(cmd, stderr=PIPE, stdout=DEVNULL, check=True)
|
result = run(cmd, stderr=PIPE, stdout=DEVNULL, check=True)
|
||||||
|
if result.returncode != 0:
|
||||||
|
raise CalledProcessError(result.returncode, cmd)
|
||||||
except CalledProcessError as e:
|
except CalledProcessError as e:
|
||||||
Logger.print_error(f"Error while removing policykit rules: {e}")
|
Logger.print_error(f"Error while removing policykit rules: {e}")
|
||||||
|
return False
|
||||||
|
|
||||||
Logger.print_ok("Policykit rules successfully removed!")
|
Logger.print_ok("Policykit rules successfully removed!")
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
def delete_moonraker_env_file(instance: Moonraker):
|
def delete_moonraker_env_file(instance: Moonraker):
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
@@ -8,6 +8,7 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
|
import json
|
||||||
import subprocess
|
import subprocess
|
||||||
from typing import List
|
from typing import List
|
||||||
|
|
||||||
@@ -27,14 +28,9 @@ from components.moonraker import (
|
|||||||
)
|
)
|
||||||
from components.moonraker.moonraker import Moonraker
|
from components.moonraker.moonraker import Moonraker
|
||||||
from components.moonraker.moonraker_dialogs import print_moonraker_overview
|
from components.moonraker.moonraker_dialogs import print_moonraker_overview
|
||||||
from components.moonraker.services.moonraker_instance_service import (
|
from components.moonraker.moonraker_utils import (
|
||||||
MoonrakerInstanceService,
|
|
||||||
)
|
|
||||||
from components.moonraker.utils.sysdeps_parser import SysDepsParser
|
|
||||||
from components.moonraker.utils.utils import (
|
|
||||||
backup_moonraker_dir,
|
backup_moonraker_dir,
|
||||||
create_example_moonraker_conf,
|
create_example_moonraker_conf,
|
||||||
load_sysdeps_json,
|
|
||||||
)
|
)
|
||||||
from components.webui_client.client_utils import (
|
from components.webui_client.client_utils import (
|
||||||
enable_mainsail_remotemode,
|
enable_mainsail_remotemode,
|
||||||
@@ -42,9 +38,8 @@ from components.webui_client.client_utils import (
|
|||||||
)
|
)
|
||||||
from components.webui_client.mainsail_data import MainsailData
|
from components.webui_client.mainsail_data import MainsailData
|
||||||
from core.instance_manager.instance_manager import InstanceManager
|
from core.instance_manager.instance_manager import InstanceManager
|
||||||
from core.logger import DialogType, Logger
|
from core.logger import Logger
|
||||||
from core.settings.kiauh_settings import KiauhSettings
|
from core.settings.kiauh_settings import KiauhSettings
|
||||||
from core.types.color import Color
|
|
||||||
from utils.common import check_install_dependencies
|
from utils.common import check_install_dependencies
|
||||||
from utils.fs_utils import check_file_exist
|
from utils.fs_utils import check_file_exist
|
||||||
from utils.git_utils import git_clone_wrapper, git_pull_wrapper
|
from utils.git_utils import git_clone_wrapper, git_pull_wrapper
|
||||||
@@ -58,7 +53,6 @@ from utils.sys_utils import (
|
|||||||
cmd_sysctl_manage,
|
cmd_sysctl_manage,
|
||||||
cmd_sysctl_service,
|
cmd_sysctl_service,
|
||||||
create_python_venv,
|
create_python_venv,
|
||||||
get_ipv4_addr,
|
|
||||||
install_python_requirements,
|
install_python_requirements,
|
||||||
parse_packages_from_file,
|
parse_packages_from_file,
|
||||||
)
|
)
|
||||||
@@ -70,18 +64,12 @@ def install_moonraker() -> None:
|
|||||||
if not check_moonraker_install_requirements(klipper_list):
|
if not check_moonraker_install_requirements(klipper_list):
|
||||||
return
|
return
|
||||||
|
|
||||||
instance_service = MoonrakerInstanceService()
|
moonraker_list: List[Moonraker] = get_instances(Moonraker)
|
||||||
instance_service.load_instances()
|
instances: List[Moonraker] = []
|
||||||
|
|
||||||
moonraker_list: List[Moonraker] = instance_service.get_all_instances()
|
|
||||||
new_instances: List[Moonraker] = []
|
|
||||||
selected_option: str | Klipper
|
selected_option: str | Klipper
|
||||||
|
|
||||||
if len(klipper_list) == 1:
|
if len(klipper_list) == 1:
|
||||||
suffix: str = klipper_list[0].suffix
|
instances.append(Moonraker(klipper_list[0].suffix))
|
||||||
new_inst = instance_service.create_new_instance(suffix)
|
|
||||||
new_instances.append(new_inst)
|
|
||||||
|
|
||||||
else:
|
else:
|
||||||
print_moonraker_overview(
|
print_moonraker_overview(
|
||||||
klipper_list,
|
klipper_list,
|
||||||
@@ -100,15 +88,12 @@ def install_moonraker() -> None:
|
|||||||
return
|
return
|
||||||
|
|
||||||
if selected_option == "a":
|
if selected_option == "a":
|
||||||
new_inst_list: List[Moonraker] = (
|
instances.extend([Moonraker(k.suffix) for k in klipper_list])
|
||||||
[instance_service.create_new_instance(k.suffix) for k in klipper_list])
|
|
||||||
new_instances.extend(new_inst_list)
|
|
||||||
else:
|
else:
|
||||||
klipper_instance: Klipper | None = options.get(selected_option)
|
klipper_instance: Klipper | None = options.get(selected_option)
|
||||||
if klipper_instance is None:
|
if klipper_instance is None:
|
||||||
raise Exception("Error selecting instance!")
|
raise Exception("Error selecting instance!")
|
||||||
new_inst = instance_service.create_new_instance(klipper_instance.suffix)
|
instances.append(Moonraker(klipper_instance.suffix))
|
||||||
new_instances.append(new_inst)
|
|
||||||
|
|
||||||
create_example_cfg = get_confirm("Create example moonraker.conf?")
|
create_example_cfg = get_confirm("Create example moonraker.conf?")
|
||||||
|
|
||||||
@@ -117,8 +102,8 @@ def install_moonraker() -> None:
|
|||||||
setup_moonraker_prerequesites()
|
setup_moonraker_prerequesites()
|
||||||
install_moonraker_polkit()
|
install_moonraker_polkit()
|
||||||
|
|
||||||
ports_map = instance_service.get_instance_port_map()
|
used_ports_map = {m.suffix: m.port for m in moonraker_list}
|
||||||
for instance in new_instances:
|
for instance in instances:
|
||||||
instance.create()
|
instance.create()
|
||||||
cmd_sysctl_service(instance.service_file_path.name, "enable")
|
cmd_sysctl_service(instance.service_file_path.name, "enable")
|
||||||
|
|
||||||
@@ -126,7 +111,7 @@ def install_moonraker() -> None:
|
|||||||
# if a webclient and/or it's config is installed, patch
|
# if a webclient and/or it's config is installed, patch
|
||||||
# its update section to the config
|
# its update section to the config
|
||||||
clients = get_existing_clients()
|
clients = get_existing_clients()
|
||||||
create_example_moonraker_conf(instance, ports_map, clients)
|
create_example_moonraker_conf(instance, used_ports_map, clients)
|
||||||
|
|
||||||
cmd_sysctl_service(instance.service_file_path.name, "start")
|
cmd_sysctl_service(instance.service_file_path.name, "start")
|
||||||
|
|
||||||
@@ -137,26 +122,6 @@ def install_moonraker() -> None:
|
|||||||
if MainsailData().client_dir.exists() and len(moonraker_list) > 1:
|
if MainsailData().client_dir.exists() and len(moonraker_list) > 1:
|
||||||
enable_mainsail_remotemode()
|
enable_mainsail_remotemode()
|
||||||
|
|
||||||
instance_service.load_instances()
|
|
||||||
new_instances = [instance_service.get_instance_by_suffix(i.suffix) for i in
|
|
||||||
new_instances]
|
|
||||||
|
|
||||||
ip: str = get_ipv4_addr()
|
|
||||||
# noinspection HttpUrlsUsage
|
|
||||||
url_list = [f"● {i.service_file_path.stem}: http://{ip}:{i.port}" for i in
|
|
||||||
new_instances if i.port]
|
|
||||||
dialog_content = []
|
|
||||||
if url_list:
|
|
||||||
dialog_content.append("You can access Moonraker via the following URL:")
|
|
||||||
dialog_content.extend(url_list)
|
|
||||||
|
|
||||||
Logger.print_dialog(
|
|
||||||
DialogType.CUSTOM,
|
|
||||||
custom_title="Moonraker successfully installed!",
|
|
||||||
custom_color=Color.GREEN,
|
|
||||||
content=dialog_content)
|
|
||||||
|
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
Logger.print_error(f"Error while installing Moonraker: {e}")
|
Logger.print_error(f"Error while installing Moonraker: {e}")
|
||||||
return
|
return
|
||||||
@@ -189,24 +154,16 @@ def setup_moonraker_prerequesites() -> None:
|
|||||||
|
|
||||||
|
|
||||||
def install_moonraker_packages() -> None:
|
def install_moonraker_packages() -> None:
|
||||||
Logger.print_status("Parsing Moonraker system dependencies ...")
|
|
||||||
|
|
||||||
moonraker_deps = []
|
moonraker_deps = []
|
||||||
if MOONRAKER_DEPS_JSON_FILE.exists():
|
|
||||||
Logger.print_info(
|
|
||||||
f"Parsing system dependencies from {MOONRAKER_DEPS_JSON_FILE.name} ...")
|
|
||||||
parser = SysDepsParser()
|
|
||||||
sysdeps = load_sysdeps_json(MOONRAKER_DEPS_JSON_FILE)
|
|
||||||
moonraker_deps.extend(parser.parse_dependencies(sysdeps))
|
|
||||||
|
|
||||||
|
if MOONRAKER_DEPS_JSON_FILE.exists():
|
||||||
|
with open(MOONRAKER_DEPS_JSON_FILE, "r") as deps:
|
||||||
|
moonraker_deps = json.load(deps).get("debian", [])
|
||||||
elif MOONRAKER_INSTALL_SCRIPT.exists():
|
elif MOONRAKER_INSTALL_SCRIPT.exists():
|
||||||
Logger.print_warn(f"{MOONRAKER_DEPS_JSON_FILE.name} not found!")
|
|
||||||
Logger.print_info(
|
|
||||||
f"Parsing system dependencies from {MOONRAKER_INSTALL_SCRIPT.name} ...")
|
|
||||||
moonraker_deps = parse_packages_from_file(MOONRAKER_INSTALL_SCRIPT)
|
moonraker_deps = parse_packages_from_file(MOONRAKER_INSTALL_SCRIPT)
|
||||||
|
|
||||||
if not moonraker_deps:
|
if not moonraker_deps:
|
||||||
raise ValueError("Error parsing Moonraker dependencies!")
|
raise ValueError("Error reading Moonraker dependencies!")
|
||||||
|
|
||||||
check_install_dependencies({*moonraker_deps})
|
check_install_dependencies({*moonraker_deps})
|
||||||
|
|
||||||
|
|||||||
@@ -1,14 +1,13 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
# #
|
# #
|
||||||
# This file may be distributed under the terms of the GNU GPLv3 license #
|
# This file may be distributed under the terms of the GNU GPLv3 license #
|
||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
import json
|
|
||||||
import shutil
|
import shutil
|
||||||
from pathlib import Path
|
|
||||||
from typing import Dict, List, Optional
|
from typing import Dict, List, Optional
|
||||||
|
|
||||||
from components.moonraker import (
|
from components.moonraker import (
|
||||||
@@ -139,12 +138,3 @@ def backup_moonraker_db_dir() -> None:
|
|||||||
bm.backup_directory(
|
bm.backup_directory(
|
||||||
name, source=instance.db_dir, target=MOONRAKER_DB_BACKUP_DIR
|
name, source=instance.db_dir, target=MOONRAKER_DB_BACKUP_DIR
|
||||||
)
|
)
|
||||||
|
|
||||||
def load_sysdeps_json(file: Path) -> Dict[str, List[str]]:
|
|
||||||
try:
|
|
||||||
sysdeps: Dict[str, List[str]] = json.loads(file.read_bytes())
|
|
||||||
except json.JSONDecodeError as e:
|
|
||||||
Logger.print_error(f"Unable to parse {file.name}:\n{e}")
|
|
||||||
return {}
|
|
||||||
else:
|
|
||||||
return sysdeps
|
|
||||||
@@ -1,41 +0,0 @@
|
|||||||
from __future__ import annotations
|
|
||||||
|
|
||||||
from typing import Dict, List
|
|
||||||
|
|
||||||
from components.moonraker.moonraker import Moonraker
|
|
||||||
from utils.instance_utils import get_instances
|
|
||||||
|
|
||||||
|
|
||||||
class MoonrakerInstanceService:
|
|
||||||
__cls_instance = None
|
|
||||||
__instances: List[Moonraker] = []
|
|
||||||
|
|
||||||
def __new__(cls) -> "MoonrakerInstanceService":
|
|
||||||
if cls.__cls_instance is None:
|
|
||||||
cls.__cls_instance = super(MoonrakerInstanceService, cls).__new__(cls)
|
|
||||||
return cls.__cls_instance
|
|
||||||
|
|
||||||
def __init__(self) -> None:
|
|
||||||
if not hasattr(self, "__initialized"):
|
|
||||||
self.__initialized = False
|
|
||||||
if self.__initialized:
|
|
||||||
return
|
|
||||||
self.__initialized = True
|
|
||||||
|
|
||||||
def load_instances(self) -> None:
|
|
||||||
self.__instances = get_instances(Moonraker)
|
|
||||||
|
|
||||||
def create_new_instance(self, suffix: str) -> Moonraker:
|
|
||||||
instance = Moonraker(suffix)
|
|
||||||
self.__instances.append(instance)
|
|
||||||
return instance
|
|
||||||
|
|
||||||
def get_all_instances(self) -> List[Moonraker]:
|
|
||||||
return self.__instances
|
|
||||||
|
|
||||||
def get_instance_by_suffix(self, suffix: str) -> Moonraker | None:
|
|
||||||
instances: List[Moonraker] = [i for i in self.__instances if i.suffix == suffix]
|
|
||||||
return instances[0] if instances else None
|
|
||||||
|
|
||||||
def get_instance_port_map(self) -> Dict[str, int]:
|
|
||||||
return {i.suffix: i.port for i in self.__instances}
|
|
||||||
@@ -1,167 +0,0 @@
|
|||||||
# ======================================================================= #
|
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
|
||||||
# #
|
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
|
||||||
# https://github.com/dw-0/kiauh #
|
|
||||||
# It was modified by Dominik Willner <th33xitus@gmail.com> #
|
|
||||||
# #
|
|
||||||
# The original file is part of Moonraker: #
|
|
||||||
# https://github.com/Arksine/moonraker #
|
|
||||||
# Copyright (C) 2025 Eric Callahan <arksine.code@gmail.com> #
|
|
||||||
# #
|
|
||||||
# This file may be distributed under the terms of the GNU GPLv3 license #
|
|
||||||
# ======================================================================= #
|
|
||||||
|
|
||||||
from __future__ import annotations
|
|
||||||
|
|
||||||
import logging
|
|
||||||
import pathlib
|
|
||||||
import re
|
|
||||||
import shlex
|
|
||||||
from typing import Any, Dict, List, Tuple
|
|
||||||
|
|
||||||
|
|
||||||
def _get_distro_info() -> Dict[str, Any]:
|
|
||||||
release_file = pathlib.Path("/etc/os-release")
|
|
||||||
release_info: Dict[str, str] = {}
|
|
||||||
with release_file.open("r") as f:
|
|
||||||
lexer = shlex.shlex(f, posix=True)
|
|
||||||
lexer.whitespace_split = True
|
|
||||||
for item in list(lexer):
|
|
||||||
if "=" in item:
|
|
||||||
key, val = item.split("=", maxsplit=1)
|
|
||||||
release_info[key] = val
|
|
||||||
return dict(
|
|
||||||
distro_id=release_info.get("ID", ""),
|
|
||||||
distro_version=release_info.get("VERSION_ID", ""),
|
|
||||||
aliases=release_info.get("ID_LIKE", "").split()
|
|
||||||
)
|
|
||||||
|
|
||||||
def _convert_version(version: str) -> Tuple[str | int, ...]:
|
|
||||||
version = version.strip()
|
|
||||||
ver_match = re.match(r"\d+(\.\d+)*((?:-|\.).+)?", version)
|
|
||||||
if ver_match is not None:
|
|
||||||
return tuple([
|
|
||||||
int(part) if part.isdigit() else part
|
|
||||||
for part in re.split(r"\.|-", version)
|
|
||||||
])
|
|
||||||
return (version,)
|
|
||||||
|
|
||||||
class SysDepsParser:
|
|
||||||
def __init__(self, distro_info: Dict[str, Any] | None = None) -> None:
|
|
||||||
if distro_info is None:
|
|
||||||
distro_info = _get_distro_info()
|
|
||||||
self.distro_id: str = distro_info.get("distro_id", "")
|
|
||||||
self.aliases: List[str] = distro_info.get("aliases", [])
|
|
||||||
self.distro_version: Tuple[int | str, ...] = tuple()
|
|
||||||
version = distro_info.get("distro_version")
|
|
||||||
if version:
|
|
||||||
self.distro_version = _convert_version(version)
|
|
||||||
|
|
||||||
def _parse_spec(self, full_spec: str) -> str | None:
|
|
||||||
parts = full_spec.split(";", maxsplit=1)
|
|
||||||
if len(parts) == 1:
|
|
||||||
return full_spec
|
|
||||||
pkg_name = parts[0].strip()
|
|
||||||
expressions = re.split(r"( and | or )", parts[1].strip())
|
|
||||||
if not len(expressions) & 1:
|
|
||||||
# There should always be an odd number of expressions. Each
|
|
||||||
# expression is separated by an "and" or "or" operator
|
|
||||||
logging.info(
|
|
||||||
f"Requirement specifier is missing an expression "
|
|
||||||
f"between logical operators : {full_spec}"
|
|
||||||
)
|
|
||||||
return None
|
|
||||||
last_result: bool = True
|
|
||||||
last_logical_op: str | None = "and"
|
|
||||||
for idx, exp in enumerate(expressions):
|
|
||||||
if idx & 1:
|
|
||||||
if last_logical_op is not None:
|
|
||||||
logging.info(
|
|
||||||
"Requirement specifier contains sequential logical "
|
|
||||||
f"operators: {full_spec}"
|
|
||||||
)
|
|
||||||
return None
|
|
||||||
logical_op = exp.strip()
|
|
||||||
if logical_op not in ("and", "or"):
|
|
||||||
logging.info(
|
|
||||||
f"Invalid logical operator {logical_op} in requirement "
|
|
||||||
f"specifier: {full_spec}")
|
|
||||||
return None
|
|
||||||
last_logical_op = logical_op
|
|
||||||
continue
|
|
||||||
elif last_logical_op is None:
|
|
||||||
logging.info(
|
|
||||||
f"Requirement specifier contains two seqential expressions "
|
|
||||||
f"without a logical operator: {full_spec}")
|
|
||||||
return None
|
|
||||||
dep_parts = re.split(r"(==|!=|<=|>=|<|>)", exp.strip())
|
|
||||||
req_var = dep_parts[0].strip().lower()
|
|
||||||
if len(dep_parts) != 3:
|
|
||||||
logging.info(f"Invalid comparison, must be 3 parts: {full_spec}")
|
|
||||||
return None
|
|
||||||
elif req_var == "distro_id":
|
|
||||||
left_op: str | Tuple[int | str, ...] = self.distro_id
|
|
||||||
right_op = dep_parts[2].strip().strip("\"'")
|
|
||||||
elif req_var == "distro_version":
|
|
||||||
if not self.distro_version:
|
|
||||||
logging.info(
|
|
||||||
"Distro Version not detected, cannot satisfy requirement: "
|
|
||||||
f"{full_spec}"
|
|
||||||
)
|
|
||||||
return None
|
|
||||||
left_op = self.distro_version
|
|
||||||
right_op = _convert_version(dep_parts[2].strip().strip("\"'"))
|
|
||||||
else:
|
|
||||||
logging.info(f"Invalid requirement specifier: {full_spec}")
|
|
||||||
return None
|
|
||||||
operator = dep_parts[1].strip()
|
|
||||||
try:
|
|
||||||
compfunc = {
|
|
||||||
"<": lambda x, y: x < y,
|
|
||||||
">": lambda x, y: x > y,
|
|
||||||
"==": lambda x, y: x == y,
|
|
||||||
"!=": lambda x, y: x != y,
|
|
||||||
">=": lambda x, y: x >= y,
|
|
||||||
"<=": lambda x, y: x <= y
|
|
||||||
}.get(operator, lambda x, y: False)
|
|
||||||
result = compfunc(left_op, right_op)
|
|
||||||
if last_logical_op == "and":
|
|
||||||
last_result &= result
|
|
||||||
else:
|
|
||||||
last_result |= result
|
|
||||||
last_logical_op = None
|
|
||||||
except Exception:
|
|
||||||
logging.exception(f"Error comparing requirements: {full_spec}")
|
|
||||||
return None
|
|
||||||
if last_result:
|
|
||||||
return pkg_name
|
|
||||||
return None
|
|
||||||
|
|
||||||
def parse_dependencies(self, sys_deps: Dict[str, List[str]]) -> List[str]:
|
|
||||||
if not self.distro_id:
|
|
||||||
logging.info(
|
|
||||||
"Failed to detect current distro ID, cannot parse dependencies"
|
|
||||||
)
|
|
||||||
return []
|
|
||||||
all_ids = [self.distro_id] + self.aliases
|
|
||||||
for distro_id in all_ids:
|
|
||||||
if distro_id in sys_deps:
|
|
||||||
if not sys_deps[distro_id]:
|
|
||||||
logging.info(
|
|
||||||
f"Dependency data contains an empty package definition "
|
|
||||||
f"for linux distro '{distro_id}'"
|
|
||||||
)
|
|
||||||
continue
|
|
||||||
processed_deps: List[str] = []
|
|
||||||
for dep in sys_deps[distro_id]:
|
|
||||||
parsed_dep = self._parse_spec(dep)
|
|
||||||
if parsed_dep is not None:
|
|
||||||
processed_deps.append(parsed_dep)
|
|
||||||
return processed_deps
|
|
||||||
else:
|
|
||||||
logging.info(
|
|
||||||
f"Dependency data has no package definition for linux "
|
|
||||||
f"distro '{self.distro_id}'"
|
|
||||||
)
|
|
||||||
return []
|
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
@@ -37,6 +37,7 @@ from components.webui_client.client_utils import (
|
|||||||
)
|
)
|
||||||
from core.instance_manager.instance_manager import InstanceManager
|
from core.instance_manager.instance_manager import InstanceManager
|
||||||
from core.logger import DialogType, Logger
|
from core.logger import DialogType, Logger
|
||||||
|
from core.services.message_service import Message
|
||||||
from core.settings.kiauh_settings import KiauhSettings
|
from core.settings.kiauh_settings import KiauhSettings
|
||||||
from core.types.color import Color
|
from core.types.color import Color
|
||||||
from utils.common import backup_printer_config_dir, check_install_dependencies
|
from utils.common import backup_printer_config_dir, check_install_dependencies
|
||||||
@@ -55,14 +56,21 @@ def install_client(
|
|||||||
client: BaseWebClient,
|
client: BaseWebClient,
|
||||||
settings: KiauhSettings,
|
settings: KiauhSettings,
|
||||||
reinstall: bool = False,
|
reinstall: bool = False,
|
||||||
) -> None:
|
) -> Message:
|
||||||
|
completion_msg = Message(
|
||||||
|
title=f"{client.display_name} Installation Process completed",
|
||||||
|
color=Color.GREEN,
|
||||||
|
)
|
||||||
mr_instances: List[Moonraker] = get_instances(Moonraker)
|
mr_instances: List[Moonraker] = get_instances(Moonraker)
|
||||||
|
|
||||||
enable_remotemode = False
|
enable_remotemode = False
|
||||||
if not mr_instances:
|
if not mr_instances:
|
||||||
print_moonraker_not_found_dialog(client.display_name)
|
print_moonraker_not_found_dialog(client.display_name)
|
||||||
if not get_confirm(f"Continue {client.display_name} installation?"):
|
if not get_confirm(f"Continue {client.display_name} installation?"):
|
||||||
return
|
completion_msg.color = Color.YELLOW
|
||||||
|
completion_msg.title = f"{client.display_name} Installation Process aborted"
|
||||||
|
completion_msg.text.append("Installation was aborted by the user!")
|
||||||
|
return completion_msg
|
||||||
|
|
||||||
# if moonraker is not installed or multiple instances
|
# if moonraker is not installed or multiple instances
|
||||||
# are installed we enable mainsails remote mode
|
# are installed we enable mainsails remote mode
|
||||||
@@ -90,9 +98,9 @@ def install_client(
|
|||||||
default_port if reinstall else get_client_port_selection(client, settings)
|
default_port if reinstall else get_client_port_selection(client, settings)
|
||||||
)
|
)
|
||||||
|
|
||||||
check_install_dependencies({"nginx"})
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
check_install_dependencies({"nginx"})
|
||||||
|
|
||||||
download_client(client)
|
download_client(client)
|
||||||
if enable_remotemode and client.client == WebClientType.MAINSAIL:
|
if enable_remotemode and client.client == WebClientType.MAINSAIL:
|
||||||
enable_mainsail_remotemode()
|
enable_mainsail_remotemode()
|
||||||
@@ -130,23 +138,17 @@ def install_client(
|
|||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
Logger.print_error(e)
|
Logger.print_error(e)
|
||||||
Logger.print_dialog(
|
completion_msg.color = Color.RED
|
||||||
DialogType.ERROR,
|
completion_msg.title = f"{client.display_name} Installation Process failed!"
|
||||||
center_content=True,
|
completion_msg.text.append(
|
||||||
content=[f"{client.display_name} installation failed!"],
|
f"An unexpected error occured. Please see the output above. {client.display_name} installation failed!")
|
||||||
)
|
return completion_msg
|
||||||
return
|
|
||||||
|
|
||||||
# noinspection HttpUrlsUsage
|
# noinspection HttpUrlsUsage
|
||||||
Logger.print_dialog(
|
completion_msg.text.append(
|
||||||
DialogType.CUSTOM,
|
f"Open {client.display_name} now on: http://{get_ipv4_addr()}:{port}")
|
||||||
custom_title=f"{client.display_name} installation complete!",
|
|
||||||
custom_color=Color.GREEN,
|
return completion_msg
|
||||||
center_content=True,
|
|
||||||
content=[
|
|
||||||
f"Open {client.display_name} now on: http://{get_ipv4_addr()}{'' if port == 80 else f':{port}'}",
|
|
||||||
],
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
def download_client(client: BaseWebClient) -> None:
|
def download_client(client: BaseWebClient) -> None:
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
@@ -65,7 +65,8 @@ class ClientInstallMenu(BaseMenu):
|
|||||||
print(menu, end="")
|
print(menu, end="")
|
||||||
|
|
||||||
def reinstall_client(self, **kwargs) -> None:
|
def reinstall_client(self, **kwargs) -> None:
|
||||||
install_client(self.client, settings=self.settings, reinstall=True)
|
completion_msg = install_client(self.client, settings=self.settings, reinstall=True)
|
||||||
|
self.message_service.set_message(completion_msg)
|
||||||
|
|
||||||
def change_listen_port(self, **kwargs) -> None:
|
def change_listen_port(self, **kwargs) -> None:
|
||||||
curr_port = self._get_current_port()
|
curr_port = self._get_current_port()
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
@@ -27,12 +27,6 @@ class DialogType(Enum):
|
|||||||
LINE_WIDTH = 53
|
LINE_WIDTH = 53
|
||||||
|
|
||||||
|
|
||||||
BORDER_TOP: str = "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓"
|
|
||||||
BORDER_BOTTOM: str = "┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛"
|
|
||||||
BORDER_TITLE: str = "┠───────────────────────────────────────────────────────┨"
|
|
||||||
BORDER_LEFT: str = "┃"
|
|
||||||
BORDER_RIGHT: str = "┃"
|
|
||||||
|
|
||||||
class Logger:
|
class Logger:
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def print_info(msg, prefix=True, start="", end="\n") -> None:
|
def print_info(msg, prefix=True, start="", end="\n") -> None:
|
||||||
@@ -87,27 +81,23 @@ class Logger:
|
|||||||
:param margin_top: The number of empty lines to print before the dialog.
|
:param margin_top: The number of empty lines to print before the dialog.
|
||||||
:param margin_bottom: The number of empty lines to print after the dialog.
|
:param margin_bottom: The number of empty lines to print after the dialog.
|
||||||
"""
|
"""
|
||||||
color = Logger._get_dialog_color(title, custom_color)
|
dialog_color = Logger._get_dialog_color(title, custom_color)
|
||||||
dialog_title = Logger._get_dialog_title(title, custom_title)
|
dialog_title = Logger._get_dialog_title(title, custom_title)
|
||||||
|
dialog_title_formatted = Logger._format_dialog_title(dialog_title, dialog_color)
|
||||||
|
dialog_content = Logger.format_content(
|
||||||
|
content,
|
||||||
|
LINE_WIDTH,
|
||||||
|
dialog_color,
|
||||||
|
center_content,
|
||||||
|
)
|
||||||
|
top = Logger._format_top_border(dialog_color)
|
||||||
|
bottom = Logger._format_bottom_border(dialog_color)
|
||||||
|
|
||||||
print("\n" * margin_top)
|
print("\n" * margin_top)
|
||||||
|
print(
|
||||||
print(Color.apply(BORDER_TOP, color))
|
f"{top}{dialog_title_formatted}{dialog_content}{bottom}",
|
||||||
|
end="",
|
||||||
if dialog_title:
|
)
|
||||||
print(Color.apply(f"┃ {dialog_title:^{LINE_WIDTH}} ┃", color))
|
|
||||||
print(Color.apply(BORDER_TITLE, color))
|
|
||||||
|
|
||||||
if content:
|
|
||||||
print(Logger.format_content(
|
|
||||||
content,
|
|
||||||
LINE_WIDTH,
|
|
||||||
color,
|
|
||||||
center_content,
|
|
||||||
))
|
|
||||||
|
|
||||||
print(Color.apply(BORDER_BOTTOM, color))
|
|
||||||
|
|
||||||
print("\n" * margin_bottom)
|
print("\n" * margin_bottom)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
@@ -129,6 +119,31 @@ class Logger:
|
|||||||
|
|
||||||
return color
|
return color
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def _format_top_border(color: Color) -> str:
|
||||||
|
_border = Color.apply(
|
||||||
|
"┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n", color
|
||||||
|
)
|
||||||
|
return _border
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def _format_bottom_border(color: Color) -> str:
|
||||||
|
_border = Color.apply(
|
||||||
|
"\n┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛", color
|
||||||
|
)
|
||||||
|
return _border
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def _format_dialog_title(title: str | None, color: Color) -> str:
|
||||||
|
if title is None:
|
||||||
|
return ""
|
||||||
|
|
||||||
|
_title = Color.apply(f"┃ {title:^{LINE_WIDTH}} ┃\n", color)
|
||||||
|
_title += Color.apply(
|
||||||
|
"┠───────────────────────────────────────────────────────┨\n", color
|
||||||
|
)
|
||||||
|
return _title
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def format_content(
|
def format_content(
|
||||||
content: List[str],
|
content: List[str],
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
@@ -15,7 +15,6 @@ from components.klipper import KLIPPER_DIR
|
|||||||
from components.klipper.klipper import Klipper
|
from components.klipper.klipper import Klipper
|
||||||
from components.klipper_firmware.menus.klipper_build_menu import (
|
from components.klipper_firmware.menus.klipper_build_menu import (
|
||||||
KlipperBuildFirmwareMenu,
|
KlipperBuildFirmwareMenu,
|
||||||
KlipperKConfigMenu,
|
|
||||||
)
|
)
|
||||||
from components.klipper_firmware.menus.klipper_flash_menu import (
|
from components.klipper_firmware.menus.klipper_flash_menu import (
|
||||||
KlipperFlashMethodMenu,
|
KlipperFlashMethodMenu,
|
||||||
@@ -77,15 +76,12 @@ class AdvancedMenu(BaseMenu):
|
|||||||
rollback_repository(MOONRAKER_DIR, Moonraker)
|
rollback_repository(MOONRAKER_DIR, Moonraker)
|
||||||
|
|
||||||
def build(self, **kwargs) -> None:
|
def build(self, **kwargs) -> None:
|
||||||
KlipperKConfigMenu().run()
|
|
||||||
KlipperBuildFirmwareMenu(previous_menu=self.__class__).run()
|
KlipperBuildFirmwareMenu(previous_menu=self.__class__).run()
|
||||||
|
|
||||||
def flash(self, **kwargs) -> None:
|
def flash(self, **kwargs) -> None:
|
||||||
KlipperKConfigMenu().run()
|
|
||||||
KlipperFlashMethodMenu(previous_menu=self.__class__).run()
|
KlipperFlashMethodMenu(previous_menu=self.__class__).run()
|
||||||
|
|
||||||
def build_flash(self, **kwargs) -> None:
|
def build_flash(self, **kwargs) -> None:
|
||||||
KlipperKConfigMenu().run()
|
|
||||||
KlipperBuildFirmwareMenu(previous_menu=KlipperFlashMethodMenu).run()
|
KlipperBuildFirmwareMenu(previous_menu=KlipperFlashMethodMenu).run()
|
||||||
KlipperFlashMethodMenu(previous_menu=self.__class__).run()
|
KlipperFlashMethodMenu(previous_menu=self.__class__).run()
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
@@ -13,7 +13,7 @@ from typing import Type
|
|||||||
|
|
||||||
from components.klipper.klipper_utils import backup_klipper_dir
|
from components.klipper.klipper_utils import backup_klipper_dir
|
||||||
from components.klipperscreen.klipperscreen import backup_klipperscreen_dir
|
from components.klipperscreen.klipperscreen import backup_klipperscreen_dir
|
||||||
from components.moonraker.utils.utils import (
|
from components.moonraker.moonraker_utils import (
|
||||||
backup_moonraker_db_dir,
|
backup_moonraker_db_dir,
|
||||||
backup_moonraker_dir,
|
backup_moonraker_dir,
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
@@ -75,27 +75,20 @@ class InstallMenu(BaseMenu):
|
|||||||
print(menu, end="")
|
print(menu, end="")
|
||||||
|
|
||||||
def install_klipper(self, **kwargs) -> None:
|
def install_klipper(self, **kwargs) -> None:
|
||||||
klipper_setup.install_klipper()
|
completion_msg = klipper_setup.install_klipper()
|
||||||
|
self.message_service.set_message(completion_msg)
|
||||||
|
|
||||||
def install_moonraker(self, **kwargs) -> None:
|
def install_moonraker(self, **kwargs) -> None:
|
||||||
moonraker_setup.install_moonraker()
|
moonraker_setup.install_moonraker()
|
||||||
|
|
||||||
def install_mainsail(self, **kwargs) -> None:
|
def install_mainsail(self, **kwargs) -> None:
|
||||||
client: MainsailData = MainsailData()
|
self._install_client(MainsailData())
|
||||||
if client.client_dir.exists():
|
|
||||||
ClientInstallMenu(client, self.__class__).run()
|
|
||||||
else:
|
|
||||||
install_client(client, settings=KiauhSettings())
|
|
||||||
|
|
||||||
def install_mainsail_config(self, **kwargs) -> None:
|
def install_mainsail_config(self, **kwargs) -> None:
|
||||||
install_client_config(MainsailData())
|
install_client_config(MainsailData())
|
||||||
|
|
||||||
def install_fluidd(self, **kwargs) -> None:
|
def install_fluidd(self, **kwargs) -> None:
|
||||||
client: FluiddData = FluiddData()
|
self._install_client(FluiddData())
|
||||||
if client.client_dir.exists():
|
|
||||||
ClientInstallMenu(client, self.__class__).run()
|
|
||||||
else:
|
|
||||||
install_client(client, settings=KiauhSettings())
|
|
||||||
|
|
||||||
def install_fluidd_config(self, **kwargs) -> None:
|
def install_fluidd_config(self, **kwargs) -> None:
|
||||||
install_client_config(FluiddData())
|
install_client_config(FluiddData())
|
||||||
@@ -105,3 +98,10 @@ class InstallMenu(BaseMenu):
|
|||||||
|
|
||||||
def install_crowsnest(self, **kwargs) -> None:
|
def install_crowsnest(self, **kwargs) -> None:
|
||||||
install_crowsnest()
|
install_crowsnest()
|
||||||
|
|
||||||
|
def _install_client(self, client: MainsailData | FluiddData) -> None:
|
||||||
|
if client.client_dir.exists():
|
||||||
|
ClientInstallMenu(client, self.__class__).run()
|
||||||
|
else:
|
||||||
|
completion_msg = install_client(client, settings=KiauhSettings())
|
||||||
|
self.message_service.set_message(completion_msg)
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
@@ -16,7 +16,7 @@ from components.crowsnest.crowsnest import get_crowsnest_status
|
|||||||
from components.klipper.klipper_utils import get_klipper_status
|
from components.klipper.klipper_utils import get_klipper_status
|
||||||
from components.klipperscreen.klipperscreen import get_klipperscreen_status
|
from components.klipperscreen.klipperscreen import get_klipperscreen_status
|
||||||
from components.log_uploads.menus.log_upload_menu import LogUploadMenu
|
from components.log_uploads.menus.log_upload_menu import LogUploadMenu
|
||||||
from components.moonraker.utils.utils import get_moonraker_status
|
from components.moonraker.moonraker_utils import get_moonraker_status
|
||||||
from components.webui_client.client_utils import (
|
from components.webui_client.client_utils import (
|
||||||
get_client_status,
|
get_client_status,
|
||||||
get_current_client_config,
|
get_current_client_config,
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
@@ -15,13 +15,15 @@ from typing import Literal, Tuple, Type
|
|||||||
from components.klipper import KLIPPER_DIR, KLIPPER_REPO_URL
|
from components.klipper import KLIPPER_DIR, KLIPPER_REPO_URL
|
||||||
from components.klipper.klipper_utils import get_klipper_status
|
from components.klipper.klipper_utils import get_klipper_status
|
||||||
from components.moonraker import MOONRAKER_DIR, MOONRAKER_REPO_URL
|
from components.moonraker import MOONRAKER_DIR, MOONRAKER_REPO_URL
|
||||||
from components.moonraker.utils.utils import get_moonraker_status
|
from components.moonraker.moonraker_utils import get_moonraker_status
|
||||||
from core.logger import DialogType, Logger
|
from core.logger import DialogType, Logger
|
||||||
from core.menus import Option
|
from core.menus import Option
|
||||||
from core.menus.base_menu import BaseMenu
|
from core.menus.base_menu import BaseMenu
|
||||||
from core.settings.kiauh_settings import KiauhSettings, RepoSettings
|
from core.settings.kiauh_settings import KiauhSettings, RepoSettings
|
||||||
from core.types.color import Color
|
from core.types.color import Color
|
||||||
|
from core.types.component_status import ComponentStatus
|
||||||
from procedures.switch_repo import run_switch_repo_routine
|
from procedures.switch_repo import run_switch_repo_routine
|
||||||
|
from utils.git_utils import get_repo_name
|
||||||
from utils.input_utils import get_confirm, get_string_input
|
from utils.input_utils import get_confirm, get_string_input
|
||||||
|
|
||||||
|
|
||||||
@@ -139,12 +141,12 @@ class SettingsMenu(BaseMenu):
|
|||||||
|
|
||||||
repo = get_string_input(
|
repo = get_string_input(
|
||||||
"Enter new repository URL",
|
"Enter new repository URL",
|
||||||
regex=r"^[\w/.:-]+$",
|
regex="^[\w/.:-]+$",
|
||||||
default=KLIPPER_REPO_URL if repo_name == "klipper" else MOONRAKER_REPO_URL,
|
default=KLIPPER_REPO_URL if repo_name == "klipper" else MOONRAKER_REPO_URL,
|
||||||
)
|
)
|
||||||
branch = get_string_input(
|
branch = get_string_input(
|
||||||
"Enter new branch name",
|
"Enter new branch name",
|
||||||
regex=r"^.+$",
|
regex="^.+$",
|
||||||
default="master"
|
default="master"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
@@ -21,7 +21,7 @@ from components.klipperscreen.klipperscreen import (
|
|||||||
update_klipperscreen,
|
update_klipperscreen,
|
||||||
)
|
)
|
||||||
from components.moonraker.moonraker_setup import update_moonraker
|
from components.moonraker.moonraker_setup import update_moonraker
|
||||||
from components.moonraker.utils.utils import get_moonraker_status
|
from components.moonraker.moonraker_utils import get_moonraker_status
|
||||||
from components.webui_client.client_config.client_config_setup import (
|
from components.webui_client.client_config.client_config_setup import (
|
||||||
update_client_config,
|
update_client_config,
|
||||||
)
|
)
|
||||||
|
|||||||
13
kiauh/core/menus/utils/menu_utils.py
Normal file
13
kiauh/core/menus/utils/menu_utils.py
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
# ======================================================================= #
|
||||||
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
|
# #
|
||||||
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
|
# https://github.com/dw-0/kiauh #
|
||||||
|
# #
|
||||||
|
# This file may be distributed under the terms of the GNU GPLv3 license #
|
||||||
|
# ======================================================================= #
|
||||||
|
from core.types.color import Color
|
||||||
|
|
||||||
|
|
||||||
|
def get_checkbox_state(checked: bool) -> str:
|
||||||
|
return f"[{Color.apply('x', Color.CYAN)}]" if checked else "[ ]"
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
@@ -188,7 +188,7 @@ class OctoappExtension(BaseExtension):
|
|||||||
Logger.print_status("Removing OctoApp for Klipper store directory ...")
|
Logger.print_status("Removing OctoApp for Klipper store directory ...")
|
||||||
|
|
||||||
klipper_instances: List[Moonraker] = get_instances(Klipper)
|
klipper_instances: List[Moonraker] = get_instances(Klipper)
|
||||||
|
|
||||||
for instance in klipper_instances:
|
for instance in klipper_instances:
|
||||||
store_dir = instance.data_dir.joinpath("octoapp-store")
|
store_dir = instance.data_dir.joinpath("octoapp-store")
|
||||||
if not store_dir.exists():
|
if not store_dir.exists():
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
@@ -31,7 +31,7 @@ def change_system_hostname() -> None:
|
|||||||
"http://<hostname>.local",
|
"http://<hostname>.local",
|
||||||
"\n\n",
|
"\n\n",
|
||||||
"Example: If you set your hostname to 'my-printer', you can access an "
|
"Example: If you set your hostname to 'my-printer', you can access an "
|
||||||
"installed webinterface by typing 'http://my-printer.local' in the "
|
"installed webinterface by tyoing 'http://my-printer.local' in the "
|
||||||
"browser.",
|
"browser.",
|
||||||
],
|
],
|
||||||
custom_title="CHANGE SYSTEM HOSTNAME",
|
custom_title="CHANGE SYSTEM HOSTNAME",
|
||||||
@@ -51,7 +51,7 @@ def change_system_hostname() -> None:
|
|||||||
)
|
)
|
||||||
hostname = get_string_input(
|
hostname = get_string_input(
|
||||||
"Enter the new hostname",
|
"Enter the new hostname",
|
||||||
regex=r"^[a-z0-9]+([a-z0-9-]*[a-z0-9])?$",
|
regex="^[a-z0-9]+([a-z0-9-]*[a-z0-9])?$",
|
||||||
)
|
)
|
||||||
if not get_confirm(f"Change the hostname to '{hostname}'?", default_choice=False):
|
if not get_confirm(f"Change the hostname to '{hostname}'?", default_choice=False):
|
||||||
Logger.print_info("Aborting hostname change ...")
|
Logger.print_info("Aborting hostname change ...")
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
# Copyright (C) 2020 - 2025 Dominik Willner <th33xitus@gmail.com> #
|
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||||
# #
|
# #
|
||||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||||
# https://github.com/dw-0/kiauh #
|
# https://github.com/dw-0/kiauh #
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user