Make sure Signal are disconnected when PackageModel is deleted

Contributes to CURA-8587
This commit is contained in:
Jelle Spijker 2021-12-16 17:00:29 +01:00
parent 23d6c2390f
commit ffa34ab5fe
No known key found for this signature in database
GPG key ID: 6662DC033BE6B99A
2 changed files with 10 additions and 1 deletions

View file

@ -55,6 +55,8 @@ class PackageList(ListModel):
def __del__(self) -> None: def __del__(self) -> None:
""" When this object is deleted it will loop through all registered API requests and aborts them """ """ When this object is deleted it will loop through all registered API requests and aborts them """
self.cleanUpAPIRequest() self.cleanUpAPIRequest()
self.isLoadingChanged.disconnect()
self.hasMoreChanged.disconnect()
def abortRequest(self, request_id: str) -> None: def abortRequest(self, request_id: str) -> None:
"""Aborts a single request""" """Aborts a single request"""

View file

@ -79,10 +79,17 @@ class PackageModel(QObject):
self._package_manager.packageInstalled.connect(lambda pkg_id: self._packageInstalled(pkg_id)) self._package_manager.packageInstalled.connect(lambda pkg_id: self._packageInstalled(pkg_id))
self._package_manager.packageUninstalled.connect(lambda pkg_id: self._packageInstalled(pkg_id)) self._package_manager.packageUninstalled.connect(lambda pkg_id: self._packageInstalled(pkg_id))
self._package_manager.packageInstallingFailed.connect(lambda pkg_id: self._packageInstalled(pkg_id)) self._package_manager.packageInstallingFailed.connect(lambda pkg_id: self._packageInstalled(pkg_id))
self._package_manager.packagesWithUpdateChanged.connect(lambda: self.setCanUpdate(self._package_id in self._package_manager.packagesWithUpdate)) self._package_manager.packagesWithUpdateChanged.connect(self._processUpdatedPackages)
self._is_busy = False self._is_busy = False
@pyqtSlot()
def _processUpdatedPackages(self):
self.setCanUpdate(self._package_id in self._package_manager.packagesWithUpdate)
def __del__(self):
self._package_manager.packagesWithUpdateChanged.disconnect(self._processUpdatedPackages)
def __eq__(self, other: object) -> bool: def __eq__(self, other: object) -> bool:
if isinstance(other, PackageModel): if isinstance(other, PackageModel):
return other == self return other == self