mirror of
https://github.com/dw-0/kiauh.git
synced 2025-12-14 19:14:27 +05:00
Compare commits
5 Commits
v5.1.9
...
v6.0.0-rc.
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8851bd68f8 | ||
|
|
9168ad88a6 | ||
|
|
03c0d46a2e | ||
|
|
8a8afc60ee | ||
|
|
5b68710b23 |
10
kiauh.sh
10
kiauh.sh
@@ -123,19 +123,19 @@ function main() {
|
|||||||
launch_kiauh_v6
|
launch_kiauh_v6
|
||||||
else
|
else
|
||||||
top_border
|
top_border
|
||||||
echo -e "| ${green}KIAUH v6.0.0-alpha1 is available now!${white} |"
|
echo -e "| ${green}KIAUH v6.0.0-rc.2 is available now!${white} |"
|
||||||
hr
|
hr
|
||||||
echo -e "| View Changelog: ${magenta}https://git.io/JnmlX${white} |"
|
echo -e "| View Changelog: ${magenta}https://git.io/JnmlX${white} |"
|
||||||
blank_line
|
blank_line
|
||||||
echo -e "| KIAUH v6 was completely rewritten from the ground up. |"
|
echo -e "| KIAUH v6 was completely rewritten from the ground up. |"
|
||||||
echo -e "| It's based on Python 3.8 and has many improvements. |"
|
echo -e "| It's based on Python 3.8 and has many improvements. |"
|
||||||
blank_line
|
blank_line
|
||||||
echo -e "| ${yellow}NOTE: Version 6 is still in alpha, so bugs may occur!${white} |"
|
echo -e "| ${yellow}NOTE: Version 6 is still not final yet, but most bugs${white} |"
|
||||||
echo -e "| ${yellow}Yet, your feedback and bug reports are very much${white} |"
|
echo -e "| ${yellow}should be fixed by now. Still, if you encounter any${white} |"
|
||||||
echo -e "| ${yellow}appreciated and will help finalize the release.${white} |"
|
echo -e "| ${yellow}issues, please report them so they can get fixed.${white} |"
|
||||||
hr
|
hr
|
||||||
echo -e "| Would you like to try out KIAUH v6? |"
|
echo -e "| Would you like to try out KIAUH v6? |"
|
||||||
echo -e "| 1) Yes |"
|
echo -e "| 1) Yes (recommended - v5 is sunsetting soon) |"
|
||||||
echo -e "| 2) No |"
|
echo -e "| 2) No |"
|
||||||
echo -e "| 3) Yes, remember my choice for next time |"
|
echo -e "| 3) Yes, remember my choice for next time |"
|
||||||
echo -e "| 4) No, remember my choice for next time |"
|
echo -e "| 4) No, remember my choice for next time |"
|
||||||
|
|||||||
@@ -96,6 +96,7 @@ def install_klipperscreen() -> None:
|
|||||||
|
|
||||||
|
|
||||||
def patch_klipperscreen_update_manager(instances: List[Moonraker]) -> None:
|
def patch_klipperscreen_update_manager(instances: List[Moonraker]) -> None:
|
||||||
|
BackupService().backup_moonraker_conf()
|
||||||
add_config_section(
|
add_config_section(
|
||||||
section=KLIPPERSCREEN_UPDATER_SECTION_NAME,
|
section=KLIPPERSCREEN_UPDATER_SECTION_NAME,
|
||||||
instances=instances,
|
instances=instances,
|
||||||
@@ -182,6 +183,7 @@ def remove_klipperscreen() -> None:
|
|||||||
mr_instances: List[Moonraker] = get_instances(Moonraker)
|
mr_instances: List[Moonraker] = get_instances(Moonraker)
|
||||||
if mr_instances:
|
if mr_instances:
|
||||||
Logger.print_status("Removing KlipperScreen from update manager ...")
|
Logger.print_status("Removing KlipperScreen from update manager ...")
|
||||||
|
BackupService().backup_moonraker_conf()
|
||||||
remove_config_section("update_manager KlipperScreen", mr_instances)
|
remove_config_section("update_manager KlipperScreen", mr_instances)
|
||||||
Logger.print_ok("KlipperScreen successfully removed from update manager!")
|
Logger.print_ok("KlipperScreen successfully removed from update manager!")
|
||||||
|
|
||||||
|
|||||||
@@ -182,8 +182,32 @@ def backup_moonraker_db_dir() -> None:
|
|||||||
svc = BackupService()
|
svc = BackupService()
|
||||||
|
|
||||||
if not instances:
|
if not instances:
|
||||||
Logger.print_info("Unable to find directory to backup!")
|
# fallback: search for printer data directories in the user's home directory
|
||||||
Logger.print_info("Are there no Moonraker instances installed?")
|
Logger.print_info("No Moonraker instances found via systemd services.")
|
||||||
|
Logger.print_info(
|
||||||
|
"Attempting to find printer data directories in home directory..."
|
||||||
|
)
|
||||||
|
|
||||||
|
home_dir = Path.home()
|
||||||
|
printer_data_dirs = []
|
||||||
|
|
||||||
|
for pattern in ["printer_data", "printer_*_data"]:
|
||||||
|
for data_dir in home_dir.glob(pattern):
|
||||||
|
if data_dir.is_dir():
|
||||||
|
printer_data_dirs.append(data_dir)
|
||||||
|
|
||||||
|
if not printer_data_dirs:
|
||||||
|
Logger.print_info("Unable to find directory to backup!")
|
||||||
|
Logger.print_info("No printer data directories found in home directory.")
|
||||||
|
return
|
||||||
|
|
||||||
|
for data_dir in printer_data_dirs:
|
||||||
|
svc.backup_directory(
|
||||||
|
source_path=data_dir.joinpath("database"),
|
||||||
|
target_path=data_dir.name,
|
||||||
|
backup_name="database",
|
||||||
|
)
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
for instance in instances:
|
for instance in instances:
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ from components.klipper.klipper import Klipper
|
|||||||
from components.moonraker.moonraker import Moonraker
|
from components.moonraker.moonraker import Moonraker
|
||||||
from components.webui_client.base_data import BaseWebClientConfig
|
from components.webui_client.base_data import BaseWebClientConfig
|
||||||
from core.logger import Logger
|
from core.logger import Logger
|
||||||
|
from core.services.backup_service import BackupService
|
||||||
from core.services.message_service import Message
|
from core.services.message_service import Message
|
||||||
from core.types.color import Color
|
from core.types.color import Color
|
||||||
from utils.config_utils import remove_config_section
|
from utils.config_utils import remove_config_section
|
||||||
@@ -35,6 +36,8 @@ def run_client_config_removal(
|
|||||||
if run_remove_routines(client_config.config_dir):
|
if run_remove_routines(client_config.config_dir):
|
||||||
completion_msg.text.append(f"● {client_config.display_name} removed")
|
completion_msg.text.append(f"● {client_config.display_name} removed")
|
||||||
|
|
||||||
|
BackupService().backup_printer_config_dir()
|
||||||
|
|
||||||
completion_msg = remove_moonraker_config_section(
|
completion_msg = remove_moonraker_config_section(
|
||||||
completion_msg, client_config, mr_instances
|
completion_msg, client_config, mr_instances
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -25,8 +25,8 @@ from components.webui_client.client_utils import (
|
|||||||
)
|
)
|
||||||
from core.instance_manager.instance_manager import InstanceManager
|
from core.instance_manager.instance_manager import InstanceManager
|
||||||
from core.logger import Logger
|
from core.logger import Logger
|
||||||
|
from core.services.backup_service import BackupService
|
||||||
from core.settings.kiauh_settings import KiauhSettings
|
from core.settings.kiauh_settings import KiauhSettings
|
||||||
from utils.common import backup_printer_config_dir
|
|
||||||
from utils.config_utils import add_config_section, add_config_section_at_top
|
from utils.config_utils import add_config_section, add_config_section_at_top
|
||||||
from utils.fs_utils import create_symlink
|
from utils.fs_utils import create_symlink
|
||||||
from utils.git_utils import git_clone_wrapper, git_pull_wrapper
|
from utils.git_utils import git_clone_wrapper, git_pull_wrapper
|
||||||
@@ -57,7 +57,7 @@ def install_client_config(client_data: BaseWebClient, cfg_backup=True) -> None:
|
|||||||
create_client_config_symlink(client_config, kl_instances)
|
create_client_config_symlink(client_config, kl_instances)
|
||||||
|
|
||||||
if cfg_backup:
|
if cfg_backup:
|
||||||
backup_printer_config_dir()
|
BackupService().backup_printer_config_dir()
|
||||||
|
|
||||||
add_config_section(
|
add_config_section(
|
||||||
section=f"update_manager {client_config.name}",
|
section=f"update_manager {client_config.name}",
|
||||||
|
|||||||
@@ -67,6 +67,7 @@ def run_client_removal(
|
|||||||
if remove_client_nginx_logs(client, kl_instances):
|
if remove_client_nginx_logs(client, kl_instances):
|
||||||
completion_msg.text.append("● NGINX logs removed")
|
completion_msg.text.append("● NGINX logs removed")
|
||||||
|
|
||||||
|
BackupService().backup_moonraker_conf()
|
||||||
section = f"update_manager {client_name}"
|
section = f"update_manager {client_name}"
|
||||||
handled_instances: List[Moonraker] = remove_config_section(
|
handled_instances: List[Moonraker] = remove_config_section(
|
||||||
section, mr_instances
|
section, mr_instances
|
||||||
|
|||||||
@@ -37,9 +37,10 @@ from components.webui_client.client_utils import (
|
|||||||
)
|
)
|
||||||
from core.instance_manager.instance_manager import InstanceManager
|
from core.instance_manager.instance_manager import InstanceManager
|
||||||
from core.logger import DialogType, Logger
|
from core.logger import DialogType, Logger
|
||||||
|
from core.services.backup_service import BackupService
|
||||||
from core.settings.kiauh_settings import KiauhSettings
|
from core.settings.kiauh_settings import KiauhSettings
|
||||||
from core.types.color import Color
|
from core.types.color import Color
|
||||||
from utils.common import backup_printer_config_dir, check_install_dependencies
|
from utils.common import check_install_dependencies
|
||||||
from utils.config_utils import add_config_section
|
from utils.config_utils import add_config_section
|
||||||
from utils.fs_utils import unzip
|
from utils.fs_utils import unzip
|
||||||
from utils.input_utils import get_confirm
|
from utils.input_utils import get_confirm
|
||||||
@@ -97,7 +98,7 @@ def install_client(
|
|||||||
if enable_remotemode and client.client == WebClientType.MAINSAIL:
|
if enable_remotemode and client.client == WebClientType.MAINSAIL:
|
||||||
enable_mainsail_remotemode()
|
enable_mainsail_remotemode()
|
||||||
|
|
||||||
backup_printer_config_dir()
|
BackupService().backup_printer_config_dir()
|
||||||
add_config_section(
|
add_config_section(
|
||||||
section=f"update_manager {client.name}",
|
section=f"update_manager {client.name}",
|
||||||
instances=mr_instances,
|
instances=mr_instances,
|
||||||
|
|||||||
@@ -25,8 +25,8 @@ from components.webui_client.fluidd_data import FluiddData
|
|||||||
from components.webui_client.mainsail_data import MainsailData
|
from components.webui_client.mainsail_data import MainsailData
|
||||||
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.backup_service import BackupService
|
||||||
from core.types.color import Color
|
from core.types.color import Color
|
||||||
from utils.common import backup_printer_config_dir
|
|
||||||
|
|
||||||
|
|
||||||
# noinspection PyUnusedLocal
|
# noinspection PyUnusedLocal
|
||||||
@@ -86,7 +86,7 @@ class BackupMenu(BaseMenu):
|
|||||||
backup_moonraker_dir()
|
backup_moonraker_dir()
|
||||||
|
|
||||||
def backup_printer_config(self, **kwargs) -> None:
|
def backup_printer_config(self, **kwargs) -> None:
|
||||||
backup_printer_config_dir()
|
BackupService().backup_printer_config_dir()
|
||||||
|
|
||||||
def backup_moonraker_db(self, **kwargs) -> None:
|
def backup_moonraker_db(self, **kwargs) -> None:
|
||||||
backup_moonraker_db_dir()
|
backup_moonraker_db_dir()
|
||||||
|
|||||||
@@ -11,9 +11,12 @@ from __future__ import annotations
|
|||||||
import shutil
|
import shutil
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Optional
|
from typing import List, Optional
|
||||||
|
|
||||||
|
from components.klipper.klipper import Klipper
|
||||||
|
from components.moonraker.moonraker import Moonraker
|
||||||
from core.logger import Logger
|
from core.logger import Logger
|
||||||
|
from utils.instance_utils import get_instances
|
||||||
|
|
||||||
|
|
||||||
class BackupService:
|
class BackupService:
|
||||||
@@ -24,6 +27,14 @@ class BackupService:
|
|||||||
def backup_root(self) -> Path:
|
def backup_root(self) -> Path:
|
||||||
return self._backup_root
|
return self._backup_root
|
||||||
|
|
||||||
|
@property
|
||||||
|
def timestamp(self) -> str:
|
||||||
|
return datetime.now().strftime("%Y%m%d-%H%M%S")
|
||||||
|
|
||||||
|
################################################
|
||||||
|
# GENERIC BACKUP METHODS
|
||||||
|
################################################
|
||||||
|
|
||||||
def backup_file(
|
def backup_file(
|
||||||
self,
|
self,
|
||||||
source_path: Path,
|
source_path: Path,
|
||||||
@@ -47,9 +58,9 @@ class BackupService:
|
|||||||
try:
|
try:
|
||||||
self._backup_root.mkdir(parents=True, exist_ok=True)
|
self._backup_root.mkdir(parents=True, exist_ok=True)
|
||||||
|
|
||||||
timestamp = datetime.now().strftime("%Y%m%d-%H%M%S")
|
|
||||||
filename = (
|
filename = (
|
||||||
target_name or f"{source_path.stem}_{timestamp}{source_path.suffix}"
|
target_name
|
||||||
|
or f"{source_path.stem}_{self.timestamp}{source_path.suffix}"
|
||||||
)
|
)
|
||||||
if target_path is not None:
|
if target_path is not None:
|
||||||
backup_path = self._backup_root.joinpath(target_path, filename)
|
backup_path = self._backup_root.joinpath(target_path, filename)
|
||||||
@@ -91,8 +102,7 @@ class BackupService:
|
|||||||
try:
|
try:
|
||||||
self._backup_root.mkdir(parents=True, exist_ok=True)
|
self._backup_root.mkdir(parents=True, exist_ok=True)
|
||||||
|
|
||||||
timestamp = datetime.now().strftime("%Y%m%d-%H%M%S")
|
backup_dir_name = f"{backup_name}_{self.timestamp}"
|
||||||
backup_dir_name = f"{backup_name}_{timestamp}"
|
|
||||||
|
|
||||||
if target_path is not None:
|
if target_path is not None:
|
||||||
backup_path = self._backup_root.joinpath(target_path, backup_dir_name)
|
backup_path = self._backup_root.joinpath(target_path, backup_dir_name)
|
||||||
@@ -109,3 +119,71 @@ class BackupService:
|
|||||||
except Exception as e:
|
except Exception as e:
|
||||||
Logger.print_error(f"Failed to backup directory '{source_path}': {e}")
|
Logger.print_error(f"Failed to backup directory '{source_path}': {e}")
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
################################################
|
||||||
|
# SPECIFIC BACKUP METHODS
|
||||||
|
################################################
|
||||||
|
|
||||||
|
def backup_printer_cfg(self):
|
||||||
|
klipper_instances: List[Klipper] = get_instances(Klipper)
|
||||||
|
for instance in klipper_instances:
|
||||||
|
target_path: Path = self._backup_root.joinpath(
|
||||||
|
instance.data_dir.name, f"config_{self.timestamp}"
|
||||||
|
)
|
||||||
|
self.backup_file(
|
||||||
|
source_path=instance.cfg_file,
|
||||||
|
target_path=target_path,
|
||||||
|
target_name=instance.cfg_file.name,
|
||||||
|
)
|
||||||
|
|
||||||
|
def backup_moonraker_conf(self):
|
||||||
|
moonraker_instances: List[Moonraker] = get_instances(Moonraker)
|
||||||
|
for instance in moonraker_instances:
|
||||||
|
target_path: Path = self._backup_root.joinpath(
|
||||||
|
instance.data_dir.name, f"config_{self.timestamp}"
|
||||||
|
)
|
||||||
|
self.backup_file(
|
||||||
|
source_path=instance.cfg_file,
|
||||||
|
target_path=target_path,
|
||||||
|
target_name=instance.cfg_file.name,
|
||||||
|
)
|
||||||
|
|
||||||
|
def backup_printer_config_dir(self) -> None:
|
||||||
|
instances: List[Klipper] = get_instances(Klipper)
|
||||||
|
if not instances:
|
||||||
|
# fallback: search for printer data directories in the user's home directory
|
||||||
|
Logger.print_info("No Klipper instances found via systemd services.")
|
||||||
|
Logger.print_info(
|
||||||
|
"Attempting to find printer data directories in home directory..."
|
||||||
|
)
|
||||||
|
|
||||||
|
home_dir = Path.home()
|
||||||
|
printer_data_dirs = []
|
||||||
|
|
||||||
|
for pattern in ["printer_data", "printer_*_data"]:
|
||||||
|
for data_dir in home_dir.glob(pattern):
|
||||||
|
if data_dir.is_dir():
|
||||||
|
printer_data_dirs.append(data_dir)
|
||||||
|
|
||||||
|
if not printer_data_dirs:
|
||||||
|
Logger.print_info("Unable to find directory to backup!")
|
||||||
|
Logger.print_info(
|
||||||
|
"No printer data directories found in home directory."
|
||||||
|
)
|
||||||
|
return
|
||||||
|
|
||||||
|
for data_dir in printer_data_dirs:
|
||||||
|
self.backup_directory(
|
||||||
|
source_path=data_dir.joinpath("config"),
|
||||||
|
target_path=data_dir.name,
|
||||||
|
backup_name="config",
|
||||||
|
)
|
||||||
|
|
||||||
|
return
|
||||||
|
|
||||||
|
for instance in instances:
|
||||||
|
self.backup_directory(
|
||||||
|
source_path=instance.base.cfg_dir,
|
||||||
|
target_path=f"{instance.data_dir.name}",
|
||||||
|
backup_name="config",
|
||||||
|
)
|
||||||
|
|||||||
@@ -151,6 +151,7 @@ class MobilerakerExtension(BaseExtension):
|
|||||||
Logger.print_status(
|
Logger.print_status(
|
||||||
"Removing Mobileraker's companion from update manager ..."
|
"Removing Mobileraker's companion from update manager ..."
|
||||||
)
|
)
|
||||||
|
BackupService().backup_moonraker_conf()
|
||||||
remove_config_section(MOBILERAKER_UPDATER_SECTION_NAME, mr_instances)
|
remove_config_section(MOBILERAKER_UPDATER_SECTION_NAME, mr_instances)
|
||||||
Logger.print_ok(
|
Logger.print_ok(
|
||||||
"Mobileraker's companion successfully removed from update manager!"
|
"Mobileraker's companion successfully removed from update manager!"
|
||||||
@@ -162,6 +163,7 @@ class MobilerakerExtension(BaseExtension):
|
|||||||
Logger.print_error(f"Error removing Mobileraker's companion:\n{e}")
|
Logger.print_error(f"Error removing Mobileraker's companion:\n{e}")
|
||||||
|
|
||||||
def _patch_mobileraker_update_manager(self, instances: List[Moonraker]) -> None:
|
def _patch_mobileraker_update_manager(self, instances: List[Moonraker]) -> None:
|
||||||
|
BackupService().backup_moonraker_conf()
|
||||||
add_config_section(
|
add_config_section(
|
||||||
section=MOBILERAKER_UPDATER_SECTION_NAME,
|
section=MOBILERAKER_UPDATER_SECTION_NAME,
|
||||||
instances=instances,
|
instances=instances,
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ from components.moonraker.moonraker import Moonraker
|
|||||||
from core.instance_manager.base_instance import SUFFIX_BLACKLIST
|
from core.instance_manager.base_instance import SUFFIX_BLACKLIST
|
||||||
from core.instance_manager.instance_manager import InstanceManager
|
from core.instance_manager.instance_manager import InstanceManager
|
||||||
from core.logger import DialogType, Logger
|
from core.logger import DialogType, Logger
|
||||||
|
from core.services.backup_service import BackupService
|
||||||
from core.submodules.simple_config_parser.src.simple_config_parser.simple_config_parser import (
|
from core.submodules.simple_config_parser.src.simple_config_parser.simple_config_parser import (
|
||||||
SimpleConfigParser,
|
SimpleConfigParser,
|
||||||
)
|
)
|
||||||
@@ -31,7 +32,10 @@ from extensions.obico import (
|
|||||||
from extensions.obico.moonraker_obico import (
|
from extensions.obico.moonraker_obico import (
|
||||||
MoonrakerObico,
|
MoonrakerObico,
|
||||||
)
|
)
|
||||||
from utils.common import check_install_dependencies, moonraker_exists
|
from utils.common import (
|
||||||
|
check_install_dependencies,
|
||||||
|
moonraker_exists,
|
||||||
|
)
|
||||||
from utils.config_utils import (
|
from utils.config_utils import (
|
||||||
add_config_section,
|
add_config_section,
|
||||||
remove_config_section,
|
remove_config_section,
|
||||||
@@ -119,6 +123,8 @@ class ObicoExtension(BaseExtension):
|
|||||||
|
|
||||||
cmd_sysctl_manage("daemon-reload")
|
cmd_sysctl_manage("daemon-reload")
|
||||||
|
|
||||||
|
BackupService().backup_printer_config_dir()
|
||||||
|
|
||||||
# add to klippers config
|
# add to klippers config
|
||||||
self._patch_printer_cfg(kl_instances)
|
self._patch_printer_cfg(kl_instances)
|
||||||
InstanceManager.restart_all(kl_instances)
|
InstanceManager.restart_all(kl_instances)
|
||||||
@@ -165,6 +171,7 @@ class ObicoExtension(BaseExtension):
|
|||||||
self._remove_obico_instances(ob_instances)
|
self._remove_obico_instances(ob_instances)
|
||||||
self._remove_obico_dir()
|
self._remove_obico_dir()
|
||||||
self._remove_obico_env()
|
self._remove_obico_env()
|
||||||
|
BackupService().backup_printer_config_dir()
|
||||||
remove_config_section(f"include {OBICO_MACROS_CFG_NAME}", kl_instances)
|
remove_config_section(f"include {OBICO_MACROS_CFG_NAME}", kl_instances)
|
||||||
remove_config_section(f"include {OBICO_UPDATE_CFG_NAME}", mr_instances)
|
remove_config_section(f"include {OBICO_UPDATE_CFG_NAME}", mr_instances)
|
||||||
Logger.print_dialog(
|
Logger.print_dialog(
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ from components.klipper.klipper import Klipper
|
|||||||
from components.moonraker.moonraker import Moonraker
|
from components.moonraker.moonraker import Moonraker
|
||||||
from core.instance_manager.instance_manager import InstanceManager
|
from core.instance_manager.instance_manager import InstanceManager
|
||||||
from core.logger import DialogType, Logger
|
from core.logger import DialogType, Logger
|
||||||
|
from core.services.backup_service import BackupService
|
||||||
from extensions.base_extension import BaseExtension
|
from extensions.base_extension import BaseExtension
|
||||||
from extensions.octoapp import (
|
from extensions.octoapp import (
|
||||||
OA_DEPS_JSON_FILE,
|
OA_DEPS_JSON_FILE,
|
||||||
@@ -133,6 +134,7 @@ class OctoappExtension(BaseExtension):
|
|||||||
self._remove_OA_store_dirs()
|
self._remove_OA_store_dirs()
|
||||||
self._remove_OA_dir()
|
self._remove_OA_dir()
|
||||||
self._remove_OA_env()
|
self._remove_OA_env()
|
||||||
|
BackupService().backup_moonraker_conf()
|
||||||
remove_config_section(f"include {OA_SYS_CFG_NAME}", mr_instances)
|
remove_config_section(f"include {OA_SYS_CFG_NAME}", mr_instances)
|
||||||
run_remove_routines(OA_INSTALLER_LOG_FILE)
|
run_remove_routines(OA_INSTALLER_LOG_FILE)
|
||||||
Logger.print_dialog(
|
Logger.print_dialog(
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ from typing import List
|
|||||||
from components.moonraker.moonraker import Moonraker
|
from components.moonraker.moonraker import Moonraker
|
||||||
from core.instance_manager.instance_manager import InstanceManager
|
from core.instance_manager.instance_manager import InstanceManager
|
||||||
from core.logger import DialogType, Logger
|
from core.logger import DialogType, Logger
|
||||||
|
from core.services.backup_service import BackupService
|
||||||
from extensions.base_extension import BaseExtension
|
from extensions.base_extension import BaseExtension
|
||||||
from extensions.octoeverywhere import (
|
from extensions.octoeverywhere import (
|
||||||
OE_DEPS_JSON_FILE,
|
OE_DEPS_JSON_FILE,
|
||||||
@@ -133,6 +134,7 @@ class OctoeverywhereExtension(BaseExtension):
|
|||||||
self._remove_oe_instances(ob_instances)
|
self._remove_oe_instances(ob_instances)
|
||||||
self._remove_oe_dir()
|
self._remove_oe_dir()
|
||||||
self._remove_oe_env()
|
self._remove_oe_env()
|
||||||
|
BackupService().backup_moonraker_conf()
|
||||||
remove_config_section(f"include {OE_SYS_CFG_NAME}", mr_instances)
|
remove_config_section(f"include {OE_SYS_CFG_NAME}", mr_instances)
|
||||||
run_remove_routines(OE_INSTALLER_LOG_FILE)
|
run_remove_routines(OE_INSTALLER_LOG_FILE)
|
||||||
Logger.print_dialog(
|
Logger.print_dialog(
|
||||||
|
|||||||
@@ -11,11 +11,12 @@ from typing import List
|
|||||||
from components.moonraker.moonraker import Moonraker
|
from components.moonraker.moonraker import Moonraker
|
||||||
from core.instance_manager.instance_manager import InstanceManager
|
from core.instance_manager.instance_manager import InstanceManager
|
||||||
from core.logger import DialogType, Logger
|
from core.logger import DialogType, Logger
|
||||||
|
from core.services.backup_service import BackupService
|
||||||
from core.submodules.simple_config_parser.src.simple_config_parser.simple_config_parser import (
|
from core.submodules.simple_config_parser.src.simple_config_parser.simple_config_parser import (
|
||||||
SimpleConfigParser,
|
SimpleConfigParser,
|
||||||
)
|
)
|
||||||
from extensions.base_extension import BaseExtension
|
from extensions.base_extension import BaseExtension
|
||||||
from utils.common import backup_printer_config_dir, moonraker_exists
|
from utils.common import moonraker_exists
|
||||||
from utils.input_utils import get_confirm
|
from utils.input_utils import get_confirm
|
||||||
|
|
||||||
|
|
||||||
@@ -112,10 +113,10 @@ class SimplyPrintExtension(BaseExtension):
|
|||||||
continue
|
continue
|
||||||
|
|
||||||
if is_install and not scp.has_section("simplyprint"):
|
if is_install and not scp.has_section("simplyprint"):
|
||||||
backup_printer_config_dir()
|
BackupService().backup_printer_config_dir()
|
||||||
scp.add_section(section)
|
scp.add_section(section)
|
||||||
elif not is_install and scp.has_section("simplyprint"):
|
elif not is_install and scp.has_section("simplyprint"):
|
||||||
backup_printer_config_dir()
|
BackupService().backup_printer_config_dir()
|
||||||
scp.remove_section(section)
|
scp.remove_section(section)
|
||||||
scp.write_file(moonraker.cfg_file)
|
scp.write_file(moonraker.cfg_file)
|
||||||
patched_files.append(moonraker.cfg_file)
|
patched_files.append(moonraker.cfg_file)
|
||||||
|
|||||||
@@ -100,6 +100,7 @@ class SpoolmanExtension(BaseExtension):
|
|||||||
mr_instances: List[Moonraker] = mrsvc.get_all_instances()
|
mr_instances: List[Moonraker] = mrsvc.get_all_instances()
|
||||||
|
|
||||||
Logger.print_status("Removing Spoolman configuration from moonraker.conf...")
|
Logger.print_status("Removing Spoolman configuration from moonraker.conf...")
|
||||||
|
BackupService().backup_moonraker_conf()
|
||||||
remove_config_section("spoolman", mr_instances)
|
remove_config_section("spoolman", mr_instances)
|
||||||
|
|
||||||
Logger.print_status("Removing Spoolman from moonraker.asvc...")
|
Logger.print_status("Removing Spoolman from moonraker.asvc...")
|
||||||
@@ -289,6 +290,7 @@ class SpoolmanExtension(BaseExtension):
|
|||||||
mrsvc.load_instances()
|
mrsvc.load_instances()
|
||||||
mr_instances = mrsvc.get_all_instances()
|
mr_instances = mrsvc.get_all_instances()
|
||||||
|
|
||||||
|
BackupService().backup_moonraker_conf()
|
||||||
# noinspection HttpUrlsUsage
|
# noinspection HttpUrlsUsage
|
||||||
add_config_section(
|
add_config_section(
|
||||||
section="spoolman",
|
section="spoolman",
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ from typing import List
|
|||||||
from components.moonraker.moonraker import Moonraker
|
from components.moonraker.moonraker import Moonraker
|
||||||
from core.instance_manager.instance_manager import InstanceManager
|
from core.instance_manager.instance_manager import InstanceManager
|
||||||
from core.logger import DialogType, Logger
|
from core.logger import DialogType, Logger
|
||||||
|
from core.services.backup_service import BackupService
|
||||||
from extensions.base_extension import BaseExtension
|
from extensions.base_extension import BaseExtension
|
||||||
from extensions.telegram_bot import TG_BOT_REPO, TG_BOT_REQ_FILE
|
from extensions.telegram_bot import TG_BOT_REPO, TG_BOT_REQ_FILE
|
||||||
from extensions.telegram_bot.moonraker_telegram_bot import (
|
from extensions.telegram_bot.moonraker_telegram_bot import (
|
||||||
@@ -105,6 +106,7 @@ class TelegramBotExtension(BaseExtension):
|
|||||||
cmd_sysctl_manage("daemon-reload")
|
cmd_sysctl_manage("daemon-reload")
|
||||||
|
|
||||||
# add to moonraker update manager
|
# add to moonraker update manager
|
||||||
|
BackupService().backup_moonraker_conf()
|
||||||
self._patch_bot_update_manager(mr_instances)
|
self._patch_bot_update_manager(mr_instances)
|
||||||
|
|
||||||
# restart moonraker
|
# restart moonraker
|
||||||
@@ -150,6 +152,7 @@ class TelegramBotExtension(BaseExtension):
|
|||||||
self._remove_bot_instances(tb_instances)
|
self._remove_bot_instances(tb_instances)
|
||||||
self._remove_bot_dir()
|
self._remove_bot_dir()
|
||||||
self._remove_bot_env()
|
self._remove_bot_env()
|
||||||
|
BackupService().backup_moonraker_conf()
|
||||||
remove_config_section("update_manager moonraker-telegram-bot", mr_instances)
|
remove_config_section("update_manager moonraker-telegram-bot", mr_instances)
|
||||||
self._delete_bot_logs(tb_instances)
|
self._delete_bot_logs(tb_instances)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
|||||||
@@ -14,13 +14,11 @@ from datetime import datetime
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Dict, List, Literal, Set
|
from typing import Dict, List, Literal, Set
|
||||||
|
|
||||||
from components.klipper.klipper import Klipper
|
|
||||||
from components.moonraker.moonraker import Moonraker
|
from components.moonraker.moonraker import Moonraker
|
||||||
from core.constants import (
|
from core.constants import (
|
||||||
GLOBAL_DEPS,
|
GLOBAL_DEPS,
|
||||||
)
|
)
|
||||||
from core.logger import DialogType, Logger
|
from core.logger import DialogType, Logger
|
||||||
from core.services.backup_service import BackupService
|
|
||||||
from core.types.color import Color
|
from core.types.color import Color
|
||||||
from core.types.component_status import ComponentStatus, StatusCode
|
from core.types.component_status import ComponentStatus, StatusCode
|
||||||
from utils.git_utils import (
|
from utils.git_utils import (
|
||||||
@@ -151,23 +149,6 @@ def get_install_status(
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def backup_printer_config_dir() -> None:
|
|
||||||
instances: List[Klipper] = get_instances(Klipper)
|
|
||||||
svc = BackupService()
|
|
||||||
|
|
||||||
if not instances:
|
|
||||||
Logger.print_info("Unable to find directory to backup!")
|
|
||||||
Logger.print_info("Are there no Klipper instances installed?")
|
|
||||||
return
|
|
||||||
|
|
||||||
for instance in instances:
|
|
||||||
svc.backup_directory(
|
|
||||||
source_path=instance.base.cfg_dir,
|
|
||||||
target_path=f"{instance.data_dir.name}",
|
|
||||||
backup_name="config",
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
def moonraker_exists(name: str = "") -> List[Moonraker]:
|
def moonraker_exists(name: str = "") -> List[Moonraker]:
|
||||||
"""
|
"""
|
||||||
Helper method to check if a Moonraker instance exists
|
Helper method to check if a Moonraker instance exists
|
||||||
|
|||||||
@@ -73,7 +73,7 @@ def add_config_section_at_top(section: str, instances: List[InstanceType]) -> No
|
|||||||
tmp.writelines(org_content)
|
tmp.writelines(org_content)
|
||||||
|
|
||||||
cfg_file.unlink()
|
cfg_file.unlink()
|
||||||
shutil.move(tmp_cfg_path, cfg_file)
|
shutil.move(tmp_cfg_path.as_posix(), cfg_file)
|
||||||
|
|
||||||
Logger.print_ok("OK!")
|
Logger.print_ok("OK!")
|
||||||
|
|
||||||
@@ -81,7 +81,7 @@ def add_config_section_at_top(section: str, instances: List[InstanceType]) -> No
|
|||||||
def remove_config_section(
|
def remove_config_section(
|
||||||
section: str, instances: List[InstanceType]
|
section: str, instances: List[InstanceType]
|
||||||
) -> List[InstanceType]:
|
) -> List[InstanceType]:
|
||||||
removed_from: List[instances] = []
|
removed_from: List[InstanceType] = []
|
||||||
for instance in instances:
|
for instance in instances:
|
||||||
cfg_file = instance.cfg_file
|
cfg_file = instance.cfg_file
|
||||||
Logger.print_status(f"Remove section '[{section}]' from '{cfg_file}' ...")
|
Logger.print_status(f"Remove section '[{section}]' from '{cfg_file}' ...")
|
||||||
|
|||||||
Reference in New Issue
Block a user