diff --git a/plugins/AutoSave/AutoSave.py b/cura/AutoSave.py similarity index 56% rename from plugins/AutoSave/AutoSave.py rename to cura/AutoSave.py index 792e41ffd0..71e889a62b 100644 --- a/plugins/AutoSave/AutoSave.py +++ b/cura/AutoSave.py @@ -3,17 +3,13 @@ from PyQt5.QtCore import QTimer -from UM.Extension import Extension from UM.Preferences import Preferences -from UM.Application import Application -from UM.Resources import Resources from UM.Logger import Logger -class AutoSave(Extension): - def __init__(self): - super().__init__() - +class AutoSave: + def __init__(self, application): + self._application = application Preferences.getInstance().preferenceChanged.connect(self._triggerTimer) self._global_stack = None @@ -26,29 +22,11 @@ class AutoSave(Extension): self._saving = False - # At this point, the Application instance has not finished its constructor call yet, so directly using something - # like Application.getInstance() is not correct. The initialisation now will only gets triggered after the - # application finishes its start up successfully. - self._init_timer = QTimer() - self._init_timer.setInterval(1000) - self._init_timer.setSingleShot(True) - self._init_timer.timeout.connect(self.initialize) - self._init_timer.start() - def initialize(self): # only initialise if the application is created and has started - from cura.CuraApplication import CuraApplication - if not CuraApplication.Created: - self._init_timer.start() - return - if not CuraApplication.getInstance().started: - self._init_timer.start() - return - self._change_timer.timeout.connect(self._onTimeout) - Application.getInstance().globalContainerStackChanged.connect(self._onGlobalStackChanged) + self._application.globalContainerStackChanged.connect(self._onGlobalStackChanged) self._onGlobalStackChanged() - self._triggerTimer() def _triggerTimer(self, *args): @@ -60,7 +38,7 @@ class AutoSave(Extension): self._global_stack.propertyChanged.disconnect(self._triggerTimer) self._global_stack.containersChanged.disconnect(self._triggerTimer) - self._global_stack = Application.getInstance().getGlobalContainerStack() + self._global_stack = self._application.getGlobalContainerStack() if self._global_stack: self._global_stack.propertyChanged.connect(self._triggerTimer) @@ -70,6 +48,6 @@ class AutoSave(Extension): self._saving = True # To prevent the save process from triggering another autosave. Logger.log("d", "Autosaving preferences, instances and profiles") - Application.getInstance().saveSettings() + self._application.saveSettings() self._saving = False diff --git a/cura/Backups/BackupsManager.py b/cura/Backups/BackupsManager.py index 04955692ee..38ffcac92b 100644 --- a/cura/Backups/BackupsManager.py +++ b/cura/Backups/BackupsManager.py @@ -48,7 +48,9 @@ class BackupsManager: 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. + CuraApplication.getInstance().setSaveDataEnabled(False) def _enableAutoSave(self): """Re-enable auto-save after we're done.""" # TODO: Enable auto-save if possible. + CuraApplication.getInstance().setSaveDataEnabled(True) diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py index d1c7950884..5b191c9180 100755 --- a/cura/CuraApplication.py +++ b/cura/CuraApplication.py @@ -74,6 +74,7 @@ from cura.Settings.SimpleModeSettingsManager import SimpleModeSettingsManager from cura.Machines.VariantManager import VariantManager +from .AutoSave import AutoSave from . import PlatformPhysics from . import BuildVolume from . import CameraAnimation @@ -234,6 +235,8 @@ class CuraApplication(QtApplication): self._simple_mode_settings_manager = None self._cura_scene_controller = None self._machine_error_checker = None + self._auto_save = None + self._save_data_enabled = True self._additional_components = {} # Components to add to certain areas in the interface @@ -496,11 +499,14 @@ class CuraApplication(QtApplication): showPrintMonitor = pyqtSignal(bool, arguments = ["show"]) + def setSaveDataEnabled(self, enabled: bool) -> None: + self._save_data_enabled = enabled + ## Cura has multiple locations where instance containers need to be saved, so we need to handle this differently. # # Note that the AutoSave plugin also calls this method. - def saveSettings(self, safe_data: bool = True): - if not self.started or not safe_data: + def saveSettings(self): + if not self.started or not self._save_data_enabled: # Do not do saving during application start or when data should not be safed on quit. return ContainerRegistry.getInstance().saveDirtyContainers() @@ -728,6 +734,9 @@ class CuraApplication(QtApplication): self._post_start_timer.timeout.connect(self._onPostStart) self._post_start_timer.start() + self._auto_save = AutoSave(self) + self._auto_save.initialize() + self.exec_() def _onPostStart(self): @@ -879,6 +888,9 @@ class CuraApplication(QtApplication): return super().event(event) + def getAutoSave(self): + return self._auto_save + ## Get print information (duration / material used) def getPrintInformation(self): return self._print_information diff --git a/plugins/AutoSave/__init__.py b/plugins/AutoSave/__init__.py deleted file mode 100644 index d7ee0736a2..0000000000 --- a/plugins/AutoSave/__init__.py +++ /dev/null @@ -1,13 +0,0 @@ -# Copyright (c) 2016 Ultimaker B.V. -# Cura is released under the terms of the LGPLv3 or higher. - -from . import AutoSave - -from UM.i18n import i18nCatalog -catalog = i18nCatalog("cura") - -def getMetaData(): - return {} - -def register(app): - return { "extension": AutoSave.AutoSave() } diff --git a/plugins/AutoSave/plugin.json b/plugins/AutoSave/plugin.json deleted file mode 100644 index 32e07a1062..0000000000 --- a/plugins/AutoSave/plugin.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "name": "Auto Save", - "author": "Ultimaker B.V.", - "version": "1.0.0", - "description": "Automatically saves Preferences, Machines and Profiles after changes.", - "api": 4, - "i18n-catalog": "cura" -}