mirror of
https://git.mirrors.martin98.com/https://github.com/Ultimaker/Cura
synced 2025-04-22 21:59:37 +08:00
Storing multiple ongoing_requests
A bit of defensive programming Contributes to: CURA-8587
This commit is contained in:
parent
dae92c354c
commit
013e0b51e9
@ -38,6 +38,7 @@ class LocalPackageList(PackageList):
|
|||||||
def __init__(self, parent: Optional["QObject"] = None) -> None:
|
def __init__(self, parent: Optional["QObject"] = None) -> None:
|
||||||
super().__init__(parent)
|
super().__init__(parent)
|
||||||
self._has_footer = False
|
self._has_footer = False
|
||||||
|
self._ongoing_requests["check_updates"] = None
|
||||||
|
|
||||||
@pyqtSlot()
|
@pyqtSlot()
|
||||||
def updatePackages(self) -> None:
|
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])
|
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]}"
|
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,
|
request_url,
|
||||||
scope = self._scope,
|
scope = self._scope,
|
||||||
callback = self._parseResponse
|
callback = self._parseResponse
|
||||||
@ -100,3 +101,4 @@ class LocalPackageList(PackageList):
|
|||||||
package.can_update = True
|
package.can_update = True
|
||||||
|
|
||||||
self.sort(attrgetter("sectionTitle", "can_update", "displayName"), key = "package", reverse = True)
|
self.sort(attrgetter("sectionTitle", "can_update", "displayName"), key = "package", reverse = True)
|
||||||
|
self._ongoing_requests["check_updates"] = None
|
||||||
|
@ -5,7 +5,7 @@ import json
|
|||||||
import os.path
|
import os.path
|
||||||
|
|
||||||
from PyQt5.QtCore import pyqtProperty, pyqtSignal, pyqtSlot, Qt
|
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.i18n import i18nCatalog
|
||||||
from UM.Qt.ListModel import ListModel
|
from UM.Qt.ListModel import ListModel
|
||||||
@ -49,7 +49,7 @@ class PackageList(ListModel):
|
|||||||
self.canInstallChanged.connect(self._requestInstall)
|
self.canInstallChanged.connect(self._requestInstall)
|
||||||
self._local_packages: Set[str] = {p["package_id"] for p in self._manager.local_packages}
|
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._scope = JsonDecoratorScope(UltimakerCloudScope(CuraApplication.getInstance()))
|
||||||
self._license_dialogs: Dict[str, QObject] = {}
|
self._license_dialogs: Dict[str, QObject] = {}
|
||||||
|
|
||||||
@ -197,7 +197,7 @@ class PackageList(ListModel):
|
|||||||
def downloadError(reply: "QNetworkReply", error: "QNetworkReply.NetworkError") -> None:
|
def downloadError(reply: "QNetworkReply", error: "QNetworkReply.NetworkError") -> None:
|
||||||
self._downloadError(package_id, update, reply, error)
|
self._downloadError(package_id, update, reply, error)
|
||||||
|
|
||||||
HttpRequestManager.getInstance().get(
|
self._ongoing_requests["download_package"] = HttpRequestManager.getInstance().get(
|
||||||
url,
|
url,
|
||||||
scope = self._scope,
|
scope = self._scope,
|
||||||
callback = downloadFinished,
|
callback = downloadFinished,
|
||||||
@ -211,8 +211,8 @@ class PackageList(ListModel):
|
|||||||
while bytes_read:
|
while bytes_read:
|
||||||
temp_file.write(bytes_read)
|
temp_file.write(bytes_read)
|
||||||
bytes_read = reply.read(self.DISK_WRITE_BUFFER_SIZE)
|
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._to_install[package_id] = temp_file.name
|
||||||
|
self._ongoing_requests["download_package"] = None
|
||||||
self.canInstallChanged.emit(package_id, update)
|
self.canInstallChanged.emit(package_id, update)
|
||||||
except IOError as e:
|
except IOError as e:
|
||||||
Logger.error(f"Failed to write downloaded package to temp file {e}")
|
Logger.error(f"Failed to write downloaded package to temp file {e}")
|
||||||
|
@ -29,6 +29,7 @@ class RemotePackageList(PackageList):
|
|||||||
self._requested_search_string = ""
|
self._requested_search_string = ""
|
||||||
self._current_search_string = ""
|
self._current_search_string = ""
|
||||||
self._request_url = self._initialRequestUrl()
|
self._request_url = self._initialRequestUrl()
|
||||||
|
self._ongoing_requests["get_packages"] = None
|
||||||
self.isLoadingChanged.connect(self._onLoadingChanged)
|
self.isLoadingChanged.connect(self._onLoadingChanged)
|
||||||
self.isLoadingChanged.emit()
|
self.isLoadingChanged.emit()
|
||||||
|
|
||||||
@ -49,7 +50,7 @@ class RemotePackageList(PackageList):
|
|||||||
self.setErrorMessage("") # Clear any previous errors.
|
self.setErrorMessage("") # Clear any previous errors.
|
||||||
self.setIsLoading(True)
|
self.setIsLoading(True)
|
||||||
|
|
||||||
self._ongoing_request = HttpRequestManager.getInstance().get(
|
self._ongoing_requests["get_packages"] = HttpRequestManager.getInstance().get(
|
||||||
self._request_url,
|
self._request_url,
|
||||||
scope = self._scope,
|
scope = self._scope,
|
||||||
callback = self._parseResponse,
|
callback = self._parseResponse,
|
||||||
@ -58,8 +59,8 @@ class RemotePackageList(PackageList):
|
|||||||
|
|
||||||
@pyqtSlot()
|
@pyqtSlot()
|
||||||
def abortUpdating(self) -> None:
|
def abortUpdating(self) -> None:
|
||||||
HttpRequestManager.getInstance().abortRequest(self._ongoing_request)
|
HttpRequestManager.getInstance().abortRequest(self._ongoing_requests["get_packages"])
|
||||||
self._ongoing_request = None
|
self._ongoing_requests["get_packages"] = None
|
||||||
|
|
||||||
def reset(self) -> None:
|
def reset(self) -> None:
|
||||||
self.clear()
|
self.clear()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user