RestartManager.py 1.4 KB

123456789101112131415161718192021222324252627282930313233343536
  1. # Copyright (c) 2021 Ultimaker B.V.
  2. # Cura is released under the terms of the LGPLv3 or higher.
  3. from typing import Optional, TYPE_CHECKING
  4. from PyQt5.QtCore import pyqtProperty, pyqtSignal, QObject
  5. from cura.CuraApplication import CuraApplication
  6. if TYPE_CHECKING:
  7. from UM.PluginRegistry import PluginRegistry
  8. from cura.CuraPackageManager import CuraPackageManager
  9. class RestartManager(QObject):
  10. def __init__(self, parent: Optional[QObject] = None) -> None:
  11. super().__init__(parent = parent)
  12. self._manager: "CuraPackageManager" = CuraApplication.getInstance().getPackageManager()
  13. self._plugin_registry: "PluginRegistry" = CuraApplication.getInstance().getPluginRegistry()
  14. self._manager.installedPackagesChanged.connect(self.checkIfRestartNeeded)
  15. self._plugin_registry.hasPluginsEnabledOrDisabledChanged.connect(self.checkIfRestartNeeded)
  16. self._restart_needed = False
  17. def checkIfRestartNeeded(self) -> None:
  18. if self._manager.hasPackagesToRemoveOrInstall or len(self._plugin_registry.getCurrentSessionActivationChangedPlugins()) > 0:
  19. self._restart_needed = True
  20. else:
  21. self._restart_needed = False
  22. self.showRestartNotificationChanged.emit()
  23. showRestartNotificationChanged = pyqtSignal()
  24. @pyqtProperty(bool, notify = showRestartNotificationChanged)
  25. def showRestartNotification(self) -> bool:
  26. return self._restart_needed