mirror of
https://github.com/dw-0/kiauh.git
synced 2025-12-23 15:53:36 +05:00
refactor(klipper): add existing client configs to example config upon creation
Signed-off-by: Dominik Willner <th33xitus@gmail.com>
This commit is contained in:
@@ -11,6 +11,9 @@
|
|||||||
|
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
|
from components.webui_client.client_config.client_config_setup import (
|
||||||
|
get_existing_client_config,
|
||||||
|
)
|
||||||
from kiauh import KIAUH_CFG
|
from kiauh import KIAUH_CFG
|
||||||
from components.klipper import (
|
from components.klipper import (
|
||||||
EXIT_KLIPPER_SETUP,
|
EXIT_KLIPPER_SETUP,
|
||||||
@@ -180,5 +183,7 @@ def create_klipper_instance(name: str, create_example_cfg: bool) -> None:
|
|||||||
kl_im.create_instance()
|
kl_im.create_instance()
|
||||||
kl_im.enable_instance()
|
kl_im.enable_instance()
|
||||||
if create_example_cfg:
|
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()
|
kl_im.start_instance()
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ import shutil
|
|||||||
import subprocess
|
import subprocess
|
||||||
import textwrap
|
import textwrap
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import List, Union, Literal, Dict
|
from typing import List, Union, Literal, Dict, Optional
|
||||||
|
|
||||||
from components.klipper import (
|
from components.klipper import (
|
||||||
MODULE_PATH,
|
MODULE_PATH,
|
||||||
@@ -33,6 +33,7 @@ from components.klipper.klipper_dialogs import (
|
|||||||
)
|
)
|
||||||
from components.moonraker.moonraker import Moonraker
|
from components.moonraker.moonraker import Moonraker
|
||||||
from components.moonraker.moonraker_utils import moonraker_to_multi_conversion
|
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.backup_manager.backup_manager import BackupManager
|
||||||
from core.config_manager.config_manager import ConfigManager
|
from core.config_manager.config_manager import ConfigManager
|
||||||
from core.instance_manager.base_instance import BaseInstance
|
from core.instance_manager.base_instance import BaseInstance
|
||||||
@@ -261,7 +262,9 @@ def get_highest_index(instance_list: List[Klipper]) -> int:
|
|||||||
return max(indices)
|
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}'")
|
Logger.print_status(f"Creating example printer.cfg in '{instance.cfg_dir}'")
|
||||||
if instance.cfg_file.is_file():
|
if instance.cfg_file.is_file():
|
||||||
Logger.print_info(f"'{instance.cfg_file}' already exists.")
|
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 = ConfigManager(target)
|
||||||
cm.set_value("virtual_sdcard", "path", str(instance.gcodes_dir))
|
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()
|
cm.write_config()
|
||||||
|
|
||||||
Logger.print_ok(f"Example printer.cfg created in '{instance.cfg_dir}'")
|
Logger.print_ok(f"Example printer.cfg created in '{instance.cfg_dir}'")
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
import shutil
|
import shutil
|
||||||
import subprocess
|
import subprocess
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import List, get_args
|
from typing import List, get_args, Union, Set
|
||||||
|
|
||||||
from kiauh import KIAUH_CFG
|
from kiauh import KIAUH_CFG
|
||||||
from components.klipper.klipper import Klipper
|
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")
|
client_config: ClientConfigData = client.get("client_config")
|
||||||
d_name = client_config.get("display_name")
|
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 ...")
|
Logger.print_info("Another Client-Config is already installed! Skipped ...")
|
||||||
return
|
return
|
||||||
|
|
||||||
@@ -80,19 +80,31 @@ def install_client_config(client_name: ClientName) -> None:
|
|||||||
Logger.print_ok(f"{d_name} installation complete!", start="\n")
|
Logger.print_ok(f"{d_name} installation complete!", start="\n")
|
||||||
|
|
||||||
|
|
||||||
def check_existing_client_config_install(client_name: ClientName) -> bool:
|
def config_for_other_client_exist(client_to_ignore: ClientName) -> bool:
|
||||||
# check if any other client-configs are present
|
"""
|
||||||
# as they can conflict each other, or are at least
|
Check if any other client configs are present on the system.
|
||||||
# redundant to have, so we skip the installation
|
It is usually not harmful, but chances are they can conflict each other.
|
||||||
client_list = list(get_args(ClientName))
|
Multiple client configs are, at least, redundant to have them installed
|
||||||
client_list.remove(client_name)
|
:param client_to_ignore: The client name to ignore for the check
|
||||||
for c in client_list:
|
: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_data: ClientData = load_client_data(c)
|
||||||
c_config_data: ClientConfigData = c_data.get("client_config")
|
c_config_data: ClientConfigData = c_data.get("client_config")
|
||||||
if c_config_data.get("dir").exists():
|
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:
|
def download_client_config(client_config: ClientConfigData) -> None:
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ from components.webui_client import (
|
|||||||
from components.moonraker.moonraker import Moonraker
|
from components.moonraker.moonraker import Moonraker
|
||||||
from components.webui_client.client_config.client_config_setup import (
|
from components.webui_client.client_config.client_config_setup import (
|
||||||
install_client_config,
|
install_client_config,
|
||||||
check_existing_client_config_install,
|
config_for_other_client_exist,
|
||||||
)
|
)
|
||||||
from components.webui_client.client_dialogs import (
|
from components.webui_client.client_dialogs import (
|
||||||
print_moonraker_not_found_dialog,
|
print_moonraker_not_found_dialog,
|
||||||
@@ -100,7 +100,7 @@ def install_client(client_name: ClientName) -> None:
|
|||||||
if (
|
if (
|
||||||
kl_instances
|
kl_instances
|
||||||
and not client_config.get("dir").exists()
|
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)
|
print_install_client_config_dialog(client)
|
||||||
question = f"Download the recommended {client_config.get('display_name')}?"
|
question = f"Download the recommended {client_config.get('display_name')}?"
|
||||||
|
|||||||
Reference in New Issue
Block a user