From 9b1aba207cae61972f944bde748333c02ef9b36f Mon Sep 17 00:00:00 2001 From: dw-0 Date: Sun, 27 Oct 2024 11:27:41 +0100 Subject: [PATCH] feat: implement completion message for klipper remove process Signed-off-by: Dominik Willner --- kiauh/components/klipper/klipper_remove.py | 34 ++++++++++++++---- .../klipper/menus/klipper_remove_menu.py | 36 +++++++------------ 2 files changed, 41 insertions(+), 29 deletions(-) diff --git a/kiauh/components/klipper/klipper_remove.py b/kiauh/components/klipper/klipper_remove.py index 773a604..05b2957 100644 --- a/kiauh/components/klipper/klipper_remove.py +++ b/kiauh/components/klipper/klipper_remove.py @@ -15,6 +15,8 @@ from components.klipper.klipper import Klipper from components.klipper.klipper_dialogs import print_instance_overview from core.instance_manager.instance_manager import InstanceManager 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.input_utils import get_selection_input from utils.instance_utils import get_instances @@ -25,7 +27,11 @@ def run_klipper_removal( remove_service: bool, remove_dir: bool, remove_env: bool, -) -> None: +) -> Message: + completion_msg = Message( + title="Klipper Removal Process completed", + color=Color.GREEN, + ) klipper_instances: List[Klipper] = get_instances(Klipper) if remove_service: @@ -33,20 +39,36 @@ def run_klipper_removal( if klipper_instances: instances_to_remove = select_instances_to_remove(klipper_instances) 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: Logger.print_info("No Klipper Services installed! Skipped ...") if (remove_dir or remove_env) and unit_file_exists("klipper", suffix="service"): - Logger.print_info("There are still other Klipper services installed:") - Logger.print_info(f"● '{KLIPPER_DIR}' was not removed.", prefix=False) - Logger.print_info(f"● '{KLIPPER_ENV_DIR}' was not removed.", prefix=False) + completion_msg.text = [ + "Some Klipper services are still installed:", + f"● '{KLIPPER_DIR}' was not removed, even though selected for removal.", + f"● '{KLIPPER_ENV_DIR}' was not removed, even though selected for removal.", + ] else: if remove_dir: 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: 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: diff --git a/kiauh/components/klipper/menus/klipper_remove_menu.py b/kiauh/components/klipper/menus/klipper_remove_menu.py index 4785806..344686e 100644 --- a/kiauh/components/klipper/menus/klipper_remove_menu.py +++ b/kiauh/components/klipper/menus/klipper_remove_menu.py @@ -21,14 +21,16 @@ from core.types.color import Color class KlipperRemoveMenu(BaseMenu): def __init__(self, previous_menu: Type[BaseMenu] | None = None): super().__init__() + self.title = "Remove Klipper" self.title_color = Color.RED self.previous_menu: Type[BaseMenu] | None = previous_menu self.footer_type = FooterType.BACK + self.remove_klipper_service = False self.remove_klipper_dir = 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: from core.menus.remove_menu import RemoveMenu @@ -50,13 +52,14 @@ class KlipperRemoveMenu(BaseMenu): o1 = checked if self.remove_klipper_service else unchecked 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" menu = textwrap.dedent( f""" ╟───────────────────────────────────────────────────────╢ ║ Enter a number and hit enter to select / deselect ║ ║ the specific option for removal. ║ ╟───────────────────────────────────────────────────────╢ - ║ a) {self._get_selection_state_str():37} ║ + ║ a) {sel_state:49} ║ ╟───────────────────────────────────────────────────────╢ ║ 1) {o1} Remove Service ║ ║ 2) {o2} Remove Local Repository ║ @@ -69,10 +72,10 @@ class KlipperRemoveMenu(BaseMenu): print(menu, end="") def toggle_all(self, **kwargs) -> None: - self.selection_state = not self.selection_state - self.remove_klipper_service = self.selection_state - self.remove_klipper_dir = self.selection_state - self.remove_klipper_env = self.selection_state + self.select_state = not self.select_state + self.remove_klipper_service = self.select_state + self.remove_klipper_dir = self.select_state + self.remove_klipper_env = self.select_state def toggle_remove_klipper_service(self, **kwargs) -> None: 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_env ): - print( - Color.apply( - "Nothing selected! Select options to remove first.", Color.RED - ) - ) + msg = "Nothing selected! Select options to remove first." + print(Color.apply(msg, Color.RED)) return - klipper_remove.run_klipper_removal( + completion_msg = klipper_remove.run_klipper_removal( self.remove_klipper_service, self.remove_klipper_dir, self.remove_klipper_env, ) + self.message_service.set_message(completion_msg) self.remove_klipper_service = False self.remove_klipper_dir = 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()