feat: implement message service

Signed-off-by: Dominik Willner <th33xitus@gmail.com>
This commit is contained in:
dw-0
2024-10-26 20:41:34 +02:00
parent 4925021aa8
commit a616876ace
4 changed files with 70 additions and 11 deletions

View File

@@ -18,9 +18,10 @@ from components.webui_client.client_utils import (
get_nginx_listen_port, get_nginx_listen_port,
set_listen_port, set_listen_port,
) )
from core.logger import DialogType, Logger from core.logger import Logger
from core.menus import Option from core.menus import Option
from core.menus.base_menu import BaseMenu from core.menus.base_menu import BaseMenu
from core.services.message_service import Message
from core.settings.kiauh_settings import KiauhSettings, WebUiSettings from core.settings.kiauh_settings import KiauhSettings, WebUiSettings
from core.types.color import Color from core.types.color import Color
from utils.sys_utils import cmd_sysctl_service, get_ipv4_addr from utils.sys_utils import cmd_sysctl_service, get_ipv4_addr
@@ -85,16 +86,15 @@ class ClientInstallMenu(BaseMenu):
cmd_sysctl_service("nginx", "start") cmd_sysctl_service("nginx", "start")
# noinspection HttpUrlsUsage # noinspection HttpUrlsUsage
Logger.print_dialog( message = Message(
DialogType.CUSTOM, title="Port reconfiguration complete!",
custom_title="Port reconfiguration complete!", text=[
custom_color=Color.GREEN,
center_content=True,
content=[
f"Open {self.client.display_name} now on: " f"Open {self.client.display_name} now on: "
f"http://{get_ipv4_addr()}:{new_port}", f"http://{get_ipv4_addr()}:{new_port}",
], ],
color=Color.GREEN,
) )
self.message_service.set_message(message)
def _get_current_port(self) -> int: def _get_current_port(self) -> int:
curr_port = get_nginx_listen_port(self.client.nginx_config) curr_port = get_nginx_listen_port(self.client.nginx_config)
@@ -103,7 +103,3 @@ class ClientInstallMenu(BaseMenu):
# the default port from the kiauh settings as fallback # the default port from the kiauh settings as fallback
return int(self.client_settings.port) return int(self.client_settings.port)
return curr_port return curr_port
def _go_back(self, **kwargs) -> None:
if self.previous_menu is not None:
self.previous_menu().run()

View File

@@ -19,6 +19,7 @@ from typing import Dict, Type
from core.logger import Logger from core.logger import Logger
from core.menus import FooterType, Option from core.menus import FooterType, Option
from core.services.message_service import MessageService
from core.spinner import Spinner from core.spinner import Spinner
from core.types.color import Color from core.types.color import Color
from utils.input_utils import get_selection_input from utils.input_utils import get_selection_input
@@ -123,6 +124,8 @@ class BaseMenu(metaclass=PostInitCaller):
help_menu: Type[BaseMenu] | None = None help_menu: Type[BaseMenu] | None = None
footer_type: FooterType = FooterType.BACK footer_type: FooterType = FooterType.BACK
message_service = MessageService()
def __init__(self, **kwargs) -> None: def __init__(self, **kwargs) -> None:
if type(self) is BaseMenu: if type(self) is BaseMenu:
raise NotImplementedError("BaseMenu cannot be instantiated directly.") raise NotImplementedError("BaseMenu cannot be instantiated directly.")
@@ -207,8 +210,11 @@ class BaseMenu(metaclass=PostInitCaller):
raise NotImplementedError("FooterType not correctly implemented!") raise NotImplementedError("FooterType not correctly implemented!")
def __display_menu(self) -> None: def __display_menu(self) -> None:
self.message_service.display_message()
if self.header: if self.header:
print_header() print_header()
self.__print_menu_title() self.__print_menu_title()
self.print_menu() self.print_menu()
self.__print_footer() self.__print_footer()

View File

View File

@@ -0,0 +1,57 @@
# ======================================================================= #
# 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 dataclasses import dataclass
from typing import List
from core.logger import DialogType, Logger
from core.types.color import Color
@dataclass()
class Message:
title: str
text: List[str]
color: Color
class MessageService:
_instance = None
def __new__(cls) -> "MessageService":
if cls._instance is None:
cls._instance = super(MessageService, cls).__new__(cls)
return cls._instance
def __init__(self) -> None:
if not hasattr(self, "__initialized"):
self.__initialized = False
if self.__initialized:
return
self.__initialized = True
self.message = None
def set_message(self, message: Message) -> None:
self.message = message
def display_message(self) -> None:
if self.message is None:
return
Logger.print_dialog(
title=DialogType.CUSTOM,
content=self.message.text,
custom_title=self.message.title,
custom_color=self.message.color,
)
self.__clear_message()
def __clear_message(self) -> None:
self.message = None