feat: implement completion message for klipper remove process

Signed-off-by: Dominik Willner <th33xitus@gmail.com>
This commit is contained in:
dw-0
2024-10-27 11:27:41 +01:00
parent e274e3c00d
commit 9b1aba207c
2 changed files with 41 additions and 29 deletions

View File

@@ -15,6 +15,8 @@ from components.klipper.klipper import Klipper
from components.klipper.klipper_dialogs import print_instance_overview from components.klipper.klipper_dialogs import print_instance_overview
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
@@ -25,7 +27,11 @@ def run_klipper_removal(
remove_service: bool, remove_service: bool,
remove_dir: bool, remove_dir: bool,
remove_env: bool, remove_env: bool,
) -> None: ) -> Message:
completion_msg = Message(
title="Klipper Removal Process completed",
color=Color.GREEN,
)
klipper_instances: List[Klipper] = get_instances(Klipper) klipper_instances: List[Klipper] = get_instances(Klipper)
if remove_service: if remove_service:
@@ -33,20 +39,36 @@ def run_klipper_removal(
if klipper_instances: if klipper_instances:
instances_to_remove = select_instances_to_remove(klipper_instances) instances_to_remove = select_instances_to_remove(klipper_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"● Klipper instances removed: {', '.join(instance_names)}"
completion_msg.text.append(txt)
else: else:
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"):
Logger.print_info("There are still other Klipper services installed:") completion_msg.text = [
Logger.print_info(f"'{KLIPPER_DIR}' was not removed.", prefix=False) "Some Klipper services are still installed:",
Logger.print_info(f"'{KLIPPER_ENV_DIR}' was not removed.", prefix=False) f"'{KLIPPER_DIR}' was not removed, even though selected for removal.",
f"'{KLIPPER_ENV_DIR}' was not removed, even though selected for removal.",
]
else: else:
if remove_dir: if remove_dir:
Logger.print_status("Removing Klipper local repository ...") Logger.print_status("Removing Klipper local repository ...")
run_remove_routines(KLIPPER_DIR) if run_remove_routines(KLIPPER_DIR):
completion_msg.text.append("● Klipper local repository removed")
if remove_env: if remove_env:
Logger.print_status("Removing Klipper Python environment ...") Logger.print_status("Removing Klipper Python environment ...")
run_remove_routines(KLIPPER_ENV_DIR) if run_remove_routines(KLIPPER_ENV_DIR):
completion_msg.text.append("● Klipper 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(instances: List[Klipper]) -> List[Klipper] | None: def select_instances_to_remove(instances: List[Klipper]) -> List[Klipper] | None:

View File

@@ -21,14 +21,16 @@ from core.types.color import Color
class KlipperRemoveMenu(BaseMenu): class KlipperRemoveMenu(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 Klipper" self.title = "Remove Klipper"
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.footer_type = FooterType.BACK
self.remove_klipper_service = False self.remove_klipper_service = False
self.remove_klipper_dir = False self.remove_klipper_dir = False
self.remove_klipper_env = False self.remove_klipper_env = 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
@@ -50,13 +52,14 @@ class KlipperRemoveMenu(BaseMenu):
o1 = checked if self.remove_klipper_service else unchecked o1 = checked if self.remove_klipper_service else unchecked
o2 = checked if self.remove_klipper_dir else unchecked o2 = checked if self.remove_klipper_dir else unchecked
o3 = checked if self.remove_klipper_env else unchecked o3 = checked if self.remove_klipper_env else unchecked
sel_state = f"{'Select'if not self.select_state else 'Deselect'} everything"
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 ║
@@ -69,10 +72,10 @@ class KlipperRemoveMenu(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_klipper_service = self.selection_state self.remove_klipper_service = self.select_state
self.remove_klipper_dir = self.selection_state self.remove_klipper_dir = self.select_state
self.remove_klipper_env = self.selection_state self.remove_klipper_env = self.select_state
def toggle_remove_klipper_service(self, **kwargs) -> None: def toggle_remove_klipper_service(self, **kwargs) -> None:
self.remove_klipper_service = not self.remove_klipper_service self.remove_klipper_service = not self.remove_klipper_service
@@ -89,30 +92,17 @@ class KlipperRemoveMenu(BaseMenu):
and not self.remove_klipper_dir and not self.remove_klipper_dir
and not self.remove_klipper_env and not self.remove_klipper_env
): ):
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
klipper_remove.run_klipper_removal( completion_msg = klipper_remove.run_klipper_removal(
self.remove_klipper_service, self.remove_klipper_service,
self.remove_klipper_dir, self.remove_klipper_dir,
self.remove_klipper_env, self.remove_klipper_env,
) )
self.message_service.set_message(completion_msg)
self.remove_klipper_service = False self.remove_klipper_service = False
self.remove_klipper_dir = False self.remove_klipper_dir = False
self.remove_klipper_env = False self.remove_klipper_env = 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()