From 03c0d46a2ea8a3e63a80bc4331e2707996617914 Mon Sep 17 00:00:00 2001 From: dw-0 Date: Tue, 30 Sep 2025 20:54:50 +0200 Subject: [PATCH] feat(backup): add fallback to search printer data directories in home directory if no instances found --- kiauh/components/moonraker/utils/utils.py | 28 +++++++++++++++++++++-- kiauh/utils/common.py | 28 +++++++++++++++++++++-- 2 files changed, 52 insertions(+), 4 deletions(-) diff --git a/kiauh/components/moonraker/utils/utils.py b/kiauh/components/moonraker/utils/utils.py index 8aa36f7..e01cf88 100644 --- a/kiauh/components/moonraker/utils/utils.py +++ b/kiauh/components/moonraker/utils/utils.py @@ -182,8 +182,32 @@ def backup_moonraker_db_dir() -> None: svc = BackupService() if not instances: - Logger.print_info("Unable to find directory to backup!") - Logger.print_info("Are there no Moonraker instances installed?") + # fallback: search for printer data directories in the user's home directory + 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 for instance in instances: diff --git a/kiauh/utils/common.py b/kiauh/utils/common.py index 48c3591..c08e4c7 100644 --- a/kiauh/utils/common.py +++ b/kiauh/utils/common.py @@ -156,8 +156,32 @@ def backup_printer_config_dir() -> None: svc = BackupService() if not instances: - Logger.print_info("Unable to find directory to backup!") - Logger.print_info("Are there no Klipper instances installed?") + # 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: + svc.backup_directory( + source_path=data_dir.joinpath("config"), + target_path=data_dir.name, + backup_name="config", + ) + return for instance in instances: