From 013e0b51e9b7266a4f570fdb9776b0093f4dc53d Mon Sep 17 00:00:00 2001 From: Jelle Spijker Date: Tue, 7 Dec 2021 15:56:35 +0100 Subject: [PATCH] Storing multiple ongoing_requests A bit of defensive programming Contributes to: CURA-8587 --- plugins/Marketplace/LocalPackageList.py | 4 +++- plugins/Marketplace/PackageList.py | 8 ++++---- plugins/Marketplace/RemotePackageList.py | 7 ++++--- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/plugins/Marketplace/LocalPackageList.py b/plugins/Marketplace/LocalPackageList.py index 196f3f19c6..ebda51b4fe 100644 --- a/plugins/Marketplace/LocalPackageList.py +++ b/plugins/Marketplace/LocalPackageList.py @@ -38,6 +38,7 @@ class LocalPackageList(PackageList): def __init__(self, parent: Optional["QObject"] = None) -> None: super().__init__(parent) self._has_footer = False + self._ongoing_requests["check_updates"] = None @pyqtSlot() def updatePackages(self) -> None: @@ -74,7 +75,7 @@ class LocalPackageList(PackageList): installed_packages = "installed_packages=".join([f"{package['package_id']}:{package['package_version']}&" for package in packages]) request_url = f"{PACKAGE_UPDATES_URL}?installed_packages={installed_packages[:-1]}" - self._ongoing_request = HttpRequestManager.getInstance().get( + self._ongoing_requests["check_updates"] = HttpRequestManager.getInstance().get( request_url, scope = self._scope, callback = self._parseResponse @@ -100,3 +101,4 @@ class LocalPackageList(PackageList): package.can_update = True self.sort(attrgetter("sectionTitle", "can_update", "displayName"), key = "package", reverse = True) + self._ongoing_requests["check_updates"] = None diff --git a/plugins/Marketplace/PackageList.py b/plugins/Marketplace/PackageList.py index 62e54e783c..a2c67dc1ef 100644 --- a/plugins/Marketplace/PackageList.py +++ b/plugins/Marketplace/PackageList.py @@ -5,7 +5,7 @@ import json import os.path from PyQt5.QtCore import pyqtProperty, pyqtSignal, pyqtSlot, Qt -from typing import cast, Dict, Optional, Set, TYPE_CHECKING +from typing import cast, Dict, List, Optional, Set, TYPE_CHECKING from UM.i18n import i18nCatalog from UM.Qt.ListModel import ListModel @@ -49,7 +49,7 @@ class PackageList(ListModel): self.canInstallChanged.connect(self._requestInstall) self._local_packages: Set[str] = {p["package_id"] for p in self._manager.local_packages} - self._ongoing_request: Optional[HttpRequestData] = None + self._ongoing_requests: Dict[str, Optional[HttpRequestData]] = {"download_package": None} self._scope = JsonDecoratorScope(UltimakerCloudScope(CuraApplication.getInstance())) self._license_dialogs: Dict[str, QObject] = {} @@ -197,7 +197,7 @@ class PackageList(ListModel): def downloadError(reply: "QNetworkReply", error: "QNetworkReply.NetworkError") -> None: self._downloadError(package_id, update, reply, error) - HttpRequestManager.getInstance().get( + self._ongoing_requests["download_package"] = HttpRequestManager.getInstance().get( url, scope = self._scope, callback = downloadFinished, @@ -211,8 +211,8 @@ class PackageList(ListModel): while bytes_read: temp_file.write(bytes_read) bytes_read = reply.read(self.DISK_WRITE_BUFFER_SIZE) - Logger.debug(f"Finished downloading {package_id} and stored it as {temp_file.name}") self._to_install[package_id] = temp_file.name + self._ongoing_requests["download_package"] = None self.canInstallChanged.emit(package_id, update) except IOError as e: Logger.error(f"Failed to write downloaded package to temp file {e}") diff --git a/plugins/Marketplace/RemotePackageList.py b/plugins/Marketplace/RemotePackageList.py index 88e1c28045..13f3d33d93 100644 --- a/plugins/Marketplace/RemotePackageList.py +++ b/plugins/Marketplace/RemotePackageList.py @@ -29,6 +29,7 @@ class RemotePackageList(PackageList): self._requested_search_string = "" self._current_search_string = "" self._request_url = self._initialRequestUrl() + self._ongoing_requests["get_packages"] = None self.isLoadingChanged.connect(self._onLoadingChanged) self.isLoadingChanged.emit() @@ -49,7 +50,7 @@ class RemotePackageList(PackageList): self.setErrorMessage("") # Clear any previous errors. self.setIsLoading(True) - self._ongoing_request = HttpRequestManager.getInstance().get( + self._ongoing_requests["get_packages"] = HttpRequestManager.getInstance().get( self._request_url, scope = self._scope, callback = self._parseResponse, @@ -58,8 +59,8 @@ class RemotePackageList(PackageList): @pyqtSlot() def abortUpdating(self) -> None: - HttpRequestManager.getInstance().abortRequest(self._ongoing_request) - self._ongoing_request = None + HttpRequestManager.getInstance().abortRequest(self._ongoing_requests["get_packages"]) + self._ongoing_requests["get_packages"] = None def reset(self) -> None: self.clear()