diff --git a/plugins/Toolbox/resources/qml/Toolbox.qml b/plugins/Toolbox/resources/qml/Toolbox.qml index ab7c731e7d..d0a165138e 100644 --- a/plugins/Toolbox/resources/qml/Toolbox.qml +++ b/plugins/Toolbox/resources/qml/Toolbox.qml @@ -43,27 +43,27 @@ Window ToolboxLoadingPage { id: viewLoading - visible: manager.viewCategory != "installed" && manager.viewPage == "loading" + visible: toolbox.viewCategory != "installed" && toolbox.viewPage == "loading" } ToolboxDownloadsPage { id: viewDownloads - visible: manager.viewCategory != "installed" && manager.viewPage == "overview" + visible: toolbox.viewCategory != "installed" && toolbox.viewPage == "overview" } ToolboxDetailPage { id: viewDetail - visible: manager.viewCategory != "installed" && manager.viewPage == "detail" + visible: toolbox.viewCategory != "installed" && toolbox.viewPage == "detail" } ToolboxAuthorPage { id: viewAuthor - visible: manager.viewCategory != "installed" && manager.viewPage == "author" + visible: toolbox.viewCategory != "installed" && toolbox.viewPage == "author" } ToolboxInstalledPage { id: installedPluginList - visible: manager.viewCategory == "installed" + visible: toolbox.viewCategory == "installed" } } ToolboxShadow @@ -83,21 +83,21 @@ Window Connections { - target: manager + target: toolbox onShowLicenseDialog: { - licenseDialog.pluginName = manager.getLicenseDialogPluginName(); - licenseDialog.licenseContent = manager.getLicenseDialogLicenseContent(); - licenseDialog.pluginFileLocation = manager.getLicenseDialogPluginFileLocation(); + licenseDialog.pluginName = toolbox.getLicenseDialogPluginName(); + licenseDialog.licenseContent = toolbox.getLicenseDialogLicenseContent(); + licenseDialog.pluginFileLocation = toolbox.getLicenseDialogPluginFileLocation(); licenseDialog.show(); } } Connections { - target: manager + target: toolbox onShowRestartDialog: { - restartDialog.message = manager.getRestartDialogMessage(); + restartDialog.message = toolbox.getRestartDialogMessage(); restartDialog.show(); } } diff --git a/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml b/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml index 76f62f2a0d..4236a282e1 100644 --- a/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml +++ b/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml @@ -10,7 +10,7 @@ import UM 1.1 as UM Item { id: base - property var details: manager.authorsModel.items[0] + property var details: toolbox.authorsModel.items[0] anchors.fill: parent ToolboxBackColumn { diff --git a/plugins/Toolbox/resources/qml/ToolboxBackColumn.qml b/plugins/Toolbox/resources/qml/ToolboxBackColumn.qml index a0332a0a42..01f6d44033 100644 --- a/plugins/Toolbox/resources/qml/ToolboxBackColumn.qml +++ b/plugins/Toolbox/resources/qml/ToolboxBackColumn.qml @@ -41,9 +41,9 @@ Item height: UM.Theme.getSize("base_unit").height * 2 onClicked: { - manager.viewPage = "overview" - manager.filterPackages("type", manager.viewCategory) - manager.filterAuthors("type", manager.viewCategory) + toolbox.viewPage = "overview" + toolbox.filterPackages("type", toolbox.viewCategory) + toolbox.filterAuthors("type", toolbox.viewCategory) } style: ButtonStyle { diff --git a/plugins/Toolbox/resources/qml/ToolboxDetailList.qml b/plugins/Toolbox/resources/qml/ToolboxDetailList.qml index 0ac45d93b5..333b2c1673 100644 --- a/plugins/Toolbox/resources/qml/ToolboxDetailList.qml +++ b/plugins/Toolbox/resources/qml/ToolboxDetailList.qml @@ -28,7 +28,7 @@ Item spacing: UM.Theme.getSize("default_margin").height Repeater { - model: manager.packagesModel + model: toolbox.packagesModel delegate: ToolboxDetailTile {} } } diff --git a/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml b/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml index 5db7a37f98..f0982cdf80 100644 --- a/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml +++ b/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml @@ -10,7 +10,7 @@ import UM 1.1 as UM Item { id: base - property var details: manager.packagesModel.items[0] + property var details: toolbox.packagesModel.items[0] anchors.fill: parent ToolboxBackColumn { diff --git a/plugins/Toolbox/resources/qml/ToolboxDetailTile.qml b/plugins/Toolbox/resources/qml/ToolboxDetailTile.qml index 16f719c478..689a008a67 100644 --- a/plugins/Toolbox/resources/qml/ToolboxDetailTile.qml +++ b/plugins/Toolbox/resources/qml/ToolboxDetailTile.qml @@ -48,7 +48,7 @@ Rectangle Button { id: installButton text: { - if ( manager.isDownloading && manager.activePackage == model ) + if ( toolbox.isDownloading && toolbox.activePackage == model ) { return catalog.i18nc("@action:button", "Cancel") } @@ -59,9 +59,9 @@ Rectangle } enabled: { - if ( manager.isDownloading ) + if ( toolbox.isDownloading ) { - return manager.activePackage == model ? true : false + return toolbox.activePackage == model ? true : false } else { @@ -88,21 +88,21 @@ Rectangle onClicked: { console.log( "MODEL", model.id ) - manager.activePackage = model - // if ( manager.isDownloading && manager.activePackage == model ) - if ( manager.isDownloading ) + toolbox.activePackage = model + // if ( toolbox.isDownloading && toolbox.activePackage == model ) + if ( toolbox.isDownloading ) { - manager.cancelDownload(); + toolbox.cancelDownload(); } else { - // manager.activePackage = model; + // toolbox.activePackage = model; if ( model.can_upgrade ) { - // manager.downloadAndInstallPlugin( model.update_url ); + // toolbox.downloadAndInstallPlugin( model.update_url ); } else { - manager.startDownload( model.download_url ); + toolbox.startDownload( model.download_url ); } } } diff --git a/plugins/Toolbox/resources/qml/ToolboxDownloadsGrid.qml b/plugins/Toolbox/resources/qml/ToolboxDownloadsGrid.qml index ea14ef1cf2..b3a3a89200 100644 --- a/plugins/Toolbox/resources/qml/ToolboxDownloadsGrid.qml +++ b/plugins/Toolbox/resources/qml/ToolboxDownloadsGrid.qml @@ -19,7 +19,7 @@ Column Label { id: heading - text: manager.viewCategory == "material" ? "Maker Choices" : "Community Plugins" + text: toolbox.viewCategory == "material" ? "Maker Choices" : "Community Plugins" width: parent.width color: UM.Theme.getColor("text_medium") font: UM.Theme.getFont("medium") @@ -34,7 +34,7 @@ Column Repeater { - model: manager.viewCategory == "material" ? manager.authorsModel : manager.packagesModel + model: toolbox.viewCategory == "material" ? toolbox.authorsModel : toolbox.packagesModel delegate: ToolboxDownloadsGridTile { Layout.preferredWidth: (grid.width - (grid.columns - 1) * grid.columnSpacing) / grid.columns diff --git a/plugins/Toolbox/resources/qml/ToolboxDownloadsGridTile.qml b/plugins/Toolbox/resources/qml/ToolboxDownloadsGridTile.qml index 7016b09cd9..729d1e17d6 100644 --- a/plugins/Toolbox/resources/qml/ToolboxDownloadsGridTile.qml +++ b/plugins/Toolbox/resources/qml/ToolboxDownloadsGridTile.qml @@ -88,19 +88,19 @@ Item } onClicked: { - if ( manager.viewCategory == "material" ) + if ( toolbox.viewCategory == "material" ) { - manager.viewSelection = model.name - manager.viewPage = "author" - manager.filterAuthors("name", model.name) - manager.filterPackages("author_name", model.name) + toolbox.viewSelection = model.name + toolbox.viewPage = "author" + toolbox.filterAuthors("name", model.name) + toolbox.filterPackages("author_name", model.name) } else { - manager.viewSelection = model.id - manager.viewPage = "detail" - manager.filterAuthors("name", model.author_name) - manager.filterPackages("id", model.id) + toolbox.viewSelection = model.id + toolbox.viewPage = "detail" + toolbox.filterAuthors("name", model.author_name) + toolbox.filterPackages("id", model.id) } } } diff --git a/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcase.qml b/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcase.qml index 7e31d4a182..83740fa46f 100644 --- a/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcase.qml +++ b/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcase.qml @@ -35,13 +35,13 @@ Column Repeater { model: { - if ( manager.viewCategory == "plugin" ) + if ( toolbox.viewCategory == "plugin" ) { - return manager.pluginsShowcaseModel + return toolbox.pluginsShowcaseModel } - if ( manager.viewCategory == "material" ) + if ( toolbox.viewCategory == "material" ) { - return manager.materialsShowcaseModel + return toolbox.materialsShowcaseModel } } delegate: ToolboxDownloadsShowcaseTile {} diff --git a/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcaseTile.qml b/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcaseTile.qml index 830ef1ac5a..b7888f257f 100644 --- a/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcaseTile.qml +++ b/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcaseTile.qml @@ -51,19 +51,19 @@ Item { anchors.fill: parent onClicked: { - switch(manager.viewCategory) + switch(toolbox.viewCategory) { case "material": - manager.viewSelection = model.name - manager.viewPage = "author" - manager.filterAuthors("name", model.name) - manager.filterPackages("author_name", model.name) + toolbox.viewSelection = model.name + toolbox.viewPage = "author" + toolbox.filterAuthors("name", model.name) + toolbox.filterPackages("author_name", model.name) break default: - manager.viewSelection = model.id - manager.viewPage = "detail" - manager.filterAuthors("name", model.author_name) - manager.filterPackages("id", model.id) + toolbox.viewSelection = model.id + toolbox.viewPage = "detail" + toolbox.filterAuthors("name", model.author_name) + toolbox.filterPackages("id", model.id) break } } diff --git a/plugins/Toolbox/resources/qml/ToolboxFooter.qml b/plugins/Toolbox/resources/qml/ToolboxFooter.qml index fcbc2f0ddc..cebf501762 100644 --- a/plugins/Toolbox/resources/qml/ToolboxFooter.qml +++ b/plugins/Toolbox/resources/qml/ToolboxFooter.qml @@ -18,7 +18,7 @@ Item anchors.bottom: parent.bottom Label { - visible: manager.restartRequired + visible: toolbox.restartRequired text: "You will need to restart Cura before changes in plugins have effect." height: UM.Theme.getSize("base_unit").height * 2 verticalAlignment: Text.AlignVCenter @@ -39,9 +39,9 @@ Item right: closeButton.left rightMargin: UM.Theme.getSize("default_margin").width } - visible: manager.restartRequired + visible: toolbox.restartRequired iconName: "dialog-restart" - onClicked: manager.restart() + onClicked: toolbox.restart() style: ButtonStyle { background: Rectangle @@ -72,9 +72,9 @@ Item iconName: "dialog-close" onClicked: { - if ( manager.isDownloading ) + if ( toolbox.isDownloading ) { - manager.cancelDownload() + toolbox.cancelDownload() } base.close(); } diff --git a/plugins/Toolbox/resources/qml/ToolboxHeader.qml b/plugins/Toolbox/resources/qml/ToolboxHeader.qml index 9abe315d1b..060eefa493 100644 --- a/plugins/Toolbox/resources/qml/ToolboxHeader.qml +++ b/plugins/Toolbox/resources/qml/ToolboxHeader.qml @@ -37,7 +37,7 @@ Rectangle { implicitHeight: 48 Rectangle { - visible: manager.viewCategory == "plugin" + visible: toolbox.viewCategory == "plugin" color: UM.Theme.getColor("primary") anchors.bottom: parent.bottom width: parent.width @@ -55,10 +55,10 @@ Rectangle { } onClicked: { - manager.filterPackages("type", "plugin") - manager.filterAuthors("type", "plugin") - manager.viewCategory = "plugin" - manager.viewPage = "overview" + toolbox.filterPackages("type", "plugin") + toolbox.filterAuthors("type", "plugin") + toolbox.viewCategory = "plugin" + toolbox.viewPage = "overview" } } @@ -74,7 +74,7 @@ Rectangle { implicitHeight: 48 Rectangle { - visible: manager.viewCategory == "material" + visible: toolbox.viewCategory == "material" color: UM.Theme.getColor("primary") anchors.bottom: parent.bottom width: parent.width @@ -92,10 +92,10 @@ Rectangle { } onClicked: { - manager.filterPackages("type", "material") - manager.filterAuthors("type", "material") - manager.viewCategory = "material" - manager.viewPage = "overview" + toolbox.filterPackages("type", "material") + toolbox.filterAuthors("type", "material") + toolbox.viewCategory = "material" + toolbox.viewPage = "overview" } } } @@ -113,7 +113,7 @@ Rectangle { implicitWidth: 96 implicitHeight: 48 Rectangle { - visible: manager.viewCategory == "installed" + visible: toolbox.viewCategory == "installed" color: UM.Theme.getColor("primary") anchors.bottom: parent.bottom width: parent.width @@ -129,6 +129,6 @@ Rectangle { horizontalAlignment: Text.AlignHCenter } } - onClicked: manager.viewCategory = "installed" + onClicked: toolbox.viewCategory = "installed" } } diff --git a/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml b/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml index cfe85dab92..d8169906b5 100644 --- a/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml +++ b/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml @@ -58,7 +58,7 @@ ScrollView Repeater { id: materialList - model: manager.packagesModel + model: toolbox.packagesModel delegate: ToolboxInstalledTile {} } } @@ -93,7 +93,7 @@ ScrollView Repeater { id: pluginList - model: manager.packagesModel + model: toolbox.packagesModel delegate: ToolboxInstalledTile {} } } diff --git a/plugins/Toolbox/resources/qml/ToolboxInstalledTile.qml b/plugins/Toolbox/resources/qml/ToolboxInstalledTile.qml index c78cd8eff5..25bcbab895 100644 --- a/plugins/Toolbox/resources/qml/ToolboxInstalledTile.qml +++ b/plugins/Toolbox/resources/qml/ToolboxInstalledTile.qml @@ -104,7 +104,7 @@ Item id: removeButton text: "Uninstall" visible: model.can_uninstall && model.status == "installed" - enabled: !manager.isDownloading + enabled: !toolbox.isDownloading style: ButtonStyle { background: Rectangle @@ -125,7 +125,7 @@ Item horizontalAlignment: Text.AlignHCenter } } - onClicked: manager.removePlugin( model.id ) + onClicked: toolbox.removePlugin( model.id ) } Button { @@ -151,7 +151,7 @@ Item } onClicked: { - manager.updatePackage(model.id); + toolbox.updatePackage(model.id); } } ProgressBar @@ -161,8 +161,8 @@ Item anchors.right: installButton.right anchors.top: installButton.bottom anchors.topMargin: 4 - value: manager.isDownloading ? manager.downloadProgress : 0 - visible: manager.isDownloading + value: toolbox.isDownloading ? toolbox.downloadProgress : 0 + visible: toolbox.isDownloading style: ProgressBarStyle { background: Rectangle diff --git a/plugins/Toolbox/resources/qml/ToolboxLicenseDialog.qml b/plugins/Toolbox/resources/qml/ToolboxLicenseDialog.qml index c08b93b13d..0e89c49d1a 100644 --- a/plugins/Toolbox/resources/qml/ToolboxLicenseDialog.qml +++ b/plugins/Toolbox/resources/qml/ToolboxLicenseDialog.qml @@ -59,7 +59,7 @@ UM.Dialog { onClicked: { licenseDialog.close(); - manager.installPlugin(licenseDialog.pluginFileLocation); + toolbox.installPlugin(licenseDialog.pluginFileLocation); } }, Button diff --git a/plugins/Toolbox/resources/qml/ToolboxRestartDialog.qml b/plugins/Toolbox/resources/qml/ToolboxRestartDialog.qml index a0c961682c..8970515cac 100644 --- a/plugins/Toolbox/resources/qml/ToolboxRestartDialog.qml +++ b/plugins/Toolbox/resources/qml/ToolboxRestartDialog.qml @@ -66,7 +66,7 @@ Window { bottom: parent.bottom bottomMargin: UM.Theme.getSize("default_margin").height } - onClicked: manager.restart() + onClicked: toolbox.restart() style: ButtonStyle { background: Rectangle { implicitWidth: 96 diff --git a/plugins/Toolbox/src/AuthorsModel.py b/plugins/Toolbox/src/AuthorsModel.py index 2156534b31..6d44c6c789 100644 --- a/plugins/Toolbox/src/AuthorsModel.py +++ b/plugins/Toolbox/src/AuthorsModel.py @@ -28,7 +28,7 @@ class AuthorsModel(ListModel): # List of filters for queries. The result is the union of the each list of results. self._filter = {} # type: Dict[str,str] - def setMetaData(self, data): + def setMetadata(self, data): self._authors_metadata = data self._update() diff --git a/plugins/Toolbox/src/PackagesModel.py b/plugins/Toolbox/src/PackagesModel.py index 860e5aaaea..12462f4b77 100644 --- a/plugins/Toolbox/src/PackagesModel.py +++ b/plugins/Toolbox/src/PackagesModel.py @@ -42,7 +42,7 @@ class PackagesModel(ListModel): # List of filters for queries. The result is the union of the each list of results. self._filter = {} # type: Dict[str,str] - def setPackagesMetaData(self, data): + def setMetadata(self, data): self._packages_metadata = data self._update() diff --git a/plugins/Toolbox/src/Toolbox.py b/plugins/Toolbox/src/Toolbox.py index 127254795d..8d8c7a3654 100644 --- a/plugins/Toolbox/src/Toolbox.py +++ b/plugins/Toolbox/src/Toolbox.py @@ -24,7 +24,6 @@ from .PackagesModel import PackagesModel i18n_catalog = i18nCatalog("cura") - ## The Toolbox class is responsible of communicating with the server through the API class Toolbox(QObject, Extension): def __init__(self, parent=None): @@ -33,19 +32,17 @@ class Toolbox(QObject, Extension): self._application = Application.getInstance() self._package_manager = None self._plugin_registry = Application.getInstance().getPluginRegistry() - self._package_manager = None self._packages_version = self._plugin_registry.APIVersion self._api_version = 1 self._api_url = "https://api-staging.ultimaker.com/cura-packages/v{api_version}/cura/v{package_version}".format( api_version = self._api_version, package_version = self._packages_version) + # Network: self._get_packages_request = None self._get_showcase_request = None - self._download_request = None self._download_reply = None self._download_progress = 0 self._is_downloading = False - self._network_manager = None self._request_header = [ b"User-Agent", @@ -59,13 +56,43 @@ class Toolbox(QObject, Extension): ) ] + # Data: + self._authors_metadata = [] self._packages_metadata = [] + self._metadata = { + "authors": [], + "packages": [], + "materials_showcase": [ + { + "name": "DSM", + "email": "contact@dsm.nl", + "website": "www.dsm.nl", + "type": "material" + }, + { + "name": "BASF", + "email": "contact@basf.de", + "website": "www.basf.de", + "type": "material" + } + ] + } + + # Models: + self._authors_model = None self._packages_model = None self._plugins_showcase_model = None self._plugins_installed_model = None self._materials_showcase_model = None self._materials_installed_model = None - self._authors_model = None + self._models = { + "authors": None, + "packages": None, + "plugins_showcase": None, + "plugins_installed": None, + "materials_showcase": None, + "materials_installed": None + } # These properties are for keeping track of the UI state: # ---------------------------------------------------------------------- @@ -87,21 +114,10 @@ class Toolbox(QObject, Extension): # installed, or otherwise modified. self._active_package = None - # Nowadays can be 'plugins', 'materials' or 'installed' - self._current_view = "plugins" - self._detail_data = {} # Extraneous since can just use the data prop of the model. - self._dialog = None self._restartDialog = None self._restart_required = False - # Installed plugins are really installed after reboot. In order to - # prevent the user from downloading the same file over and over again, - # we keep track of the upgraded plugins. - self._newly_installed_plugin_ids = [] - self._newly_uninstalled_plugin_ids = [] - self._plugin_statuses = {} # type: Dict[str, str] - # variables for the license agreement dialog self._license_dialog_plugin_name = "" self._license_dialog_license_content = "" @@ -110,15 +126,10 @@ class Toolbox(QObject, Extension): Application.getInstance().initializationFinished.connect(self._onAppInitialized) - def _onAppInitialized(self): - self._package_manager = Application.getInstance().getCuraPackageManager() - packagesMetadataChanged = pyqtSignal() - authorsMetadataChanged = pyqtSignal() - pluginsShowcaseMetadataChanged = pyqtSignal() - materialsShowcaseMetadataChanged = pyqtSignal() - metadataChanged = pyqtSignal() + # Signals: + # -------------------------------------------------------------------------- # Downloading changes activePackageChanged = pyqtSignal() onDownloadProgressChanged = pyqtSignal() @@ -129,6 +140,7 @@ class Toolbox(QObject, Extension): viewChanged = pyqtSignal() detailViewChanged = pyqtSignal() filterChanged = pyqtSignal() + metadataChanged = pyqtSignal() showLicenseDialog = pyqtSignal() showRestartDialog = pyqtSignal() @@ -158,9 +170,11 @@ class Toolbox(QObject, Extension): self._restart_dialog_message = message self.showRestartDialog.emit() + def _onAppInitialized(self): + self._package_manager = Application.getInstance().getCuraPackageManager() + @pyqtSlot() def browsePackages(self): - self._package_manager = Application.getInstance().getCuraPackageManager() # 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. @@ -180,13 +194,14 @@ class Toolbox(QObject, Extension): def _createDialog(self, qml_name): Logger.log("d", "Toolbox: Creating dialog [%s].", qml_name) path = os.path.join(PluginRegistry.getInstance().getPluginPath(self.getPluginId()), "resources", "qml", qml_name) - dialog = Application.getInstance().createQmlComponent(path, {"manager": self}) + dialog = Application.getInstance().createQmlComponent(path, {"toolbox": self}) return dialog @pyqtSlot(str) def installPlugin(self, file_path): self._package_manager.installPackage(file_path) self.metadataChanged.emit() + # TODO: Stuff self.openRestartDialog("TODO") self._restart_required = True self.restartRequiredChanged.emit() @@ -197,53 +212,20 @@ class Toolbox(QObject, Extension): self.metadataChanged.emit() self._restart_required = True self.restartRequiredChanged.emit() - + # TODO: Stuff Application.getInstance().messageBox(i18n_catalog.i18nc("@window:title", "Plugin browser"), "TODO") @pyqtSlot(str) def enablePlugin(self, plugin_id): self._plugin_registry.enablePlugin(plugin_id) self.metadataChanged.emit() - Logger.log("i", "%s was set as 'active'", id) + Logger.log("i", "%s was set as 'active'.", plugin_id) @pyqtSlot(str) def disablePlugin(self, plugin_id): self._plugin_registry.disablePlugin(plugin_id) self.metadataChanged.emit() - Logger.log("i", "%s was set as 'deactive'", id) - - @pyqtProperty(QObject, notify = metadataChanged) - def pluginsModel(self): - self._plugins_model = PluginsModel(None, self._view_category) - # self._plugins_model.update() - - # Check each plugin the registry for matching plugin from server - # metadata, and if found, compare the versions. Higher version sets - # 'can_upgrade' to 'True': - for plugin in self._plugins_model.items: - if self._checkCanUpgrade(plugin["id"], plugin["version"]): - plugin["can_upgrade"] = True - - for item in self._packages_metadata: - if item["id"] == plugin["id"]: - plugin["update_url"] = item["file_location"] - return self._plugins_model - - @pyqtProperty(QObject, notify = metadataChanged) - def pluginsShowcaseModel(self): - return self._plugins_showcase_model - - @pyqtProperty(QObject, notify = metadataChanged) - def materialsShowcaseModel(self): - return self._materials_showcase_model - - @pyqtProperty(QObject, notify = metadataChanged) - def packagesModel(self): - return self._packages_model - - @pyqtProperty(QObject, notify = metadataChanged) - def authorsModel(self): - return self._authors_model + Logger.log("i", "%s was set as 'deactive'.", plugin_id) @pyqtProperty(bool, notify = metadataChanged) def dataReady(self): @@ -257,6 +239,23 @@ class Toolbox(QObject, Extension): def restart(self): CuraApplication.getInstance().windowClosed() + # @pyqtProperty(QObject, notify = metadataChanged) + # def pluginsModel(self): + # self._plugins_model = PluginsModel(None, self._view_category) + # # self._plugins_model.update() + # + # # Check each plugin the registry for matching plugin from server + # # metadata, and if found, compare the versions. Higher version sets + # # 'can_upgrade' to 'True': + # for plugin in self._plugins_model.items: + # if self._checkCanUpgrade(plugin["id"], plugin["version"]): + # plugin["can_upgrade"] = True + # + # for item in self._packages_metadata: + # if item["id"] == plugin["id"]: + # plugin["update_url"] = item["file_location"] + # return self._plugins_model + # Checks @@ -285,14 +284,6 @@ class Toolbox(QObject, Extension): self._network_manager.finished.connect(self._onRequestFinished) self._network_manager.networkAccessibleChanged.connect(self._onNetworkAccesibleChanged) - @pyqtProperty(bool, notify = restartRequiredChanged) - def restartRequired(self): - return self._restart_required - - @pyqtSlot() - def restart(self): - CuraApplication.getInstance().windowClosed() - # Make API Calls @@ -311,6 +302,8 @@ class Toolbox(QObject, Extension): self._get_showcase_request.setRawHeader(*self._request_header) self._network_manager.get(self._get_showcase_request) + # TODO: Request authors and request material showcase + @pyqtSlot(str) def startDownload(self, url): Logger.log("i", "Toolbox: Attempting to download & install package from %s.", url) @@ -335,7 +328,7 @@ class Toolbox(QObject, Extension): - # Handlers for Download Events + # Handlers for Network Events # -------------------------------------------------------------------------- def _onNetworkAccesibleChanged(self, accessible): if accessible == 0: @@ -369,44 +362,29 @@ class Toolbox(QObject, Extension): json_data = json.loads(bytes(reply.readAll()).decode("utf-8")) print(json_data) # Create packages model with all packages: - if not self._packages_model: - self._packages_model = PackagesModel() - self._packages_metadata = json_data["data"] - self._packages_model.setPackagesMetaData(self._packages_metadata) + if not self._models["packages"]: + self._models["packages"] = PackagesModel() + self._metadata["packages"] = json_data["data"] + self._models["packages"].setMetadata(self._metadata["packages"]) self.metadataChanged.emit() # Create authors model with all authors: if not self._authors_model: self._authors_model = AuthorsModel() - # TODO: Remove this hacky code once there's an API call for this. - self._authors_metadata = [] - for package in self._packages_metadata: + # TODO: Replace this with a proper API call: + for package in self._metadata["packages"]: package["author"]["type"] = package["package_type"] if package["author"] not in self._authors_metadata: - self._authors_metadata.append(package["author"]) - self._authors_model.setMetaData(self._authors_metadata) + self._metadata["authors"].append(package["author"]) + self._models["author"].setMetadata(self._metadata["authors"]) self.metadataChanged.emit() - self.setViewPage("overview") - # TODO: Also replace this with a proper API call: - if not self._materials_showcase_model: - self._materials_showcase_model = AuthorsModel() - # TODO: Remove this hacky code once there's an API call for this. - self._materials_showcase_model.setMetaData([ - { - "name": "DSM", - "email": "contact@dsm.nl", - "website": "www.dsm.nl", - "type": "material" - }, - { - "name": "BASF", - "email": "contact@basf.de", - "website": "www.basf.de", - "type": "material" - } - ]) + if not self._models["materials_showcase"]: + self._models["materials_showcase"] = AuthorsModel() + # TODO: Replace this with a proper API call: + self._models["materials_showcase"].setMetadata(self._metadata["materials_showcase"]) self.metadataChanged.emit() + self.setViewPage("overview") except json.decoder.JSONDecodeError: @@ -467,7 +445,7 @@ class Toolbox(QObject, Extension): return - # Getter & Setters + # Getter & Setters for Properties: # -------------------------------------------------------------------------- def setDownloadProgress(self, progress): if progress != self._download_progress: @@ -515,7 +493,35 @@ class Toolbox(QObject, Extension): - # Model Filtering + # Expose Models: + # -------------------------------------------------------------------------- + @pyqtProperty(QObject, notify = metadataChanged) + def authorsModel(self): + return self._models["authors"] + + @pyqtProperty(QObject, notify = metadataChanged) + def packagesModel(self): + return self._models["packages"] + + @pyqtProperty(QObject, notify = metadataChanged) + def pluginsShowcaseModel(self): + return self._models["plugins_showcase"] + + @pyqtProperty(QObject, notify = metadataChanged) + def pluginsInstalledModel(self): + return self._models["plugins_installed"] + + @pyqtProperty(QObject, notify = metadataChanged) + def materialsShowcaseModel(self): + return self._models["materials_showcase"] + + @pyqtProperty(QObject, notify = metadataChanged) + def materialsInstalledModel(self): + return self._models["materials_installed"] + + + + # Filter Models: # -------------------------------------------------------------------------- @pyqtSlot(str, str) def filterPackages(self, filterType, parameter):