mirror of
https://github.com/dw-0/kiauh.git
synced 2025-12-16 12:04:29 +05:00
refactor: rework client config conflict detection (#537)
Signed-off-by: Dominik Willner <th33xitus@gmail.com>
This commit is contained in:
@@ -34,6 +34,9 @@ from core.constants import (
|
|||||||
)
|
)
|
||||||
from core.logger import Logger
|
from core.logger import Logger
|
||||||
from core.settings.kiauh_settings import KiauhSettings
|
from core.settings.kiauh_settings import KiauhSettings
|
||||||
|
from core.submodules.simple_config_parser.src.simple_config_parser.simple_config_parser import (
|
||||||
|
SimpleConfigParser,
|
||||||
|
)
|
||||||
from core.types import ComponentStatus
|
from core.types import ComponentStatus
|
||||||
from utils.common import get_install_status
|
from utils.common import get_install_status
|
||||||
from utils.fs_utils import create_symlink, remove_file
|
from utils.fs_utils import create_symlink, remove_file
|
||||||
@@ -41,6 +44,7 @@ from utils.git_utils import (
|
|||||||
get_latest_remote_tag,
|
get_latest_remote_tag,
|
||||||
get_latest_unstable_tag,
|
get_latest_unstable_tag,
|
||||||
)
|
)
|
||||||
|
from utils.instance_utils import get_instances
|
||||||
|
|
||||||
|
|
||||||
def get_client_status(
|
def get_client_status(
|
||||||
@@ -67,20 +71,46 @@ def get_client_config_status(client: BaseWebClient) -> ComponentStatus:
|
|||||||
return get_install_status(client.client_config.config_dir)
|
return get_install_status(client.client_config.config_dir)
|
||||||
|
|
||||||
|
|
||||||
def get_current_client_config(clients: List[BaseWebClient]) -> str:
|
def get_current_client_config() -> str:
|
||||||
installed = []
|
mainsail, fluidd = MainsailData(), FluiddData()
|
||||||
for client in clients:
|
clients: List[BaseWebClient] = [mainsail, fluidd]
|
||||||
client_config = client.client_config
|
installed = [c for c in clients if c.client_config.config_dir.exists()]
|
||||||
if client_config.config_dir.exists():
|
|
||||||
installed.append(client)
|
|
||||||
|
|
||||||
if len(installed) > 1:
|
if not installed:
|
||||||
return f"{COLOR_YELLOW}Conflict!{RESET_FORMAT}"
|
return f"{COLOR_CYAN}-{RESET_FORMAT}"
|
||||||
elif len(installed) == 1:
|
elif len(installed) == 1:
|
||||||
cfg = installed[0].client_config
|
cfg = installed[0].client_config
|
||||||
return f"{COLOR_CYAN}{cfg.display_name}{RESET_FORMAT}"
|
return f"{COLOR_CYAN}{cfg.display_name}{RESET_FORMAT}"
|
||||||
|
|
||||||
return f"{COLOR_CYAN}-{RESET_FORMAT}"
|
# at this point, both client config folders exists, so we need to check
|
||||||
|
# which are actually included in the printer.cfg of all klipper instances
|
||||||
|
mainsail_includes, fluidd_includes = [], []
|
||||||
|
klipper_instances: List[Klipper] = get_instances(Klipper)
|
||||||
|
for instance in klipper_instances:
|
||||||
|
scp = SimpleConfigParser()
|
||||||
|
scp.read_file(instance.cfg_file)
|
||||||
|
includes_mainsail = scp.has_section(mainsail.client_config.config_section)
|
||||||
|
includes_fluidd = scp.has_section(fluidd.client_config.config_section)
|
||||||
|
|
||||||
|
if includes_mainsail:
|
||||||
|
mainsail_includes.append(instance)
|
||||||
|
if includes_fluidd:
|
||||||
|
fluidd_includes.append(instance)
|
||||||
|
|
||||||
|
# if both are included in the same file, we have a potential conflict
|
||||||
|
if includes_mainsail and includes_fluidd:
|
||||||
|
return f"{COLOR_YELLOW}Conflict!{RESET_FORMAT}"
|
||||||
|
|
||||||
|
if not mainsail_includes and not fluidd_includes:
|
||||||
|
# there are no includes at all, even though the client config folders exist
|
||||||
|
return f"{COLOR_CYAN}-{RESET_FORMAT}"
|
||||||
|
elif len(fluidd_includes) > len(mainsail_includes):
|
||||||
|
# there are more instances that include fluidd than mainsail
|
||||||
|
return f"{COLOR_CYAN}{fluidd.client_config.display_name}{RESET_FORMAT}"
|
||||||
|
else:
|
||||||
|
# there are the same amount of non-conflicting includes for each config
|
||||||
|
# or more instances include mainsail than fluidd
|
||||||
|
return f"{COLOR_CYAN}{mainsail.client_config.display_name}{RESET_FORMAT}"
|
||||||
|
|
||||||
|
|
||||||
def enable_mainsail_remotemode() -> None:
|
def enable_mainsail_remotemode() -> None:
|
||||||
|
|||||||
@@ -55,10 +55,10 @@ class MainMenu(BaseMenu):
|
|||||||
self.footer_type: FooterType = FooterType.QUIT
|
self.footer_type: FooterType = FooterType.QUIT
|
||||||
|
|
||||||
self.version = ""
|
self.version = ""
|
||||||
self.kl_status = self.kl_owner = self.kl_repo = ""
|
self.kl_status, self.kl_owner, self.kl_repo = "", "", ""
|
||||||
self.mr_status = self.mr_owner = self.mr_repo = ""
|
self.mr_status, self.mr_owner, self.mr_repo = "", "", ""
|
||||||
self.ms_status = self.fl_status = self.ks_status = ""
|
self.ms_status, self.fl_status, self.ks_status = "", "", ""
|
||||||
self.cn_status = self.cc_status = ""
|
self.cn_status, self.cc_status = "", ""
|
||||||
self._init_status()
|
self._init_status()
|
||||||
|
|
||||||
def set_previous_menu(self, previous_menu: Type[BaseMenu] | None) -> None:
|
def set_previous_menu(self, previous_menu: Type[BaseMenu] | None) -> None:
|
||||||
@@ -92,9 +92,9 @@ class MainMenu(BaseMenu):
|
|||||||
self._get_component_status("mr", get_moonraker_status)
|
self._get_component_status("mr", get_moonraker_status)
|
||||||
self._get_component_status("ms", get_client_status, MainsailData())
|
self._get_component_status("ms", get_client_status, MainsailData())
|
||||||
self._get_component_status("fl", get_client_status, FluiddData())
|
self._get_component_status("fl", get_client_status, FluiddData())
|
||||||
self.cc_status = get_current_client_config([MainsailData(), FluiddData()])
|
|
||||||
self._get_component_status("ks", get_klipperscreen_status)
|
self._get_component_status("ks", get_klipperscreen_status)
|
||||||
self._get_component_status("cn", get_crowsnest_status)
|
self._get_component_status("cn", get_crowsnest_status)
|
||||||
|
self.cc_status = get_current_client_config()
|
||||||
|
|
||||||
def _get_component_status(self, name: str, status_fn: Callable, *args) -> None:
|
def _get_component_status(self, name: str, status_fn: Callable, *args) -> None:
|
||||||
status_data: ComponentStatus = status_fn(*args)
|
status_data: ComponentStatus = status_fn(*args)
|
||||||
|
|||||||
Reference in New Issue
Block a user