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

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