mirror of
https://github.com/dw-0/kiauh.git
synced 2025-12-26 09:13:35 +05:00
Compare commits
3 Commits
v5
...
5b5baf9810
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5b5baf9810 | ||
|
|
0c6c8bdabf | ||
|
|
f225ed028d |
@@ -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 ...")
|
||||||
|
|||||||
@@ -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,6 +174,8 @@ 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
|
||||||
@@ -223,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,
|
||||||
|
|||||||
@@ -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"""
|
||||||
|
|||||||
@@ -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()
|
|
||||||
|
|||||||
@@ -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):
|
||||||
|
|||||||
@@ -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()}:{port}",
|
|
||||||
],
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
def download_client(client: BaseWebClient) -> None:
|
def download_client(client: BaseWebClient) -> None:
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
0
kiauh/core/menus/utils/__init__.py
Normal file
0
kiauh/core/menus/utils/__init__.py
Normal file
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 "[ ]"
|
||||||
Reference in New Issue
Block a user