diff --git a/kiauh/core/menus/main_menu.py b/kiauh/core/menus/main_menu.py index 317584b..ea18b88 100644 --- a/kiauh/core/menus/main_menu.py +++ b/kiauh/core/menus/main_menu.py @@ -22,7 +22,7 @@ from core.menus import FooterType from core.menus.advanced_menu import AdvancedMenu from core.menus.backup_menu import BackupMenu from core.menus.base_menu import BaseMenu -from core.menus.extensions_menu import ExtensionsMenu +from extensions.extensions_menu import ExtensionsMenu from core.menus.install_menu import InstallMenu from core.menus.remove_menu import RemoveMenu from core.menus.settings_menu import SettingsMenu diff --git a/kiauh/extensions/__init__.py b/kiauh/extensions/__init__.py index e69de29..7e995bf 100644 --- a/kiauh/extensions/__init__.py +++ b/kiauh/extensions/__init__.py @@ -0,0 +1,12 @@ +# ======================================================================= # +# Copyright (C) 2020 - 2024 Dominik Willner # +# # +# 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 pathlib import Path + +EXTENSION_ROOT = Path(__file__).resolve().parents[1].joinpath("extensions") diff --git a/kiauh/core/base_extension.py b/kiauh/extensions/base_extension.py similarity index 81% rename from kiauh/core/base_extension.py rename to kiauh/extensions/base_extension.py index af80929..a14cbaa 100644 --- a/kiauh/core/base_extension.py +++ b/kiauh/extensions/base_extension.py @@ -19,12 +19,11 @@ class BaseExtension(ABC): @abstractmethod def install_extension(self, **kwargs) -> None: - raise NotImplementedError( - "Subclasses must implement the install_extension method" - ) + raise NotImplementedError + + def update_extension(self, **kwargs) -> None: + raise NotImplementedError @abstractmethod def remove_extension(self, **kwargs) -> None: - raise NotImplementedError( - "Subclasses must implement the remove_extension method" - ) + raise NotImplementedError diff --git a/kiauh/core/menus/extensions_menu.py b/kiauh/extensions/extensions_menu.py similarity index 86% rename from kiauh/core/menus/extensions_menu.py rename to kiauh/extensions/extensions_menu.py index 2d4e862..5e437d2 100644 --- a/kiauh/core/menus/extensions_menu.py +++ b/kiauh/extensions/extensions_menu.py @@ -14,7 +14,8 @@ import textwrap from pathlib import Path from typing import Type, Dict -from core.base_extension import BaseExtension +from extensions import EXTENSION_ROOT +from extensions.base_extension import BaseExtension from core.menus.base_menu import BaseMenu from utils.constants import RESET_FORMAT, COLOR_CYAN, COLOR_YELLOW @@ -31,9 +32,8 @@ class ExtensionsMenu(BaseMenu): def discover_extensions(self) -> Dict[str, BaseExtension]: ext_dict = {} - extensions_dir = Path(__file__).resolve().parents[2].joinpath("extensions") - for ext in extensions_dir.iterdir(): + for ext in EXTENSION_ROOT.iterdir(): metadata_json = Path(ext).joinpath("metadata.json") if not metadata_json.exists(): continue @@ -95,16 +95,18 @@ class ExtensionSubmenu(BaseMenu): def __init__(self, previous_menu: BaseMenu, extension: BaseExtension): super().__init__() - self.previous_menu = previous_menu - self.options = { - "1": extension.install_extension, - "2": extension.remove_extension, - } - self.extension = extension self.extension_name = extension.metadata.get("display_name") self.extension_desc = extension.metadata.get("description") + self.previous_menu = previous_menu + self.options["1"] = extension.install_extension + if self.extension.metadata.get("updates"): + self.options["2"] = extension.update_extension + self.options["3"] = extension.remove_extension + else: + self.options["2"] = extension.remove_extension + def print_menu(self) -> None: header = f" [ {self.extension_name} ] " color = COLOR_YELLOW @@ -127,7 +129,13 @@ class ExtensionSubmenu(BaseMenu): """ |-------------------------------------------------------| | 1) Install | - | 2) Remove | """ )[1:] + + if self.extension.metadata.get("updates"): + menu += "| 2) Update |\n" + menu += "| 3) Remove |\n" + else: + menu += "| 2) Remove |\n" + print(menu, end="") diff --git a/kiauh/extensions/gcode_shell_cmd/gcode_shell_cmd_extension.py b/kiauh/extensions/gcode_shell_cmd/gcode_shell_cmd_extension.py index a18488f..a4cc7f7 100644 --- a/kiauh/extensions/gcode_shell_cmd/gcode_shell_cmd_extension.py +++ b/kiauh/extensions/gcode_shell_cmd/gcode_shell_cmd_extension.py @@ -13,7 +13,7 @@ from typing import List from components.klipper.klipper import Klipper from core.backup_manager.backup_manager import BackupManager -from core.base_extension import BaseExtension +from extensions.base_extension import BaseExtension from core.config_manager.config_manager import ConfigManager from core.instance_manager.instance_manager import InstanceManager from extensions.gcode_shell_cmd import ( diff --git a/kiauh/extensions/mainsail_theme_installer/mainsail_theme_installer_extension.py b/kiauh/extensions/mainsail_theme_installer/mainsail_theme_installer_extension.py index 28e620f..96b68ce 100644 --- a/kiauh/extensions/mainsail_theme_installer/mainsail_theme_installer_extension.py +++ b/kiauh/extensions/mainsail_theme_installer/mainsail_theme_installer_extension.py @@ -19,7 +19,7 @@ from components.klipper.klipper_dialogs import ( print_instance_overview, DisplayType, ) -from core.base_extension import BaseExtension +from extensions.base_extension import BaseExtension from core.instance_manager.base_instance import BaseInstance from core.instance_manager.instance_manager import InstanceManager from core.menus.base_menu import BaseMenu