From 61618d064d5879b21c04f2a5d079247fcd89be58 Mon Sep 17 00:00:00 2001 From: dw-0 Date: Sat, 29 Jun 2024 08:55:51 +0200 Subject: [PATCH] refactor: go back do remove menu when component was removed Signed-off-by: Dominik Willner --- .../klipper/menus/klipper_remove_menu.py | 37 ++++++++++----- .../moonraker/menus/moonraker_remove_menu.py | 39 ++++++++++----- .../components/webui_client/client_remove.py | 8 ++-- .../webui_client/menus/client_remove_menu.py | 47 ++++++++++++------- 4 files changed, 85 insertions(+), 46 deletions(-) diff --git a/kiauh/components/klipper/menus/klipper_remove_menu.py b/kiauh/components/klipper/menus/klipper_remove_menu.py index b80983b..f61459b 100644 --- a/kiauh/components/klipper/menus/klipper_remove_menu.py +++ b/kiauh/components/klipper/menus/klipper_remove_menu.py @@ -25,7 +25,8 @@ class KlipperRemoveMenu(BaseMenu): self.remove_klipper_service = False self.remove_klipper_dir = False self.remove_klipper_env = False - self.delete_klipper_logs = False + self.remove_klipper_logs = False + self.selection_state = False def set_previous_menu(self, previous_menu: Optional[Type[BaseMenu]]) -> None: from core.menus.remove_menu import RemoveMenu @@ -36,7 +37,7 @@ class KlipperRemoveMenu(BaseMenu): def set_options(self) -> None: self.options = { - "0": Option(method=self.toggle_all, menu=False), + "a": Option(method=self.toggle_all, menu=False), "1": Option(method=self.toggle_remove_klipper_service, menu=False), "2": Option(method=self.toggle_remove_klipper_dir, menu=False), "3": Option(method=self.toggle_remove_klipper_env, menu=False), @@ -53,7 +54,7 @@ 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 - o4 = checked if self.delete_klipper_logs else unchecked + o4 = checked if self.remove_klipper_logs else unchecked menu = textwrap.dedent( f""" ╔═══════════════════════════════════════════════════════╗ @@ -62,7 +63,7 @@ class KlipperRemoveMenu(BaseMenu): ║ Enter a number and hit enter to select / deselect ║ ║ the specific option for removal. ║ ╟───────────────────────────────────────────────────────╢ - ║ 0) Select everything ║ + ║ a) {self._get_selection_state_str():37} ║ ╟───────────────────────────────────────────────────────╢ ║ 1) {o1} Remove Service ║ ║ 2) {o2} Remove Local Repository ║ @@ -76,10 +77,11 @@ class KlipperRemoveMenu(BaseMenu): print(menu, end="") def toggle_all(self, **kwargs) -> None: - self.remove_klipper_service = True - self.remove_klipper_dir = True - self.remove_klipper_env = True - self.delete_klipper_logs = True + self.remove_klipper_service = not self.remove_klipper_service + self.remove_klipper_dir = not self.remove_klipper_dir + self.remove_klipper_env = not self.remove_klipper_env + self.remove_klipper_logs = not self.remove_klipper_logs + self.selection_state = not self.selection_state def toggle_remove_klipper_service(self, **kwargs) -> None: self.remove_klipper_service = not self.remove_klipper_service @@ -91,14 +93,14 @@ class KlipperRemoveMenu(BaseMenu): self.remove_klipper_env = not self.remove_klipper_env def toggle_delete_klipper_logs(self, **kwargs) -> None: - self.delete_klipper_logs = not self.delete_klipper_logs + self.remove_klipper_logs = not self.remove_klipper_logs def run_removal_process(self, **kwargs) -> None: if ( not self.remove_klipper_service and not self.remove_klipper_dir and not self.remove_klipper_env - and not self.delete_klipper_logs + and not self.remove_klipper_logs ): error = f"{COLOR_RED}Nothing selected! Select options to remove first.{RESET_FORMAT}" print(error) @@ -108,10 +110,21 @@ class KlipperRemoveMenu(BaseMenu): self.remove_klipper_service, self.remove_klipper_dir, self.remove_klipper_env, - self.delete_klipper_logs, + self.remove_klipper_logs, ) self.remove_klipper_service = False self.remove_klipper_dir = False self.remove_klipper_env = False - self.delete_klipper_logs = False + self.remove_klipper_logs = 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() diff --git a/kiauh/components/moonraker/menus/moonraker_remove_menu.py b/kiauh/components/moonraker/menus/moonraker_remove_menu.py index 85054dd..03a458a 100644 --- a/kiauh/components/moonraker/menus/moonraker_remove_menu.py +++ b/kiauh/components/moonraker/menus/moonraker_remove_menu.py @@ -25,7 +25,8 @@ class MoonrakerRemoveMenu(BaseMenu): self.remove_moonraker_dir = False self.remove_moonraker_env = False self.remove_moonraker_polkit = False - self.delete_moonraker_logs = False + self.remove_moonraker_logs = False + self.selection_state = False def set_previous_menu(self, previous_menu: Optional[Type[BaseMenu]]) -> None: from core.menus.remove_menu import RemoveMenu @@ -36,7 +37,7 @@ class MoonrakerRemoveMenu(BaseMenu): def set_options(self) -> None: self.options = { - "0": Option(method=self.toggle_all, menu=False), + "a": Option(method=self.toggle_all, menu=False), "1": Option(method=self.toggle_remove_moonraker_service, menu=False), "2": Option(method=self.toggle_remove_moonraker_dir, menu=False), "3": Option(method=self.toggle_remove_moonraker_env, menu=False), @@ -55,7 +56,7 @@ class MoonrakerRemoveMenu(BaseMenu): o2 = checked if self.remove_moonraker_dir else unchecked o3 = checked if self.remove_moonraker_env else unchecked o4 = checked if self.remove_moonraker_polkit else unchecked - o5 = checked if self.delete_moonraker_logs else unchecked + o5 = checked if self.remove_moonraker_logs else unchecked menu = textwrap.dedent( f""" ╔═══════════════════════════════════════════════════════╗ @@ -64,7 +65,7 @@ class MoonrakerRemoveMenu(BaseMenu): ║ Enter a number and hit enter to select / deselect ║ ║ the specific option for removal. ║ ╟───────────────────────────────────────────────────────╢ - ║ 0) Select everything ║ + ║ a) {self._get_selection_state_str():37} ║ ╟───────────────────────────────────────────────────────╢ ║ 1) {o1} Remove Service ║ ║ 2) {o2} Remove Local Repository ║ @@ -79,11 +80,12 @@ class MoonrakerRemoveMenu(BaseMenu): print(menu, end="") def toggle_all(self, **kwargs) -> None: - self.remove_moonraker_service = True - self.remove_moonraker_dir = True - self.remove_moonraker_env = True - self.remove_moonraker_polkit = True - self.delete_moonraker_logs = True + self.remove_moonraker_service = not self.remove_moonraker_service + self.remove_moonraker_dir = not self.remove_moonraker_dir + self.remove_moonraker_env = not self.remove_moonraker_env + self.remove_moonraker_polkit = not self.remove_moonraker_polkit + self.remove_moonraker_logs = not self.remove_moonraker_logs + self.selection_state = not self.selection_state def toggle_remove_moonraker_service(self, **kwargs) -> None: self.remove_moonraker_service = not self.remove_moonraker_service @@ -98,7 +100,7 @@ class MoonrakerRemoveMenu(BaseMenu): self.remove_moonraker_polkit = not self.remove_moonraker_polkit def toggle_delete_moonraker_logs(self, **kwargs) -> None: - self.delete_moonraker_logs = not self.delete_moonraker_logs + self.remove_moonraker_logs = not self.remove_moonraker_logs def run_removal_process(self, **kwargs) -> None: if ( @@ -106,7 +108,7 @@ class MoonrakerRemoveMenu(BaseMenu): and not self.remove_moonraker_dir and not self.remove_moonraker_env and not self.remove_moonraker_polkit - and not self.delete_moonraker_logs + and not self.remove_moonraker_logs ): error = f"{COLOR_RED}Nothing selected! Select options to remove first.{RESET_FORMAT}" print(error) @@ -117,11 +119,22 @@ class MoonrakerRemoveMenu(BaseMenu): self.remove_moonraker_dir, self.remove_moonraker_env, self.remove_moonraker_polkit, - self.delete_moonraker_logs, + self.remove_moonraker_logs, ) self.remove_moonraker_service = False self.remove_moonraker_dir = False self.remove_moonraker_env = False self.remove_moonraker_polkit = False - self.delete_moonraker_logs = False + self.remove_moonraker_logs = 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() diff --git a/kiauh/components/webui_client/client_remove.py b/kiauh/components/webui_client/client_remove.py index a4a0b82..2e41c12 100644 --- a/kiauh/components/webui_client/client_remove.py +++ b/kiauh/components/webui_client/client_remove.py @@ -32,8 +32,8 @@ from utils.logger import Logger def run_client_removal( client: BaseWebClient, - rm_client: bool, - rm_client_config: bool, + remove_client: bool, + remove_client_cfg: bool, backup_ms_config_json: bool, ) -> None: mr_im = InstanceManager(Moonraker) @@ -44,7 +44,7 @@ def run_client_removal( if backup_ms_config_json and client.client == WebClientType.MAINSAIL: backup_mainsail_config_json() - if rm_client: + if remove_client: client_name = client.name remove_client_dir(client) remove_nginx_config(client_name) @@ -53,7 +53,7 @@ def run_client_removal( section = f"update_manager {client_name}" remove_config_section(section, mr_instances) - if rm_client_config: + if remove_client_cfg: run_client_config_removal( client.client_config, kl_instances, diff --git a/kiauh/components/webui_client/menus/client_remove_menu.py b/kiauh/components/webui_client/menus/client_remove_menu.py index 9374177..8b4a270 100644 --- a/kiauh/components/webui_client/menus/client_remove_menu.py +++ b/kiauh/components/webui_client/menus/client_remove_menu.py @@ -25,9 +25,10 @@ class ClientRemoveMenu(BaseMenu): super().__init__() self.previous_menu = previous_menu self.client = client - self.rm_client = False - self.rm_client_config = False + self.remove_client = False + self.remove_client_cfg = False self.backup_mainsail_config_json = False + self.selection_state = False def set_previous_menu(self, previous_menu: Optional[Type[BaseMenu]]) -> None: from core.menus.remove_menu import RemoveMenu @@ -38,7 +39,7 @@ class ClientRemoveMenu(BaseMenu): def set_options(self) -> None: self.options = { - "0": Option(method=self.toggle_all, menu=False), + "a": Option(method=self.toggle_all, menu=False), "1": Option(method=self.toggle_rm_client, menu=False), "2": Option(method=self.toggle_rm_client_config, menu=False), "c": Option(method=self.run_removal_process, menu=False), @@ -56,8 +57,8 @@ class ClientRemoveMenu(BaseMenu): count = 62 - len(color) - len(RESET_FORMAT) checked = f"[{COLOR_CYAN}x{RESET_FORMAT}]" unchecked = "[ ]" - o1 = checked if self.rm_client else unchecked - o2 = checked if self.rm_client_config else unchecked + o1 = checked if self.remove_client else unchecked + o2 = checked if self.remove_client_cfg else unchecked menu = textwrap.dedent( f""" ╔═══════════════════════════════════════════════════════╗ @@ -66,7 +67,7 @@ class ClientRemoveMenu(BaseMenu): ║ Enter a number and hit enter to select / deselect ║ ║ the specific option for removal. ║ ╟───────────────────────────────────────────────────────╢ - ║ 0) Select everything ║ + ║ a) {self._get_selection_state_str():37} ║ ╟───────────────────────────────────────────────────────╢ ║ 1) {o1} Remove {client_name:16} ║ ║ 2) {o2} Remove {client_config_name:24} ║ @@ -91,23 +92,24 @@ class ClientRemoveMenu(BaseMenu): print(menu, end="") def toggle_all(self, **kwargs) -> None: - self.rm_client = True - self.rm_client_config = True - self.backup_mainsail_config_json = True + self.remove_client = not self.remove_client + self.remove_client_cfg = not self.remove_client_cfg + self.backup_mainsail_config_json = not self.backup_mainsail_config_json + self.selection_state = not self.selection_state def toggle_rm_client(self, **kwargs) -> None: - self.rm_client = not self.rm_client + self.remove_client = not self.remove_client def toggle_rm_client_config(self, **kwargs) -> None: - self.rm_client_config = not self.rm_client_config + self.remove_client_cfg = not self.remove_client_cfg def toggle_backup_mainsail_config_json(self, **kwargs) -> None: self.backup_mainsail_config_json = not self.backup_mainsail_config_json def run_removal_process(self, **kwargs) -> None: if ( - not self.rm_client - and not self.rm_client_config + not self.remove_client + and not self.remove_client_cfg and not self.backup_mainsail_config_json ): error = f"{COLOR_RED}Nothing selected ...{RESET_FORMAT}" @@ -116,11 +118,22 @@ class ClientRemoveMenu(BaseMenu): client_remove.run_client_removal( client=self.client, - rm_client=self.rm_client, - rm_client_config=self.rm_client_config, + remove_client=self.remove_client, + remove_client_cfg=self.remove_client_cfg, backup_ms_config_json=self.backup_mainsail_config_json, ) - self.rm_client = False - self.rm_client_config = False + self.remove_client = False + self.remove_client_cfg = False self.backup_mainsail_config_json = 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()