mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-08 07:27:29 -06:00
Introduce new API call for fetching package updates
This commit is contained in:
parent
05b1ce9658
commit
b919be48bc
1 changed files with 28 additions and 13 deletions
|
@ -48,7 +48,7 @@ class Toolbox(QObject, Extension):
|
||||||
self._download_progress = 0 # type: float
|
self._download_progress = 0 # type: float
|
||||||
self._is_downloading = False # type: bool
|
self._is_downloading = False # type: bool
|
||||||
self._network_manager = None # type: Optional[QNetworkAccessManager]
|
self._network_manager = None # type: Optional[QNetworkAccessManager]
|
||||||
self._request_headers = [] # type: List[Tuple[bytes, bytes]]
|
self._request_headers = [] # type: List[Tuple[bytes, bytes]]
|
||||||
self._updateRequestHeader()
|
self._updateRequestHeader()
|
||||||
|
|
||||||
self._request_urls = {} # type: Dict[str, QUrl]
|
self._request_urls = {} # type: Dict[str, QUrl]
|
||||||
|
@ -59,13 +59,15 @@ class Toolbox(QObject, Extension):
|
||||||
# The responses as given by the server parsed to a list.
|
# The responses as given by the server parsed to a list.
|
||||||
self._server_response_data = {
|
self._server_response_data = {
|
||||||
"authors": [],
|
"authors": [],
|
||||||
"packages": []
|
"packages": [],
|
||||||
|
"updates": [],
|
||||||
} # type: Dict[str, List[Any]]
|
} # type: Dict[str, List[Any]]
|
||||||
|
|
||||||
# Models:
|
# Models:
|
||||||
self._models = {
|
self._models = {
|
||||||
"authors": AuthorsModel(self),
|
"authors": AuthorsModel(self),
|
||||||
"packages": PackagesModel(self),
|
"packages": PackagesModel(self),
|
||||||
|
"updates": PackagesModel(self),
|
||||||
} # type: Dict[str, Union[AuthorsModel, PackagesModel]]
|
} # type: Dict[str, Union[AuthorsModel, PackagesModel]]
|
||||||
|
|
||||||
self._plugins_showcase_model = PackagesModel(self)
|
self._plugins_showcase_model = PackagesModel(self)
|
||||||
|
@ -186,18 +188,22 @@ class Toolbox(QObject, Extension):
|
||||||
cloud_api_version = self._cloud_api_version,
|
cloud_api_version = self._cloud_api_version,
|
||||||
sdk_version = self._sdk_version
|
sdk_version = self._sdk_version
|
||||||
)
|
)
|
||||||
|
|
||||||
|
installed_package_ids_with_versions = [":".join(items) for items in
|
||||||
|
self._package_manager.getAllInstalledPackageIdsAndVersions()]
|
||||||
|
installed_packages_query = ",".join(installed_package_ids_with_versions)
|
||||||
self._request_urls = {
|
self._request_urls = {
|
||||||
"authors": QUrl("{base_url}/authors".format(base_url = self._api_url)),
|
"authors": QUrl("{base_url}/authors".format(base_url = self._api_url)),
|
||||||
"packages": QUrl("{base_url}/packages".format(base_url = self._api_url))
|
"packages": QUrl("{base_url}/packages".format(base_url = self._api_url)),
|
||||||
|
"updates": QUrl("{base_url}/packages/package-updates?installed_packages={query}".format(
|
||||||
|
base_url = self._api_url, query = installed_packages_query))
|
||||||
}
|
}
|
||||||
|
|
||||||
# Request the latest and greatest!
|
# On boot we check which packages have updates.
|
||||||
self._fetchPackageData()
|
if len(installed_package_ids_with_versions) > 0:
|
||||||
|
self._fetchPackageUpdates()
|
||||||
|
|
||||||
def _fetchPackageData(self):
|
def _prepareNetworkManager(self):
|
||||||
# Create the network manager:
|
|
||||||
# This was formerly its own function but really had no reason to be as
|
|
||||||
# it was never called more than once ever.
|
|
||||||
if self._network_manager is not None:
|
if self._network_manager is not None:
|
||||||
self._network_manager.finished.disconnect(self._onRequestFinished)
|
self._network_manager.finished.disconnect(self._onRequestFinished)
|
||||||
self._network_manager.networkAccessibleChanged.disconnect(self._onNetworkAccessibleChanged)
|
self._network_manager.networkAccessibleChanged.disconnect(self._onNetworkAccessibleChanged)
|
||||||
|
@ -205,10 +211,15 @@ class Toolbox(QObject, Extension):
|
||||||
self._network_manager.finished.connect(self._onRequestFinished)
|
self._network_manager.finished.connect(self._onRequestFinished)
|
||||||
self._network_manager.networkAccessibleChanged.connect(self._onNetworkAccessibleChanged)
|
self._network_manager.networkAccessibleChanged.connect(self._onNetworkAccessibleChanged)
|
||||||
|
|
||||||
|
def _fetchPackageUpdates(self):
|
||||||
|
self._prepareNetworkManager()
|
||||||
|
self._makeRequestByType("updates")
|
||||||
|
|
||||||
|
def _fetchPackageData(self):
|
||||||
|
self._prepareNetworkManager()
|
||||||
# Make remote requests:
|
# Make remote requests:
|
||||||
self._makeRequestByType("packages")
|
self._makeRequestByType("packages")
|
||||||
self._makeRequestByType("authors")
|
self._makeRequestByType("authors")
|
||||||
|
|
||||||
# Gather installed packages:
|
# Gather installed packages:
|
||||||
self._updateInstalledModels()
|
self._updateInstalledModels()
|
||||||
|
|
||||||
|
@ -234,7 +245,7 @@ class Toolbox(QObject, Extension):
|
||||||
if not plugin_path:
|
if not plugin_path:
|
||||||
return None
|
return None
|
||||||
path = os.path.join(plugin_path, "resources", "qml", qml_name)
|
path = os.path.join(plugin_path, "resources", "qml", qml_name)
|
||||||
|
|
||||||
dialog = self._application.createQmlComponent(path, {"toolbox": self})
|
dialog = self._application.createQmlComponent(path, {"toolbox": self})
|
||||||
if not dialog:
|
if not dialog:
|
||||||
raise Exception("Failed to create Marketplace dialog")
|
raise Exception("Failed to create Marketplace dialog")
|
||||||
|
@ -618,7 +629,7 @@ class Toolbox(QObject, Extension):
|
||||||
if not self._models[response_type]:
|
if not self._models[response_type]:
|
||||||
Logger.log("e", "Could not find the %s model.", response_type)
|
Logger.log("e", "Could not find the %s model.", response_type)
|
||||||
break
|
break
|
||||||
|
|
||||||
self._server_response_data[response_type] = json_data["data"]
|
self._server_response_data[response_type] = json_data["data"]
|
||||||
self._models[response_type].setMetadata(self._server_response_data[response_type])
|
self._models[response_type].setMetadata(self._server_response_data[response_type])
|
||||||
|
|
||||||
|
@ -630,6 +641,10 @@ class Toolbox(QObject, Extension):
|
||||||
elif response_type == "authors":
|
elif response_type == "authors":
|
||||||
self._models[response_type].setFilter({"package_types": "material"})
|
self._models[response_type].setFilter({"package_types": "material"})
|
||||||
self._models[response_type].setFilter({"tags": "generic"})
|
self._models[response_type].setFilter({"tags": "generic"})
|
||||||
|
elif response_type == "updates":
|
||||||
|
# Tell the package manager that there's a new set of updates available.
|
||||||
|
packages = set([pkg["package_id"] for pkg in self._server_response_data[response_type]])
|
||||||
|
self._package_manager.setPackagesWithUpdate(packages)
|
||||||
|
|
||||||
self.metadataChanged.emit()
|
self.metadataChanged.emit()
|
||||||
|
|
||||||
|
@ -660,7 +675,7 @@ class Toolbox(QObject, Extension):
|
||||||
self.setIsDownloading(False)
|
self.setIsDownloading(False)
|
||||||
self._download_reply = cast(QNetworkReply, self._download_reply)
|
self._download_reply = cast(QNetworkReply, self._download_reply)
|
||||||
self._download_reply.downloadProgress.disconnect(self._onDownloadProgress)
|
self._download_reply.downloadProgress.disconnect(self._onDownloadProgress)
|
||||||
|
|
||||||
# Check if the download was sucessfull
|
# Check if the download was sucessfull
|
||||||
if self._download_reply.attribute(QNetworkRequest.HttpStatusCodeAttribute) != 200:
|
if self._download_reply.attribute(QNetworkRequest.HttpStatusCodeAttribute) != 200:
|
||||||
try:
|
try:
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue