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:
{
if(toolbox.viewCategory == "installed")
{
return "ToolboxInstalledPage.qml"
} }
ToolboxErrorPage
switch (toolbox.viewPage)
{ {
id: viewErrored case "loading":
visible: toolbox.viewCategory != "installed" && toolbox.viewPage == "errored" return "ToolboxLoadingPage.qml"
case "errored":
return "ToolboxErrorPage.qml"
case "overview":
return "ToolboxDownloadsPage.qml"
case "detail":
return "ToolboxDetailPage.qml"
case "author":
return "ToolboxAuthorPage.qml"
} }
ToolboxDownloadsPage
{
id: viewDownloads
visible: toolbox.viewCategory != "installed" && toolbox.viewPage == "overview"
} }
ToolboxDetailPage
{
id: viewDetail
visible: toolbox.viewCategory != "installed" && toolbox.viewPage == "detail"
}
ToolboxAuthorPage
{
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,10 +622,15 @@ 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:
continue
if reply.attribute(QNetworkRequest.HttpStatusCodeAttribute) == 200: if reply.attribute(QNetworkRequest.HttpStatusCodeAttribute) == 200:
try: try:
json_data = json.loads(bytes(reply.readAll()).decode("utf-8")) json_data = json.loads(bytes(reply.readAll()).decode("utf-8"))
except json.decoder.JSONDecodeError:
Logger.log("w", "Received invalid JSON for %s.", response_type)
break
# Check for errors: # Check for errors:
if "errors" in json_data: if "errors" in json_data:
@ -633,30 +638,20 @@ class Toolbox(QObject, Extension):
Logger.log("e", "%s", error["title"]) Logger.log("e", "%s", error["title"])
return return
# Create model and apply metadata:
if not self._models[response_type]:
Logger.log("e", "Could not find the %s model.", response_type)
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(json_data["data"])
if response_type is "packages": if response_type is "packages":
self._models[response_type].setFilter({"type": "plugin"}) self._models["packages"].setFilter({"type": "plugin"})
self.reBuildMaterialsModels() self.reBuildMaterialsModels()
self.reBuildPluginsModels() self.reBuildPluginsModels()
elif response_type is "authors": elif response_type is "authors":
self._models[response_type].setFilter({"package_types": "material"}) self._models["authors"].setFilter({"tags": "generic"})
self._models[response_type].setFilter({"tags": "generic"})
self.metadataChanged.emit() self.metadataChanged.emit()
if self.isLoadingComplete(): if self.isLoadingComplete():
self.setViewPage("overview") self.setViewPage("overview")
except json.decoder.JSONDecodeError:
Logger.log("w", "Received invalid JSON for %s.", response_type)
break
else: else:
self.setViewPage("errored") self.setViewPage("errored")
self.resetDownload() self.resetDownload()