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: