Compare commits

...

3 Commits

Author SHA1 Message Date
dw-0
0a973079b5 Merge 0b41d63496 into f2691f33d3 2024-04-08 21:08:29 +02:00
dw-0
0b41d63496 feat: implement optional extension update entry point
Signed-off-by: Dominik Willner <th33xitus@gmail.com>
2024-04-07 19:35:26 +02:00
dw-0
44301c0c87 feat: implement get-id feature
Signed-off-by: Dominik Willner <th33xitus@gmail.com>
2024-04-07 19:07:42 +02:00
8 changed files with 52 additions and 23 deletions

View File

@@ -8,6 +8,7 @@
# ======================================================================= #
import textwrap
import time
from components.klipper_firmware.flash_options import (
FlashOptions,
@@ -131,9 +132,10 @@ class KlipperFlashCommandMenu(BaseMenu):
# noinspection PyUnusedLocal
# noinspection PyMethodMayBeStatic
class KlipperSelectMcuConnectionMenu(BaseMenu):
def __init__(self, previous_menu: BaseMenu):
def __init__(self, previous_menu: BaseMenu, standalone: bool = False):
super().__init__()
self.__standalone = standalone
self.previous_menu: BaseMenu = previous_menu
self.options = {
"1": self.select_usb,
@@ -193,7 +195,15 @@ class KlipperSelectMcuConnectionMenu(BaseMenu):
if len(self.flash_options.mcu_list) < 1:
Logger.print_warn("No MCUs found!")
Logger.print_warn("Make sure they are connected and repeat this step.")
else:
# if standalone is True, we only display the MCUs to the user and return
if self.__standalone and len(self.flash_options.mcu_list) > 0:
Logger.print_ok("The following MCUs were found:", prefix=False)
for i, mcu in enumerate(self.flash_options.mcu_list):
print(f" ● MCU #{i}: {COLOR_CYAN}{mcu}{RESET_FORMAT}")
time.sleep(3)
return
self.goto_next_menu()
def goto_next_menu(self, **kwargs):

View File

@@ -58,4 +58,4 @@ class AdvancedMenu(BaseMenu):
KlipperFlashMethodMenu(previous_menu=self).run()
def get_id(self, **kwargs):
KlipperSelectMcuConnectionMenu(previous_menu=self).run()
KlipperSelectMcuConnectionMenu(previous_menu=self, standalone=True).run()

View File

@@ -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

View File

@@ -0,0 +1,12 @@
# ======================================================================= #
# 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 pathlib import Path
EXTENSION_ROOT = Path(__file__).resolve().parents[1].joinpath("extensions")

View File

@@ -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

View File

@@ -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="")

View File

@@ -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 (

View File

@@ -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