diff --git a/plugins/AutoSave/AutoSave.py b/plugins/AutoSave/AutoSave.py index b6251addcd..79d91e75b2 100644 --- a/plugins/AutoSave/AutoSave.py +++ b/plugins/AutoSave/AutoSave.py @@ -13,17 +13,17 @@ class AutoSave(Extension): def __init__(self): super().__init__() - Preferences.getInstance().preferenceChanged.connect(self._onPreferenceChanged) + #Preferences.getInstance().preferenceChanged.connect(self._onPreferenceChanged) + Preferences.getInstance().preferenceChanged.connect(self._triggerTimer) machine_manager = Application.getInstance().getMachineManager() self._profile = None machine_manager.activeProfileChanged.connect(self._onActiveProfileChanged) - machine_manager.profileNameChanged.connect(self._onProfileNameChanged) - machine_manager.profilesChanged.connect(self._onProfilesChanged) - machine_manager.machineInstanceNameChanged.connect(self._onInstanceNameChanged) - machine_manager.machineInstancesChanged.connect(self._onInstancesChanged) - Application + machine_manager.profileNameChanged.connect(self._triggerTimer) + machine_manager.profilesChanged.connect(self._triggerTimer) + machine_manager.machineInstanceNameChanged.connect(self._triggerTimer) + machine_manager.machineInstancesChanged.connect(self._triggerTimer) self._onActiveProfileChanged() Preferences.getInstance().addPreference("cura/autosave_delay", 1000 * 10) @@ -33,53 +33,27 @@ class AutoSave(Extension): self._change_timer.setSingleShot(True) self._change_timer.timeout.connect(self._onTimeout) - self._save_preferences = False - self._save_profiles = False - self._save_instances = False + self._saving = False - def _onPreferenceChanged(self, preference): - self._save_preferences = True - self._change_timer.start() - - def _onSettingValueChanged(self, setting): - self._save_profiles = True - self._change_timer.start() + def _triggerTimer(self, *args): + if not self._saving: + self._change_timer.start() def _onActiveProfileChanged(self): if self._profile: - self._profile.settingValueChanged.disconnect(self._onSettingValueChanged) + self._profile.settingValueChanged.disconnect(self._triggerTimer) self._profile = Application.getInstance().getMachineManager().getWorkingProfile() if self._profile: - self._profile.settingValueChanged.connect(self._onSettingValueChanged) - - def _onProfileNameChanged(self, name): - self._onProfilesChanged() - - def _onProfilesChanged(self): - self._save_profiles = True - self._change_timer.start() - - def _onInstanceNameChanged(self, name): - self._onInstancesChanged() - - def _onInstancesChanged(self): - self._save_instances = True - self._change_timer.start() + self._profile.settingValueChanged.connect(self._triggerTimer) def _onTimeout(self): + self._saving = True # To prevent the save process from triggering another autosave. Logger.log("d", "Autosaving preferences, instances and profiles") - if self._save_preferences: - Preferences.getInstance().writeToFile(Resources.getStoragePath(Resources.Preferences, Application.getInstance().getApplicationName() + ".cfg")) + Preferences.getInstance().writeToFile(Resources.getStoragePath(Resources.Preferences, Application.getInstance().getApplicationName() + ".cfg")) + Application.getInstance().getMachineManager().saveMachineInstances() + Application.getInstance().getMachineManager().saveProfiles() - if self._save_instances: - Application.getInstance().getMachineManager().saveMachineInstances() - - if self._save_profiles: - Application.getInstance().getMachineManager().saveProfiles() - - self._save_preferences = False - self._save_instances = False - self._save_profiles = False + self._saving = False