diff --git a/CHANGELOG.md b/CHANGELOG.md index f1bba2cd..c4a47f56 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ TBD - Temp fix for `&` issue in pathing and minecraft colour codes ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/457)) ### Tweaks - Add button to scroll to bottom of vterm ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/454)) +- Persist schedules and execution commands across backup restores ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/458)) ### Lang TBD

diff --git a/app/classes/web/ajax_handler.py b/app/classes/web/ajax_handler.py index bd8f9424..845b2886 100644 --- a/app/classes/web/ajax_handler.py +++ b/app/classes/web/ajax_handler.py @@ -383,6 +383,8 @@ class AjaxHandler(BaseHandler): zip_name = bleach.clean(self.get_argument("zip_file", None)) svr_obj = self.controller.servers.get_server_obj(server_id) server_data = self.controller.servers.get_server_data_by_id(server_id) + + # import the server again based on zipfile if server_data["type"] == "minecraft-java": backup_path = svr_obj.backup_path if Helpers.validate_traversal(backup_path, zip_name): @@ -401,6 +403,27 @@ class AjaxHandler(BaseHandler): self.controller.rename_backup_dir( server_id, new_server_id, new_server["server_uuid"] ) + # preserve current schedules + for schedule in self.controller.management.get_schedules_by_server( + server_id + ): + self.controller.management.create_scheduled_task( + new_server_id, + schedule.action, + schedule.interval, + schedule.interval_type, + schedule.start_time, + schedule.command, + schedule.name, + schedule.enabled, + ) + # preserve execution command + new_server_obj = self.controller.servers.get_server_obj( + new_server_id + ) + new_server_obj.execution_command = server_data["execution_command"] + self.controller.servers.update_server(new_server_obj) + # remove old server's tasks try: self.tasks_manager.remove_all_server_tasks(server_id) except: @@ -424,6 +447,26 @@ class AjaxHandler(BaseHandler): self.controller.rename_backup_dir( server_id, new_server_id, new_server["server_uuid"] ) + # preserve current schedules + for schedule in self.controller.management.get_schedules_by_server( + server_id + ): + self.controller.management.create_scheduled_task( + new_server_id, + schedule.action, + schedule.interval, + schedule.interval_type, + schedule.start_time, + schedule.command, + schedule.name, + schedule.enabled, + ) + # preserve execution command + new_server_obj = self.controller.servers.get_server_obj( + new_server_id + ) + new_server_obj.execution_command = server_data["execution_command"] + self.controller.servers.update_server(new_server_obj) try: self.tasks_manager.remove_all_server_tasks(server_id) except: