mirror of
https://github.com/dw-0/kiauh.git
synced 2025-12-29 10:43:37 +05:00
refactor: rework of menu lifecycle and option handling
Signed-off-by: Dominik Willner <th33xitus@gmail.com>
This commit is contained in:
@@ -7,7 +7,25 @@
|
||||
# This file may be distributed under the terms of the GNU GPLv3 license #
|
||||
# ======================================================================= #
|
||||
|
||||
from dataclasses import dataclass
|
||||
from enum import Enum
|
||||
from typing import Callable, Any, Union
|
||||
|
||||
|
||||
@dataclass
|
||||
class Option:
|
||||
"""
|
||||
Represents a menu option.
|
||||
:param method: Method that will be used to call the menu option
|
||||
:param menu: Flag for singaling that another menu will be opened
|
||||
:param opt_index: Can be used to pass the user input to the menu option
|
||||
:param opt_data: Can be used to pass any additional data to the menu option
|
||||
"""
|
||||
|
||||
method: Union[Callable, None] = None
|
||||
menu: bool = False
|
||||
opt_index: str = ""
|
||||
opt_data: Any = None
|
||||
|
||||
|
||||
class FooterType(Enum):
|
||||
@@ -15,11 +33,3 @@ class FooterType(Enum):
|
||||
BACK = "BACK"
|
||||
BACK_HELP = "BACK_HELP"
|
||||
BLANK = "BLANK"
|
||||
|
||||
|
||||
class ExitAppException(Exception):
|
||||
pass
|
||||
|
||||
|
||||
class GoBackException(Exception):
|
||||
pass
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
# ======================================================================= #
|
||||
|
||||
import textwrap
|
||||
from typing import Type, Optional
|
||||
|
||||
from components.klipper.klipper_utils import backup_klipper_dir
|
||||
from components.moonraker.moonraker_utils import (
|
||||
@@ -20,6 +21,7 @@ from components.webui_client.client_utils import (
|
||||
)
|
||||
from components.webui_client.fluidd_data import FluiddData
|
||||
from components.webui_client.mainsail_data import MainsailData
|
||||
from core.menus import Option
|
||||
from core.menus.base_menu import BaseMenu
|
||||
from utils.common import backup_printer_config_dir
|
||||
from utils.constants import COLOR_CYAN, RESET_FORMAT, COLOR_YELLOW
|
||||
@@ -28,20 +30,27 @@ from utils.constants import COLOR_CYAN, RESET_FORMAT, COLOR_YELLOW
|
||||
# noinspection PyUnusedLocal
|
||||
# noinspection PyMethodMayBeStatic
|
||||
class BackupMenu(BaseMenu):
|
||||
def __init__(self, previous_menu: BaseMenu):
|
||||
def __init__(self, previous_menu: Optional[Type[BaseMenu]] = None):
|
||||
super().__init__()
|
||||
|
||||
self.previous_menu: BaseMenu = previous_menu
|
||||
def set_previous_menu(self, previous_menu: Optional[Type[BaseMenu]]) -> None:
|
||||
from core.menus.main_menu import MainMenu
|
||||
|
||||
self.previous_menu: Type[BaseMenu] = (
|
||||
previous_menu if previous_menu is not None else MainMenu
|
||||
)
|
||||
|
||||
def set_options(self) -> None:
|
||||
self.options = {
|
||||
"1": self.backup_klipper,
|
||||
"2": self.backup_moonraker,
|
||||
"3": self.backup_printer_config,
|
||||
"4": self.backup_moonraker_db,
|
||||
"5": self.backup_mainsail,
|
||||
"6": self.backup_fluidd,
|
||||
"7": self.backup_mainsail_config,
|
||||
"8": self.backup_fluidd_config,
|
||||
"9": self.backup_klipperscreen,
|
||||
"1": Option(method=self.backup_klipper, menu=False),
|
||||
"2": Option(method=self.backup_moonraker, menu=False),
|
||||
"3": Option(method=self.backup_printer_config, menu=False),
|
||||
"4": Option(method=self.backup_moonraker_db, menu=False),
|
||||
"5": Option(method=self.backup_mainsail, menu=False),
|
||||
"6": Option(method=self.backup_fluidd, menu=False),
|
||||
"7": Option(method=self.backup_mainsail_config, menu=False),
|
||||
"8": Option(method=self.backup_fluidd_config, menu=False),
|
||||
"9": Option(method=self.backup_klipperscreen, menu=False),
|
||||
}
|
||||
|
||||
def print_menu(self):
|
||||
@@ -82,16 +91,16 @@ class BackupMenu(BaseMenu):
|
||||
backup_moonraker_db_dir()
|
||||
|
||||
def backup_mainsail(self, **kwargs):
|
||||
backup_client_data(MainsailData().get())
|
||||
backup_client_data(MainsailData())
|
||||
|
||||
def backup_fluidd(self, **kwargs):
|
||||
backup_client_data(FluiddData().get())
|
||||
backup_client_data(FluiddData())
|
||||
|
||||
def backup_mainsail_config(self, **kwargs):
|
||||
backup_client_config_data(MainsailData().get())
|
||||
backup_client_config_data(MainsailData())
|
||||
|
||||
def backup_fluidd_config(self, **kwargs):
|
||||
backup_client_config_data(FluiddData().get())
|
||||
backup_client_config_data(FluiddData())
|
||||
|
||||
def backup_klipperscreen(self, **kwargs):
|
||||
pass
|
||||
|
||||
@@ -13,9 +13,9 @@ import subprocess
|
||||
import sys
|
||||
import textwrap
|
||||
from abc import abstractmethod
|
||||
from typing import Dict, Union, Callable, Type, Tuple
|
||||
from typing import Type, Dict, Optional
|
||||
|
||||
from core.menus import FooterType, ExitAppException, GoBackException
|
||||
from core.menus import FooterType, Option
|
||||
from utils.constants import (
|
||||
COLOR_GREEN,
|
||||
COLOR_YELLOW,
|
||||
@@ -106,12 +106,12 @@ class PostInitCaller(type):
|
||||
# noinspection PyUnusedLocal
|
||||
# noinspection PyMethodMayBeStatic
|
||||
class BaseMenu(metaclass=PostInitCaller):
|
||||
options: Dict[str, Callable] = {}
|
||||
options: Dict[str, Option] = {}
|
||||
options_offset: int = 0
|
||||
default_option: Union[Callable, None] = None
|
||||
default_option: Option = None
|
||||
input_label_txt: str = "Perform action"
|
||||
header: bool = False
|
||||
previous_menu: Union[Type[BaseMenu], BaseMenu] = None
|
||||
previous_menu: Type[BaseMenu] = None
|
||||
help_menu: Type[BaseMenu] = None
|
||||
footer_type: FooterType = FooterType.BACK
|
||||
|
||||
@@ -120,30 +120,42 @@ class BaseMenu(metaclass=PostInitCaller):
|
||||
raise NotImplementedError("BaseMenu cannot be instantiated directly.")
|
||||
|
||||
def __post_init__(self):
|
||||
self.set_previous_menu(self.previous_menu)
|
||||
self.set_options()
|
||||
|
||||
# conditionally add options based on footer type
|
||||
if self.footer_type is FooterType.QUIT:
|
||||
self.options["q"] = self.__exit
|
||||
self.options["q"] = Option(method=self.__exit, menu=False)
|
||||
if self.footer_type is FooterType.BACK:
|
||||
self.options["b"] = self.__go_back
|
||||
self.options["b"] = Option(method=self.__go_back, menu=False)
|
||||
if self.footer_type is FooterType.BACK_HELP:
|
||||
self.options["b"] = self.__go_back
|
||||
self.options["h"] = self.__go_to_help
|
||||
self.options["b"] = Option(method=self.__go_back, menu=False)
|
||||
self.options["h"] = Option(method=self.__go_to_help, menu=False)
|
||||
# if defined, add the default option to the options dict
|
||||
if self.default_option is not None:
|
||||
self.options[""] = self.default_option
|
||||
|
||||
def __go_back(self, **kwargs):
|
||||
raise GoBackException()
|
||||
self.previous_menu().run()
|
||||
|
||||
def __go_to_help(self, **kwargs):
|
||||
self.help_menu(previous_menu=self).run()
|
||||
|
||||
def __exit(self, **kwargs):
|
||||
raise ExitAppException()
|
||||
Logger.print_ok("###### Happy printing!", False)
|
||||
sys.exit(0)
|
||||
|
||||
@abstractmethod
|
||||
def set_previous_menu(self, previous_menu: Optional[Type[BaseMenu]]) -> None:
|
||||
raise NotImplementedError
|
||||
|
||||
@abstractmethod
|
||||
def set_options(self) -> None:
|
||||
raise NotImplementedError
|
||||
|
||||
@abstractmethod
|
||||
def print_menu(self) -> None:
|
||||
raise NotImplementedError("Subclasses must implement the print_menu method")
|
||||
raise NotImplementedError
|
||||
|
||||
def print_footer(self) -> None:
|
||||
if self.footer_type is FooterType.QUIT:
|
||||
@@ -155,53 +167,50 @@ class BaseMenu(metaclass=PostInitCaller):
|
||||
elif self.footer_type is FooterType.BLANK:
|
||||
print_blank_footer()
|
||||
else:
|
||||
raise NotImplementedError("Method for printing footer not implemented.")
|
||||
raise NotImplementedError
|
||||
|
||||
def display_menu(self) -> None:
|
||||
# clear()
|
||||
if self.header:
|
||||
print_header()
|
||||
self.print_menu()
|
||||
self.print_footer()
|
||||
|
||||
def validate_user_input(self, usr_input: str) -> Tuple[Callable, str]:
|
||||
def validate_user_input(self, usr_input: str) -> Option:
|
||||
"""
|
||||
Validate the user input and either return an Option, a string or None
|
||||
:param usr_input: The user input in form of a string
|
||||
:return: Option, str or None
|
||||
"""
|
||||
usr_input = usr_input.lower()
|
||||
option = self.options.get(usr_input, None)
|
||||
option = self.options.get(usr_input, Option(None, False, "", None))
|
||||
|
||||
# if option/usr_input is None/empty string, we execute the menus default option if specified
|
||||
if (option is None or usr_input == "") and self.default_option is not None:
|
||||
return self.default_option, usr_input
|
||||
self.default_option.opt_index = usr_input
|
||||
return self.default_option
|
||||
|
||||
# user selected a regular option
|
||||
return option, usr_input
|
||||
option.opt_index = usr_input
|
||||
return option
|
||||
|
||||
def handle_user_input(self) -> Tuple[Callable, str]:
|
||||
def handle_user_input(self) -> Option:
|
||||
"""Handle the user input, return the validated input or print an error."""
|
||||
while True:
|
||||
print(f"{COLOR_CYAN}###### {self.input_label_txt}: {RESET_FORMAT}", end="")
|
||||
usr_input = input().lower()
|
||||
validated_input = self.validate_user_input(usr_input)
|
||||
method_to_call = validated_input[0]
|
||||
|
||||
if method_to_call is not None:
|
||||
if validated_input.method is not None:
|
||||
return validated_input
|
||||
else:
|
||||
Logger.print_error("Invalid input!", False)
|
||||
|
||||
def run(self) -> None:
|
||||
"""Start the menu lifecycle. When this function returns, the lifecycle of the menu ends."""
|
||||
while True:
|
||||
try:
|
||||
self.display_menu()
|
||||
option = self.handle_user_input()
|
||||
option[0](opt_index=option[1])
|
||||
except GoBackException:
|
||||
return
|
||||
except ExitAppException:
|
||||
Logger.print_ok("###### Happy printing!", False)
|
||||
sys.exit(0)
|
||||
try:
|
||||
self.display_menu()
|
||||
option = self.handle_user_input()
|
||||
option.method(opt_index=option.opt_index, opt_data=option.opt_data)
|
||||
self.run()
|
||||
except Exception as e:
|
||||
Logger.print_error(f"An unexpecred error occured:\n{e}")
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
# ======================================================================= #
|
||||
|
||||
import textwrap
|
||||
from typing import Type, Optional
|
||||
|
||||
from components.klipper import klipper_setup
|
||||
from components.moonraker import moonraker_setup
|
||||
@@ -15,6 +16,7 @@ from components.webui_client import client_setup
|
||||
from components.webui_client.client_config import client_config_setup
|
||||
from components.webui_client.fluidd_data import FluiddData
|
||||
from components.webui_client.mainsail_data import MainsailData
|
||||
from core.menus import Option
|
||||
|
||||
from core.menus.base_menu import BaseMenu
|
||||
from utils.constants import COLOR_GREEN, RESET_FORMAT
|
||||
@@ -23,20 +25,24 @@ from utils.constants import COLOR_GREEN, RESET_FORMAT
|
||||
# noinspection PyUnusedLocal
|
||||
# noinspection PyMethodMayBeStatic
|
||||
class InstallMenu(BaseMenu):
|
||||
def __init__(self, previous_menu: BaseMenu):
|
||||
def __init__(self, previous_menu: Optional[Type[BaseMenu]] = None):
|
||||
super().__init__()
|
||||
|
||||
self.previous_menu: BaseMenu = previous_menu
|
||||
def set_previous_menu(self, previous_menu: Optional[Type[BaseMenu]]) -> None:
|
||||
from core.menus.main_menu import MainMenu
|
||||
|
||||
self.previous_menu: Type[BaseMenu] = (
|
||||
previous_menu if previous_menu is not None else MainMenu
|
||||
)
|
||||
|
||||
def set_options(self) -> None:
|
||||
self.options = {
|
||||
"1": self.install_klipper,
|
||||
"2": self.install_moonraker,
|
||||
"3": self.install_mainsail,
|
||||
"4": self.install_fluidd,
|
||||
"5": self.install_mainsail_config,
|
||||
"6": self.install_fluidd_config,
|
||||
"7": None,
|
||||
"8": None,
|
||||
"9": None,
|
||||
"1": Option(method=self.install_klipper, menu=False),
|
||||
"2": Option(method=self.install_moonraker, menu=False),
|
||||
"3": Option(method=self.install_mainsail, menu=False),
|
||||
"4": Option(method=self.install_fluidd, menu=False),
|
||||
"5": Option(method=self.install_mainsail_config, menu=False),
|
||||
"6": Option(method=self.install_fluidd_config, menu=False),
|
||||
}
|
||||
|
||||
def print_menu(self):
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
# ======================================================================= #
|
||||
|
||||
import textwrap
|
||||
from typing import Type, Optional
|
||||
|
||||
from components.klipper.klipper_utils import get_klipper_status
|
||||
from components.log_uploads.menus.log_upload_menu import LogUploadMenu
|
||||
@@ -21,7 +22,7 @@ from components.webui_client.mainsail_data import MainsailData
|
||||
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.base_menu import BaseMenu, Option
|
||||
from extensions.extensions_menu import ExtensionsMenu
|
||||
from core.menus.install_menu import InstallMenu
|
||||
from core.menus.remove_menu import RemoveMenu
|
||||
@@ -43,16 +44,6 @@ class MainMenu(BaseMenu):
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
|
||||
self.options = {
|
||||
"0": self.log_upload_menu,
|
||||
"1": self.install_menu,
|
||||
"2": self.update_menu,
|
||||
"3": self.remove_menu,
|
||||
"4": self.advanced_menu,
|
||||
"5": self.backup_menu,
|
||||
"e": self.extension_menu,
|
||||
"s": self.settings_menu,
|
||||
}
|
||||
self.header = True
|
||||
self.footer_type = FooterType.QUIT
|
||||
|
||||
@@ -68,6 +59,22 @@ class MainMenu(BaseMenu):
|
||||
self.cc_status = ""
|
||||
self.init_status()
|
||||
|
||||
def set_previous_menu(self, previous_menu: Optional[Type[BaseMenu]]) -> None:
|
||||
"""MainMenu does not have a previous menu"""
|
||||
pass
|
||||
|
||||
def set_options(self) -> None:
|
||||
self.options = {
|
||||
"0": Option(method=self.log_upload_menu, menu=True),
|
||||
"1": Option(method=self.install_menu, menu=True),
|
||||
"2": Option(method=self.update_menu, menu=True),
|
||||
"3": Option(method=self.remove_menu, menu=True),
|
||||
"4": Option(method=self.advanced_menu, menu=True),
|
||||
"5": Option(method=self.backup_menu, menu=True),
|
||||
"e": Option(method=self.extension_menu, menu=True),
|
||||
"s": Option(method=self.settings_menu, menu=True),
|
||||
}
|
||||
|
||||
def init_status(self) -> None:
|
||||
status_vars = ["kl", "mr", "ms", "fl", "ks", "mb", "cn"]
|
||||
for var in status_vars:
|
||||
@@ -140,25 +147,25 @@ class MainMenu(BaseMenu):
|
||||
print(menu, end="")
|
||||
|
||||
def log_upload_menu(self, **kwargs):
|
||||
LogUploadMenu(previous_menu=self).run()
|
||||
LogUploadMenu().run()
|
||||
|
||||
def install_menu(self, **kwargs):
|
||||
InstallMenu(previous_menu=self).run()
|
||||
InstallMenu(previous_menu=self.__class__).run()
|
||||
|
||||
def update_menu(self, **kwargs):
|
||||
UpdateMenu(previous_menu=self).run()
|
||||
UpdateMenu(previous_menu=self.__class__).run()
|
||||
|
||||
def remove_menu(self, **kwargs):
|
||||
RemoveMenu(previous_menu=self).run()
|
||||
RemoveMenu(previous_menu=self.__class__).run()
|
||||
|
||||
def advanced_menu(self, **kwargs):
|
||||
AdvancedMenu().run()
|
||||
AdvancedMenu(previous_menu=self.__class__).run()
|
||||
|
||||
def backup_menu(self, **kwargs):
|
||||
BackupMenu(previous_menu=self).run()
|
||||
BackupMenu(previous_menu=self.__class__).run()
|
||||
|
||||
def settings_menu(self, **kwargs):
|
||||
SettingsMenu(previous_menu=self).run()
|
||||
SettingsMenu().run()
|
||||
|
||||
def extension_menu(self, **kwargs):
|
||||
ExtensionsMenu(previous_menu=self).run()
|
||||
ExtensionsMenu(previous_menu=self.__class__).run()
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
# ======================================================================= #
|
||||
|
||||
import textwrap
|
||||
from typing import Type, Optional
|
||||
|
||||
from components.klipper.menus.klipper_remove_menu import KlipperRemoveMenu
|
||||
from components.moonraker.menus.moonraker_remove_menu import (
|
||||
@@ -16,6 +17,7 @@ from components.moonraker.menus.moonraker_remove_menu import (
|
||||
from components.webui_client.fluidd_data import FluiddData
|
||||
from components.webui_client.mainsail_data import MainsailData
|
||||
from components.webui_client.menus.client_remove_menu import ClientRemoveMenu
|
||||
from core.menus import Option
|
||||
from core.menus.base_menu import BaseMenu
|
||||
from utils.constants import COLOR_RED, RESET_FORMAT
|
||||
|
||||
@@ -23,24 +25,22 @@ from utils.constants import COLOR_RED, RESET_FORMAT
|
||||
# noinspection PyUnusedLocal
|
||||
# noinspection PyMethodMayBeStatic
|
||||
class RemoveMenu(BaseMenu):
|
||||
def __init__(self, previous_menu: BaseMenu):
|
||||
def __init__(self, previous_menu: Optional[Type[BaseMenu]] = None):
|
||||
super().__init__()
|
||||
|
||||
self.previous_menu: BaseMenu = previous_menu
|
||||
def set_previous_menu(self, previous_menu: Optional[Type[BaseMenu]]) -> None:
|
||||
from core.menus.main_menu import MainMenu
|
||||
|
||||
self.previous_menu: Type[BaseMenu] = (
|
||||
previous_menu if previous_menu is not None else MainMenu
|
||||
)
|
||||
|
||||
def set_options(self):
|
||||
self.options = {
|
||||
"1": self.remove_klipper,
|
||||
"2": self.remove_moonraker,
|
||||
"3": self.remove_mainsail,
|
||||
"4": self.remove_fluidd,
|
||||
"5": None,
|
||||
"6": None,
|
||||
"7": None,
|
||||
"8": None,
|
||||
"9": None,
|
||||
"10": None,
|
||||
"11": None,
|
||||
"12": None,
|
||||
"13": None,
|
||||
"1": Option(method=self.remove_klipper, menu=True),
|
||||
"2": Option(method=self.remove_moonraker, menu=True),
|
||||
"3": Option(method=self.remove_mainsail, menu=True),
|
||||
"4": Option(method=self.remove_fluidd, menu=True),
|
||||
}
|
||||
|
||||
def print_menu(self):
|
||||
@@ -71,13 +71,13 @@ class RemoveMenu(BaseMenu):
|
||||
print(menu, end="")
|
||||
|
||||
def remove_klipper(self, **kwargs):
|
||||
KlipperRemoveMenu(previous_menu=self).run()
|
||||
KlipperRemoveMenu(previous_menu=self.__class__).run()
|
||||
|
||||
def remove_moonraker(self, **kwargs):
|
||||
MoonrakerRemoveMenu(previous_menu=self).run()
|
||||
MoonrakerRemoveMenu(previous_menu=self.__class__).run()
|
||||
|
||||
def remove_mainsail(self, **kwargs):
|
||||
ClientRemoveMenu(previous_menu=self, client=MainsailData()).run()
|
||||
ClientRemoveMenu(previous_menu=self.__class__, client=MainsailData()).run()
|
||||
|
||||
def remove_fluidd(self, **kwargs):
|
||||
ClientRemoveMenu(previous_menu=self, client=FluiddData()).run()
|
||||
ClientRemoveMenu(previous_menu=self.__class__, client=FluiddData()).run()
|
||||
|
||||
@@ -6,16 +6,25 @@
|
||||
# #
|
||||
# This file may be distributed under the terms of the GNU GPLv3 license #
|
||||
# ======================================================================= #
|
||||
from typing import Type, Optional
|
||||
|
||||
from core.menus.base_menu import BaseMenu
|
||||
|
||||
|
||||
# noinspection PyMethodMayBeStatic
|
||||
class SettingsMenu(BaseMenu):
|
||||
def __init__(self, previous_menu: BaseMenu):
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
|
||||
self.previous_menu: BaseMenu = previous_menu
|
||||
def set_previous_menu(self, previous_menu: Optional[Type[BaseMenu]]) -> None:
|
||||
from core.menus.main_menu import MainMenu
|
||||
|
||||
self.previous_menu: Type[BaseMenu] = (
|
||||
previous_menu if previous_menu is not None else MainMenu
|
||||
)
|
||||
|
||||
def set_options(self) -> None:
|
||||
pass
|
||||
|
||||
def print_menu(self):
|
||||
print("self")
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
# ======================================================================= #
|
||||
|
||||
import textwrap
|
||||
from typing import Type, Optional
|
||||
|
||||
from components.klipper.klipper_setup import update_klipper
|
||||
from components.klipper.klipper_utils import (
|
||||
@@ -26,6 +27,7 @@ from components.webui_client.client_utils import (
|
||||
)
|
||||
from components.webui_client.fluidd_data import FluiddData
|
||||
from components.webui_client.mainsail_data import MainsailData
|
||||
from core.menus import Option
|
||||
from core.menus.base_menu import BaseMenu
|
||||
from utils.constants import (
|
||||
COLOR_GREEN,
|
||||
@@ -39,24 +41,9 @@ from utils.constants import (
|
||||
# noinspection PyUnusedLocal
|
||||
# noinspection PyMethodMayBeStatic
|
||||
class UpdateMenu(BaseMenu):
|
||||
def __init__(self, previous_menu):
|
||||
def __init__(self, previous_menu: Optional[Type[BaseMenu]] = None):
|
||||
super().__init__()
|
||||
|
||||
self.previous_menu: BaseMenu = previous_menu
|
||||
self.options = {
|
||||
"0": self.update_all,
|
||||
"1": self.update_klipper,
|
||||
"2": self.update_moonraker,
|
||||
"3": self.update_mainsail,
|
||||
"4": self.update_fluidd,
|
||||
"5": self.update_mainsail_config,
|
||||
"6": self.update_fluidd_config,
|
||||
"7": self.update_klipperscreen,
|
||||
"8": self.update_mobileraker,
|
||||
"9": self.update_crowsnest,
|
||||
"10": self.upgrade_system_packages,
|
||||
}
|
||||
|
||||
self.kl_local = f"{COLOR_WHITE}{RESET_FORMAT}"
|
||||
self.kl_remote = f"{COLOR_WHITE}{RESET_FORMAT}"
|
||||
self.mr_local = f"{COLOR_WHITE}{RESET_FORMAT}"
|
||||
@@ -73,6 +60,28 @@ class UpdateMenu(BaseMenu):
|
||||
self.mainsail_client = MainsailData()
|
||||
self.fluidd_client = FluiddData()
|
||||
|
||||
def set_previous_menu(self, previous_menu: Optional[Type[BaseMenu]]) -> None:
|
||||
from core.menus.main_menu import MainMenu
|
||||
|
||||
self.previous_menu: Type[BaseMenu] = (
|
||||
previous_menu if previous_menu is not None else MainMenu
|
||||
)
|
||||
|
||||
def set_options(self) -> None:
|
||||
self.options = {
|
||||
"0": Option(self.update_all, menu=False),
|
||||
"1": Option(self.update_klipper, menu=False),
|
||||
"2": Option(self.update_moonraker, menu=False),
|
||||
"3": Option(self.update_mainsail, menu=False),
|
||||
"4": Option(self.update_fluidd, menu=False),
|
||||
"5": Option(self.update_mainsail_config, menu=False),
|
||||
"6": Option(self.update_fluidd_config, menu=False),
|
||||
"7": Option(self.update_klipperscreen, menu=False),
|
||||
"8": Option(self.update_mobileraker, menu=False),
|
||||
"9": Option(self.update_crowsnest, menu=False),
|
||||
"10": Option(self.upgrade_system_packages, menu=False),
|
||||
}
|
||||
|
||||
def print_menu(self):
|
||||
self.fetch_update_status()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user