mirror of
https://git.mirrors.martin98.com/https://github.com/Ultimaker/Cura
synced 2025-04-23 06:09:38 +08:00
52 lines
2.1 KiB
Python
52 lines
2.1 KiB
Python
# Copyright (c) 2018 Ultimaker B.V.
|
|
# Cura is released under the terms of the LGPLv3 or higher.
|
|
from typing import Optional
|
|
|
|
from UM.Logger import Logger
|
|
from cura.Backups.Backup import Backup
|
|
|
|
|
|
class BackupsManager:
|
|
"""
|
|
The BackupsManager is responsible for managing the creating and restoring of backups.
|
|
Backups themselves are represented in a different class.
|
|
"""
|
|
|
|
def createBackup(self) -> (Optional[bytes], Optional[dict]):
|
|
"""
|
|
Get a backup of the current configuration.
|
|
:return: A Tuple containing a ZipFile (the actual backup) and a dict containing some meta data (like version).
|
|
"""
|
|
self._disableAutoSave()
|
|
backup = Backup()
|
|
backup.makeFromCurrent()
|
|
self._enableAutoSave()
|
|
# We don't return a Backup here because we want plugins only to interact with our API and not full objects.
|
|
return backup.zip_file, backup.meta_data
|
|
|
|
def restoreBackup(self, zip_file: bytes, meta_data: dict) -> None:
|
|
"""
|
|
Restore a backup from a given ZipFile.
|
|
:param zip_file: A ZipFile containing the actual backup.
|
|
:param meta_data: A dict containing some meta data that is needed to restore the backup correctly.
|
|
"""
|
|
if not meta_data.get("cura_release", None):
|
|
# If there is no "cura_release" specified in the meta data, we don't execute a backup restore.
|
|
Logger.log("w", "Tried to restore a backup without specifying a Cura version number.")
|
|
return
|
|
|
|
# TODO: first make a new backup to prevent data loss when restoring fails.
|
|
|
|
self._disableAutoSave()
|
|
|
|
backup = Backup(zip_file = zip_file, meta_data = meta_data)
|
|
backup.restore() # At this point, Cura will need to restart for the changes to take effect
|
|
|
|
def _disableAutoSave(self):
|
|
"""Here we try to disable the auto-save plugin as it might interfere with restoring a backup."""
|
|
# TODO: Disable auto-save if possible.
|
|
|
|
def _enableAutoSave(self):
|
|
"""Re-enable auto-save after we're done."""
|
|
# TODO: Enable auto-save if possible.
|