Moved qml pages of toolbox to a loader

This dramatically improves the loading of the toolbox dialog

CURA-6006
This commit is contained in:
Jaime van Kessel 2018-12-06 09:45:27 +01:00
parent 00e95e68eb
commit 838949dac7
2 changed files with 52 additions and 61 deletions

View file

@ -44,36 +44,31 @@ Window
top: header.bottom top: header.bottom
bottom: footer.top bottom: footer.top
} }
// TODO: This could be improved using viewFilter instead of viewCategory
ToolboxLoadingPage Loader
{ {
id: viewLoading anchors.fill:parent
visible: toolbox.viewCategory != "installed" && toolbox.viewPage == "loading" source:
} {
ToolboxErrorPage if(toolbox.viewCategory == "installed")
{ {
id: viewErrored return "ToolboxInstalledPage.qml"
visible: toolbox.viewCategory != "installed" && toolbox.viewPage == "errored" }
}
ToolboxDownloadsPage switch (toolbox.viewPage)
{ {
id: viewDownloads case "loading":
visible: toolbox.viewCategory != "installed" && toolbox.viewPage == "overview" return "ToolboxLoadingPage.qml"
} case "errored":
ToolboxDetailPage return "ToolboxErrorPage.qml"
{ case "overview":
id: viewDetail return "ToolboxDownloadsPage.qml"
visible: toolbox.viewCategory != "installed" && toolbox.viewPage == "detail" case "detail":
} return "ToolboxDetailPage.qml"
ToolboxAuthorPage case "author":
{ return "ToolboxAuthorPage.qml"
id: viewAuthor }
visible: toolbox.viewCategory != "installed" && toolbox.viewPage == "author" }
}
ToolboxInstalledPage
{
id: installedPluginList
visible: toolbox.viewCategory == "installed"
} }
} }
@ -95,6 +90,7 @@ Window
licenseDialog.show(); licenseDialog.show();
} }
} }
ToolboxLicenseDialog ToolboxLicenseDialog
{ {
id: licenseDialog id: licenseDialog

View file

@ -622,44 +622,39 @@ class Toolbox(QObject, Extension):
if reply.operation() == QNetworkAccessManager.GetOperation: if reply.operation() == QNetworkAccessManager.GetOperation:
for response_type, url in self._request_urls.items(): for response_type, url in self._request_urls.items():
if reply.url() == url: if reply.url() != url:
if reply.attribute(QNetworkRequest.HttpStatusCodeAttribute) == 200: continue
try:
json_data = json.loads(bytes(reply.readAll()).decode("utf-8"))
# Check for errors: if reply.attribute(QNetworkRequest.HttpStatusCodeAttribute) == 200:
if "errors" in json_data: try:
for error in json_data["errors"]: json_data = json.loads(bytes(reply.readAll()).decode("utf-8"))
Logger.log("e", "%s", error["title"]) except json.decoder.JSONDecodeError:
return Logger.log("w", "Received invalid JSON for %s.", response_type)
break
# Create model and apply metadata: # Check for errors:
if not self._models[response_type]: if "errors" in json_data:
Logger.log("e", "Could not find the %s model.", response_type) for error in json_data["errors"]:
break Logger.log("e", "%s", error["title"])
return
self._server_response_data[response_type] = json_data["data"]
self._models[response_type].setMetadata(self._server_response_data[response_type])
if response_type is "packages": self._server_response_data[response_type] = json_data["data"]
self._models[response_type].setFilter({"type": "plugin"}) self._models[response_type].setMetadata(json_data["data"])
self.reBuildMaterialsModels()
self.reBuildPluginsModels()
elif response_type is "authors":
self._models[response_type].setFilter({"package_types": "material"})
self._models[response_type].setFilter({"tags": "generic"})
self.metadataChanged.emit() if response_type is "packages":
self._models["packages"].setFilter({"type": "plugin"})
self.reBuildMaterialsModels()
self.reBuildPluginsModels()
elif response_type is "authors":
self._models["authors"].setFilter({"tags": "generic"})
if self.isLoadingComplete(): self.metadataChanged.emit()
self.setViewPage("overview")
except json.decoder.JSONDecodeError: if self.isLoadingComplete():
Logger.log("w", "Received invalid JSON for %s.", response_type) self.setViewPage("overview")
break else:
else: self.setViewPage("errored")
self.setViewPage("errored") self.resetDownload()
self.resetDownload()
else: else:
# Ignore any operation that is not a get operation # Ignore any operation that is not a get operation
pass pass