refactor(klipper): add existing client configs to example config upon creation

Signed-off-by: Dominik Willner <th33xitus@gmail.com>
This commit is contained in:
dw-0
2024-03-03 11:04:06 +01:00
parent 8df75dc8d0
commit bd1aa1ae2b
4 changed files with 44 additions and 16 deletions

View File

@@ -11,6 +11,9 @@
from pathlib import Path
from components.webui_client.client_config.client_config_setup import (
get_existing_client_config,
)
from kiauh import KIAUH_CFG
from components.klipper import (
EXIT_KLIPPER_SETUP,
@@ -180,5 +183,7 @@ def create_klipper_instance(name: str, create_example_cfg: bool) -> None:
kl_im.create_instance()
kl_im.enable_instance()
if create_example_cfg:
create_example_printer_cfg(new_instance)
# if a client-config is installed, include it in the new example cfg
client_configs = get_existing_client_config()
create_example_printer_cfg(new_instance, client_configs)
kl_im.start_instance()

View File

@@ -16,7 +16,7 @@ import shutil
import subprocess
import textwrap
from pathlib import Path
from typing import List, Union, Literal, Dict
from typing import List, Union, Literal, Dict, Optional
from components.klipper import (
MODULE_PATH,
@@ -33,6 +33,7 @@ from components.klipper.klipper_dialogs import (
)
from components.moonraker.moonraker import Moonraker
from components.moonraker.moonraker_utils import moonraker_to_multi_conversion
from components.webui_client import ClientData
from core.backup_manager.backup_manager import BackupManager
from core.config_manager.config_manager import ConfigManager
from core.instance_manager.base_instance import BaseInstance
@@ -261,7 +262,9 @@ def get_highest_index(instance_list: List[Klipper]) -> int:
return max(indices)
def create_example_printer_cfg(instance: Klipper) -> None:
def create_example_printer_cfg(
instance: Klipper, client_configs: Optional[List[ClientData]] = None
) -> None:
Logger.print_status(f"Creating example printer.cfg in '{instance.cfg_dir}'")
if instance.cfg_file.is_file():
Logger.print_info(f"'{instance.cfg_file}' already exists.")
@@ -277,7 +280,15 @@ def create_example_printer_cfg(instance: Klipper) -> None:
cm = ConfigManager(target)
cm.set_value("virtual_sdcard", "path", str(instance.gcodes_dir))
# include existing client configs in the example config
if client_configs is not None and len(client_configs) > 0:
for c in client_configs:
section = c.get("client_config").get("printer_cfg_section")
cm.config.add_section(section=section)
cm.write_config()
Logger.print_ok(f"Example printer.cfg created in '{instance.cfg_dir}'")

View File

@@ -12,7 +12,7 @@
import shutil
import subprocess
from pathlib import Path
from typing import List, get_args
from typing import List, get_args, Union, Set
from kiauh import KIAUH_CFG
from components.klipper.klipper import Klipper
@@ -40,7 +40,7 @@ def install_client_config(client_name: ClientName) -> None:
client_config: ClientConfigData = client.get("client_config")
d_name = client_config.get("display_name")
if check_existing_client_config_install(client_name):
if config_for_other_client_exist(client_name):
Logger.print_info("Another Client-Config is already installed! Skipped ...")
return
@@ -80,19 +80,31 @@ def install_client_config(client_name: ClientName) -> None:
Logger.print_ok(f"{d_name} installation complete!", start="\n")
def check_existing_client_config_install(client_name: ClientName) -> bool:
# check if any other client-configs are present
# as they can conflict each other, or are at least
# redundant to have, so we skip the installation
client_list = list(get_args(ClientName))
client_list.remove(client_name)
for c in client_list:
def config_for_other_client_exist(client_to_ignore: ClientName) -> bool:
"""
Check if any other client configs are present on the system.
It is usually not harmful, but chances are they can conflict each other.
Multiple client configs are, at least, redundant to have them installed
:param client_to_ignore: The client name to ignore for the check
:return: True, if other client configs were found, else False
"""
clients = set([c["name"] for c in get_existing_client_config()])
clients = clients - {client_to_ignore}
return True if len(clients) > 0 else False
def get_existing_client_config() -> List[ClientData]:
clients = list(get_args(ClientName))
installed_client_configs: List[ClientData] = []
for c in clients:
c_data: ClientData = load_client_data(c)
c_config_data: ClientConfigData = c_data.get("client_config")
if c_config_data.get("dir").exists():
return True
installed_client_configs.append(c_data)
return False
return installed_client_configs
def download_client_config(client_config: ClientConfigData) -> None:

View File

@@ -21,7 +21,7 @@ from components.webui_client import (
from components.moonraker.moonraker import Moonraker
from components.webui_client.client_config.client_config_setup import (
install_client_config,
check_existing_client_config_install,
config_for_other_client_exist,
)
from components.webui_client.client_dialogs import (
print_moonraker_not_found_dialog,
@@ -100,7 +100,7 @@ def install_client(client_name: ClientName) -> None:
if (
kl_instances
and not client_config.get("dir").exists()
and not check_existing_client_config_install(client.get("name"))
and not config_for_other_client_exist(client_to_ignore=client.get("name"))
):
print_install_client_config_dialog(client)
question = f"Download the recommended {client_config.get('display_name')}?"