From 45e32e6c058711dcd37e94b115b072e60135322e Mon Sep 17 00:00:00 2001 From: Ian Paschal Date: Thu, 3 May 2018 09:12:35 +0200 Subject: [PATCH 1/8] CURA-5296 Quick hack to test using a list of IDs --- cura/CuraPackageManager.py | 54 +++++++++++++++++++++++++++++++++++--- 1 file changed, 50 insertions(+), 4 deletions(-) diff --git a/cura/CuraPackageManager.py b/cura/CuraPackageManager.py index 4006cddd77..4187db31c0 100644 --- a/cura/CuraPackageManager.py +++ b/cura/CuraPackageManager.py @@ -15,6 +15,28 @@ from UM.Logger import Logger from UM.Resources import Resources from UM.Version import Version +BUNDLED = [ + "DagomaChromatikPLA", + "FABtotumABS", + "FABtotumNylon", + "FABtotumPLA", + "FABtotumTPU", + "FiberlogyHDPLA", + "Filo3DPLA", + "IMADE3DJellyBOXPETG", + "IMADE3DJellyBOXPLA", + "UltimakerABS", + "UltimakerCPE", + "UltimakerNylon", + "UltimakerPC", + "UltimakerPLA", + "UltimakerPVA", + "VertexDeltaABS", + "VertexDeltaPET", + "VertexDeltaPLA", + "VertexDeltaTPU" +] + class CuraPackageManager(QObject): Version = 1 @@ -114,8 +136,7 @@ class CuraPackageManager(QObject): managed_package_id_set = installed_package_id_set | self._to_remove_package_set - # TODO: For absolutely no reason, this function seems to run in a loop - # even though no loop is ever called with it. + # TODO: This function seems to run in a loop even though no loop is ever called with it. # map of -> -> installed_packages_dict = {} @@ -136,6 +157,31 @@ class CuraPackageManager(QObject): # We also need to get information from the plugin registry such as if a plugin is active package_info["is_active"] = self._plugin_registry.isActivePlugin(package_id) + # HACK: This is to know which packages are bundled and therefore always installed. + for package_id in BUNDLED: + package_info = { + "package_id": package_id, + "package_type": "material", + "package_version": "1.0.0", + "description": "", + "cura_version": 4, + "website": "", + "display_name": package_id, + "author": { + "author_id": "Ultimaker", + "display_name": "Ultimaker B.V.", + "email": "materials@ultimaker.com", + "website": "http://www.ultimaker.com/materials" + }, + "tags": [], + "is_active": True, + "is_bundled": True + } + package_type = package_info["package_type"] + if package_type not in installed_packages_dict: + installed_packages_dict[package_type] = [] + installed_packages_dict[package_type].append( package_info ) + # Also get all bundled plugins all_metadata = self._plugin_registry.getAllMetaData() for item in all_metadata: @@ -147,7 +193,7 @@ class CuraPackageManager(QObject): if package_id in Application.getInstance().getRequiredPlugins(): continue - plugin_package_info["is_bundled"] = True if plugin_package_info["author"]["display_name"] == "Ultimaker B.V." else False + plugin_package_info["is_bundled"] = plugin_package_info["package_id"] in BUNDLED plugin_package_info["is_active"] = self._plugin_registry.isActivePlugin(package_id) package_type = "plugin" if package_type not in installed_packages_dict: @@ -172,7 +218,7 @@ class CuraPackageManager(QObject): "email": "", "website": "", }, - "tags": ["plugin"], + "tags": ["plugin"] } return package_metadata From 4cfd047b116959f58f8ccbf40f96e7f0fb793d86 Mon Sep 17 00:00:00 2001 From: Ian Paschal Date: Mon, 7 May 2018 15:47:03 +0200 Subject: [PATCH 2/8] CURA-5296 Simplifications to CuraPackageManager --- cura/CuraPackageManager.py | 103 +++++++++++++------------------------ 1 file changed, 36 insertions(+), 67 deletions(-) diff --git a/cura/CuraPackageManager.py b/cura/CuraPackageManager.py index e499b1276f..941b71cfee 100644 --- a/cura/CuraPackageManager.py +++ b/cura/CuraPackageManager.py @@ -40,8 +40,7 @@ BUNDLED = [ class CuraPackageManager(QObject): Version = 1 - # The prefix that's added to all files for an installed package to avoid naming conflicts with user created - # files. + # The prefix that's added to all files for an installed package to avoid naming conflicts with user created files. PREFIX_PLACE_HOLDER = "-CP;" def __init__(self, parent = None): @@ -54,11 +53,13 @@ class CuraPackageManager(QObject): # JSON file that keeps track of all installed packages. self._package_management_file_path = os.path.join(os.path.abspath(Resources.getDataStoragePath()), "packages.json") - self._installed_package_dict = {} # a dict of all installed packages - self._to_remove_package_set = set() # a set of packages that need to be removed at the next start - self._to_install_package_dict = {} # a dict of packages that need to be installed at the next start - installedPackagesChanged = pyqtSignal() # Emitted whenever the installed packages collection have been changed. + self._bundled_package_dict = {} # A dict of all bundled packages + self._installed_package_dict = {} # A dict of all installed packages + self._to_remove_package_set = set() # A set of packages that need to be removed at the next start + self._to_install_package_dict = {} # A dict of packages that need to be installed at the next start + + installedPackagesChanged = pyqtSignal() # Emitted whenever the installed packages collection have been changed. def initialize(self): self._loadManagementData() @@ -77,6 +78,7 @@ class CuraPackageManager(QObject): with open(self._package_management_file_path, "r", encoding = "utf-8") as f: management_dict = json.load(f, encoding = "utf-8") + self._bundled_package_dict = management_dict.get("bundled", {}) self._installed_package_dict = management_dict.get("installed", {}) self._to_remove_package_set = set(management_dict.get("to_remove", [])) self._to_install_package_dict = management_dict.get("to_install", {}) @@ -89,11 +91,12 @@ class CuraPackageManager(QObject): with container_registry.lockFile(): with open(self._package_management_file_path, "w", encoding = "utf-8") as f: data_dict = {"version": CuraPackageManager.Version, + "bundled": self._bundled_package_dict, "installed": self._installed_package_dict, "to_remove": list(self._to_remove_package_set), "to_install": self._to_install_package_dict} data_dict["to_remove"] = list(data_dict["to_remove"]) - json.dump(data_dict, f) + json.dump(data_dict, f, sort_keys = True, indent = 4) Logger.log("i", "Package management file %s is saved", self._package_management_file_path) # (for initialize) Removes all packages that have been scheduled to be removed. @@ -120,89 +123,55 @@ class CuraPackageManager(QObject): return package_info if package_id in self._installed_package_dict: - package_info = self._installed_package_dict.get(package_id) + package_info = self._installed_package_dict[package_id]["package_info"] return package_info - for section, packages in self.getAllInstalledPackagesInfo().items(): - for package in packages: - if package["package_id"] == package_id: - return package + if package_id in self._bundled_package_dict: + package_info = self._bundled_package_dict[package_id]["package_info"] + return package_info return None def getAllInstalledPackagesInfo(self) -> dict: - installed_package_id_set = set(self._installed_package_dict.keys()) | set(self._to_install_package_dict.keys()) - installed_package_id_set = installed_package_id_set.difference(self._to_remove_package_set) - managed_package_id_set = installed_package_id_set | self._to_remove_package_set - - # TODO: This function seems to run in a loop even though no loop is ever called with it. + # Add bundled, installed, and to-install packages to the set of installed package IDs + all_installed_ids = set() + all_installed_ids = all_installed_ids.union(set(self._bundled_package_dict.keys())) + all_installed_ids = all_installed_ids.union(set(self._installed_package_dict.keys())) + all_installed_ids = all_installed_ids.union(set(self._to_install_package_dict.keys())) + all_installed_ids = all_installed_ids.difference(self._to_remove_package_set) # map of -> -> installed_packages_dict = {} - for package_id in installed_package_id_set: + for package_id in all_installed_ids: + + # Skip required plugins as they should not be tampered with if package_id in Application.getInstance().getRequiredPlugins(): continue + + # Add bundled plugins + if package_id in self._bundled_package_dict: + package_info = self._bundled_package_dict[package_id]["package_info"] + + # Add installed plugins + if package_id in self._installed_package_dict: + package_info = self._installed_package_dict[package_id]["package_info"] + + # Add to install plugins if package_id in self._to_install_package_dict: package_info = self._to_install_package_dict[package_id]["package_info"] - else: - package_info = self._installed_package_dict[package_id] - package_info["is_bundled"] = False - - package_type = package_info["package_type"] - if package_type not in installed_packages_dict: - installed_packages_dict[package_type] = [] - installed_packages_dict[package_type].append( package_info ) # We also need to get information from the plugin registry such as if a plugin is active package_info["is_active"] = self._plugin_registry.isActivePlugin(package_id) - # HACK: This is to know which packages are bundled and therefore always installed. - for package_id in BUNDLED: - package_info = { - "package_id": package_id, - "package_type": "material", - "package_version": "1.0.0", - "description": "", - "cura_version": 4, - "website": "", - "display_name": package_id, - "author": { - "author_id": "Ultimaker", - "display_name": "Ultimaker B.V.", - "email": "materials@ultimaker.com", - "website": "http://www.ultimaker.com/materials" - }, - "tags": [], - "is_active": True, - "is_bundled": True - } + # If there is not a section in the dict for this type, add it package_type = package_info["package_type"] if package_type not in installed_packages_dict: installed_packages_dict[package_type] = [] + + # Finally, add the data installed_packages_dict[package_type].append( package_info ) - # Also get all bundled plugins - all_metadata = self._plugin_registry.getAllMetaData() - for item in all_metadata: - if item == {}: - continue - - plugin_package_info = self.__convertPluginMetadataToPackageMetadata(item) - # Only gather the bundled plugins here. - package_id = plugin_package_info["package_id"] - if package_id in managed_package_id_set: - continue - if package_id in Application.getInstance().getRequiredPlugins(): - continue - - plugin_package_info["is_bundled"] = plugin_package_info["package_id"] in BUNDLED - plugin_package_info["is_active"] = self._plugin_registry.isActivePlugin(package_id) - package_type = "plugin" - if package_type not in installed_packages_dict: - installed_packages_dict[package_type] = [] - installed_packages_dict[package_type].append( plugin_package_info ) - return installed_packages_dict def __convertPluginMetadataToPackageMetadata(self, plugin_metadata: dict) -> dict: From 0accdc63201fbc373a2ef3f6851bbd6d3433f7a5 Mon Sep 17 00:00:00 2001 From: Ian Paschal Date: Tue, 8 May 2018 11:54:19 +0200 Subject: [PATCH 3/8] Cura-5296 Use separate packages.json files in app and user data --- cura/CuraPackageManager.py | 88 +- plugins/MachineSettingsAction/plugin.json | 2 +- .../qml/ToolboxActionButtonStyle.qml | 29 + .../resources/qml/ToolboxInstalledTile.qml | 62 +- plugins/Toolbox/src/PackagesModel.py | 17 +- plugins/UM3NetworkPrinting/plugin.json | 2 +- plugins/UltimakerMachineActions/plugin.json | 2 +- plugins/UserAgreement/plugin.json | 2 +- resources/packages.json | 1157 +++++++++++++++++ 9 files changed, 1278 insertions(+), 83 deletions(-) create mode 100644 plugins/Toolbox/resources/qml/ToolboxActionButtonStyle.qml create mode 100644 resources/packages.json diff --git a/cura/CuraPackageManager.py b/cura/CuraPackageManager.py index 941b71cfee..0e1d235555 100644 --- a/cura/CuraPackageManager.py +++ b/cura/CuraPackageManager.py @@ -15,28 +15,6 @@ from UM.Logger import Logger from UM.Resources import Resources from UM.Version import Version -BUNDLED = [ - "DagomaChromatikPLA", - "FABtotumABS", - "FABtotumNylon", - "FABtotumPLA", - "FABtotumTPU", - "FiberlogyHDPLA", - "Filo3DPLA", - "IMADE3DJellyBOXPETG", - "IMADE3DJellyBOXPLA", - "UltimakerABS", - "UltimakerCPE", - "UltimakerNylon", - "UltimakerPC", - "UltimakerPLA", - "UltimakerPVA", - "VertexDeltaABS", - "VertexDeltaPET", - "VertexDeltaPLA", - "VertexDeltaTPU" -] - class CuraPackageManager(QObject): Version = 1 @@ -51,8 +29,14 @@ class CuraPackageManager(QObject): self._plugin_registry = self._application.getPluginRegistry() # JSON file that keeps track of all installed packages. - self._package_management_file_path = os.path.join(os.path.abspath(Resources.getDataStoragePath()), - "packages.json") + self._bundled_package_management_file_path = os.path.join( + Application.getInstallPrefix(), + Application.getInstance().getApplicationName(), + "resources", + "packages.json" + ) + self._user_package_management_file_path = os.path.join(os.path.abspath(Resources.getDataStoragePath()), "packages.json") + self._bundled_package_dict = {} # A dict of all bundled packages self._installed_package_dict = {} # A dict of all installed packages @@ -68,36 +52,42 @@ class CuraPackageManager(QObject): # (for initialize) Loads the package management file if exists def _loadManagementData(self) -> None: - if not os.path.exists(self._package_management_file_path): - Logger.log("i", "Package management file %s doesn't exist, do nothing", self._package_management_file_path) + if not os.path.exists(self._bundled_package_management_file_path): + Logger.log("w", "Bundled package management file could not be found!") + return + if not os.path.exists(self._user_package_management_file_path): + Logger.log("i", "User package management file %s doesn't exist, do nothing", self._user_package_management_file_path) return # Need to use the file lock here to prevent concurrent I/O from other processes/threads container_registry = self._application.getContainerRegistry() with container_registry.lockFile(): - with open(self._package_management_file_path, "r", encoding = "utf-8") as f: - management_dict = json.load(f, encoding = "utf-8") - self._bundled_package_dict = management_dict.get("bundled", {}) + # Load the bundled packages: + with open(self._bundled_package_management_file_path, "r", encoding = "utf-8") as f: + self._bundled_package_dict = json.load(f, encoding = "utf-8") + Logger.log("i", "Loaded bundled packages data from %s", self._bundled_package_management_file_path) + + # Load the user packages: + with open(self._user_package_management_file_path, "r", encoding="utf-8") as f: + management_dict = json.load(f, encoding="utf-8") self._installed_package_dict = management_dict.get("installed", {}) self._to_remove_package_set = set(management_dict.get("to_remove", [])) self._to_install_package_dict = management_dict.get("to_install", {}) - - Logger.log("i", "Package management file %s is loaded", self._package_management_file_path) + Logger.log("i", "Loaded user packages management file from %s", self._user_package_management_file_path) def _saveManagementData(self) -> None: # Need to use the file lock here to prevent concurrent I/O from other processes/threads container_registry = self._application.getContainerRegistry() with container_registry.lockFile(): - with open(self._package_management_file_path, "w", encoding = "utf-8") as f: + with open(self._user_package_management_file_path, "w", encoding = "utf-8") as f: data_dict = {"version": CuraPackageManager.Version, - "bundled": self._bundled_package_dict, "installed": self._installed_package_dict, "to_remove": list(self._to_remove_package_set), "to_install": self._to_install_package_dict} data_dict["to_remove"] = list(data_dict["to_remove"]) json.dump(data_dict, f, sort_keys = True, indent = 4) - Logger.log("i", "Package management file %s is saved", self._package_management_file_path) + Logger.log("i", "Package management file %s was saved", self._user_package_management_file_path) # (for initialize) Removes all packages that have been scheduled to be removed. def _removeAllScheduledPackages(self) -> None: @@ -136,9 +126,13 @@ class CuraPackageManager(QObject): # Add bundled, installed, and to-install packages to the set of installed package IDs all_installed_ids = set() - all_installed_ids = all_installed_ids.union(set(self._bundled_package_dict.keys())) - all_installed_ids = all_installed_ids.union(set(self._installed_package_dict.keys())) - all_installed_ids = all_installed_ids.union(set(self._to_install_package_dict.keys())) + + if self._bundled_package_dict.keys(): + all_installed_ids = all_installed_ids.union(set(self._bundled_package_dict.keys())) + if self._installed_package_dict.keys(): + all_installed_ids = all_installed_ids.union(set(self._installed_package_dict.keys())) + if self._to_install_package_dict.keys(): + all_installed_ids = all_installed_ids.union(set(self._to_install_package_dict.keys())) all_installed_ids = all_installed_ids.difference(self._to_remove_package_set) # map of -> -> @@ -162,15 +156,23 @@ class CuraPackageManager(QObject): package_info = self._to_install_package_dict[package_id]["package_info"] # We also need to get information from the plugin registry such as if a plugin is active - package_info["is_active"] = self._plugin_registry.isActivePlugin(package_id) + if package_info["package_type"] == "plugin": + package_info["is_active"] = self._plugin_registry.isActivePlugin(package_id) + else: + package_info["is_active"] = self._plugin_registry.isActivePlugin(package_id) + + # If the package ID is in bundled, label it as such + if package_info["package_id"] in self._bundled_package_dict.keys(): + package_info["is_bundled"] = True + else: + package_info["is_bundled"] = False # If there is not a section in the dict for this type, add it - package_type = package_info["package_type"] - if package_type not in installed_packages_dict: - installed_packages_dict[package_type] = [] - + if package_info["package_type"] not in installed_packages_dict: + installed_packages_dict[package_info["package_type"]] = [] + # Finally, add the data - installed_packages_dict[package_type].append( package_info ) + installed_packages_dict[package_info["package_type"]].append( package_info ) return installed_packages_dict diff --git a/plugins/MachineSettingsAction/plugin.json b/plugins/MachineSettingsAction/plugin.json index af63e3a9c8..703a145deb 100644 --- a/plugins/MachineSettingsAction/plugin.json +++ b/plugins/MachineSettingsAction/plugin.json @@ -2,7 +2,7 @@ "name": "Machine Settings action", "author": "fieldOfView", "version": "1.0.0", - "description": "Provides a way to change machine settings (such as build volume, nozzle size, etc)", + "description": "Provides a way to change machine settings (such as build volume, nozzle size, etc.).", "api": 4, "i18n-catalog": "cura" } diff --git a/plugins/Toolbox/resources/qml/ToolboxActionButtonStyle.qml b/plugins/Toolbox/resources/qml/ToolboxActionButtonStyle.qml new file mode 100644 index 0000000000..eff74278c9 --- /dev/null +++ b/plugins/Toolbox/resources/qml/ToolboxActionButtonStyle.qml @@ -0,0 +1,29 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Toolbox is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.2 +import QtQuick.Controls 1.4 +import QtQuick.Controls.Styles 1.4 +import UM 1.1 as UM + +ButtonStyle +{ + background: Rectangle + { + implicitWidth: UM.Theme.getSize("toolbox_action_button").width + implicitHeight: UM.Theme.getSize("toolbox_action_button").height + color: "transparent" + border + { + width: UM.Theme.getSize("default_lining").width + color: UM.Theme.getColor("lining") + } + } + label: Label + { + text: control.text + color: UM.Theme.getColor("text") + verticalAlignment: Text.AlignVCenter + horizontalAlignment: Text.AlignHCenter + } +} \ No newline at end of file diff --git a/plugins/Toolbox/resources/qml/ToolboxInstalledTile.qml b/plugins/Toolbox/resources/qml/ToolboxInstalledTile.qml index 0ed71845f5..ad6d610e44 100644 --- a/plugins/Toolbox/resources/qml/ToolboxInstalledTile.qml +++ b/plugins/Toolbox/resources/qml/ToolboxInstalledTile.qml @@ -26,7 +26,7 @@ Item Column { id: pluginInfo - property var color: isEnabled ? UM.Theme.getColor("text") : UM.Theme.getColor("lining") + property var color: model.package_type === "plugin" && !isEnabled ? UM.Theme.getColor("lining") : UM.Theme.getColor("text") height: parent.height anchors { @@ -49,12 +49,11 @@ Item Text { text: model.description + maximumLineCount: 3 + elide: Text.ElideRight width: parent.width - height: UM.Theme.getSize("toolbox_property_label").height - clip: true wrapMode: Text.WordWrap color: pluginInfo.color - elide: Text.ElideRight } } Column @@ -104,19 +103,11 @@ Item right: parent.right topMargin: UM.Theme.getSize("default_margin").height } - Button { - id: removeButton - text: - { - if (model.is_bundled) - { - return isEnabled ? catalog.i18nc("@action:button", "Disable") : catalog.i18nc("@action:button", "Enable") - } - else - { - return catalog.i18nc("@action:button", "Uninstall") - } - } + Button + { + id: disableButton + text: isEnabled ? catalog.i18nc("@action:button", "Disable") : catalog.i18nc("@action:button", "Enable") + visible: model.type == "plugin" enabled: !toolbox.isDownloading style: ButtonStyle { @@ -139,24 +130,36 @@ Item horizontalAlignment: Text.AlignHCenter } } - onClicked: + onClicked: toolbox.isEnabled(model.id) ? toolbox.disable(model.id) : toolbox.enable(model.id) + } + Button + { + id: removeButton + text: catalog.i18nc("@action:button", "Uninstall") + visible: !model.is_bundled + enabled: !toolbox.isDownloading + style: ButtonStyle { - if (model.is_bundled) + background: Rectangle { - if (toolbox.isEnabled(model.id)) + implicitWidth: UM.Theme.getSize("toolbox_action_button").width + implicitHeight: UM.Theme.getSize("toolbox_action_button").height + color: "transparent" + border { - toolbox.disable(model.id) - } - else - { - toolbox.enable(model.id) + width: UM.Theme.getSize("default_lining").width + color: UM.Theme.getColor("lining") } } - else + label: Label { - toolbox.uninstall(model.id) + text: control.text + color: UM.Theme.getColor("text") + verticalAlignment: Text.AlignVCenter + horizontalAlignment: Text.AlignHCenter } } + onClicked: toolbox.uninstall(model.id) } Button { @@ -180,10 +183,7 @@ Item font: UM.Theme.getFont("default_bold") } } - onClicked: - { - toolbox.update(model.id); - } + onClicked: toolbox.update(model.id) } ProgressBar { diff --git a/plugins/Toolbox/src/PackagesModel.py b/plugins/Toolbox/src/PackagesModel.py index d1905e1742..5ec3eba1d8 100644 --- a/plugins/Toolbox/src/PackagesModel.py +++ b/plugins/Toolbox/src/PackagesModel.py @@ -28,8 +28,9 @@ class PackagesModel(ListModel): self.addRoleName(Qt.UserRole + 11, "download_url") self.addRoleName(Qt.UserRole + 12, "last_updated") self.addRoleName(Qt.UserRole + 13, "is_bundled") - self.addRoleName(Qt.UserRole + 14, "has_configs") - self.addRoleName(Qt.UserRole + 15, "supported_configs") + self.addRoleName(Qt.UserRole + 14, "is_enabled") + self.addRoleName(Qt.UserRole + 15, "has_configs") + self.addRoleName(Qt.UserRole + 16, "supported_configs") # List of filters for queries. The result is the union of the each list of results. self._filter = {} # type: Dict[str, str] @@ -52,20 +53,26 @@ class PackagesModel(ListModel): configs_model = ConfigsModel() configs_model.setConfigs(package["data"]["supported_configs"]) + if "author_id" not in package["author"] or "display_name" not in package["author"]: + package["author"]["author_id"] = "" + package["author"]["display_name"] = "" + # raise Exception("Detected a package with malformed author data.") + items.append({ "id": package["package_id"], "type": package["package_type"], "name": package["display_name"], "version": package["package_version"], - "author_id": package["author"]["author_id"] if "author_id" in package["author"] else package["author"]["name"], - "author_name": package["author"]["display_name"] if "display_name" in package["author"] else package["author"]["name"], + "author_id": package["author"]["author_id"], + "author_name": package["author"]["display_name"], "author_email": package["author"]["email"] if "email" in package["author"] else None, - "description": package["description"], + "description": package["description"] if "description" in package else None, "icon_url": package["icon_url"] if "icon_url" in package else None, "image_urls": package["image_urls"] if "image_urls" in package else None, "download_url": package["download_url"] if "download_url" in package else None, "last_updated": package["last_updated"] if "last_updated" in package else None, "is_bundled": package["is_bundled"] if "is_bundled" in package else False, + "is_enabled": package["is_enabled"] if "is_enabled" in package else False, "has_configs": has_configs, "supported_configs": configs_model }) diff --git a/plugins/UM3NetworkPrinting/plugin.json b/plugins/UM3NetworkPrinting/plugin.json index 5a845a0516..e7b59fadd6 100644 --- a/plugins/UM3NetworkPrinting/plugin.json +++ b/plugins/UM3NetworkPrinting/plugin.json @@ -1,7 +1,7 @@ { "name": "UM3 Network Connection", "author": "Ultimaker B.V.", - "description": "Manages network connections to Ultimaker 3 printers", + "description": "Manages network connections to Ultimaker 3 printers.", "version": "1.0.0", "api": 4, "i18n-catalog": "cura" diff --git a/plugins/UltimakerMachineActions/plugin.json b/plugins/UltimakerMachineActions/plugin.json index c9bb1a89e4..57b3e6bc8f 100644 --- a/plugins/UltimakerMachineActions/plugin.json +++ b/plugins/UltimakerMachineActions/plugin.json @@ -2,7 +2,7 @@ "name": "Ultimaker machine actions", "author": "Ultimaker B.V.", "version": "1.0.0", - "description": "Provides machine actions for Ultimaker machines (such as bed leveling wizard, selecting upgrades, etc)", + "description": "Provides machine actions for Ultimaker machines (such as bed leveling wizard, selecting upgrades, etc.).", "api": 4, "i18n-catalog": "cura" } diff --git a/plugins/UserAgreement/plugin.json b/plugins/UserAgreement/plugin.json index aa5dbb1258..b10abc5640 100644 --- a/plugins/UserAgreement/plugin.json +++ b/plugins/UserAgreement/plugin.json @@ -2,7 +2,7 @@ "name": "UserAgreement", "author": "Ultimaker B.V.", "version": "1.0.0", - "description": "Ask the user once if he/she agrees with our license", + "description": "Ask the user once if he/she agrees with our license.", "api": 4, "i18n-catalog": "cura" } diff --git a/resources/packages.json b/resources/packages.json new file mode 100644 index 0000000000..0b03bdd0d7 --- /dev/null +++ b/resources/packages.json @@ -0,0 +1,1157 @@ +{ + "3MFReader": { + "package_info": { + "package_id": "3MFReader", + "package_type": "plugin", + "display_name": "3MF Reader", + "description": "Provides support for reading 3MF files.", + "package_version": "1.0.0", + "cura_version": 4, + "website": "https://ultimaker.com", + "author": { + "author_id": "Ultimaker", + "display_name": "Ultimaker B.V.", + "email": "plugins@ultimaker.com", + "website": "https://ultimaker.com" + } + } + }, + "3MFWriter": { + "package_info": { + "package_id": "3MFWriter", + "package_type": "plugin", + "display_name": "3MF Writer", + "description": "Provides support for writing 3MF files.", + "package_version": "1.0.0", + "cura_version": 4, + "website": "https://ultimaker.com", + "author": { + "author_id": "Ultimaker", + "display_name": "Ultimaker B.V.", + "email": "plugins@ultimaker.com", + "website": "https://ultimaker.com" + } + } + }, + "AutoSave": { + "package_info": { + "package_id": "AutoSave", + "package_type": "plugin", + "display_name": "Auto-Save", + "description": "Automatically saves Preferences, Machines and Profiles after changes.", + "package_version": "1.0.0", + "cura_version": 4, + "website": "https://ultimaker.com", + "author": { + "author_id": "Ultimaker", + "display_name": "Ultimaker B.V.", + "email": "plugins@ultimaker.com", + "website": "https://ultimaker.com" + } + } + }, + "ChangeLogPlugin": { + "package_info": { + "package_id": "ChangeLogPlugin", + "package_type": "plugin", + "display_name": "Change Log", + "description": "Shows changes since latest checked version.", + "package_version": "1.0.0", + "cura_version": 4, + "website": "https://ultimaker.com", + "author": { + "author_id": "Ultimaker", + "display_name": "Ultimaker B.V.", + "email": "plugins@ultimaker.com", + "website": "https://ultimaker.com" + } + } + }, + "CuraEngineBackend": { + "package_info": { + "package_id": "CuraEngineBackend", + "package_type": "plugin", + "display_name": "CuraEngine Backend", + "description": "Provides the link to the CuraEngine slicing backend.", + "package_version": "1.0.0", + "cura_version": 4, + "website": "https://ultimaker.com", + "author": { + "author_id": "Ultimaker", + "display_name": "Ultimaker B.V.", + "email": "plugins@ultimaker.com", + "website": "https://ultimaker.com" + } + } + }, + "CuraProfileReader": { + "package_info": { + "package_id": "CuraProfileReader", + "package_type": "plugin", + "display_name": "Cura Profile Reader", + "description": "Provides support for importing Cura profiles.", + "package_version": "1.0.0", + "cura_version": 4, + "website": "https://ultimaker.com", + "author": { + "author_id": "Ultimaker", + "display_name": "Ultimaker B.V.", + "email": "plugins@ultimaker.com", + "website": "https://ultimaker.com" + } + } + }, + "CuraProfileWriter": { + "package_info": { + "package_id": "CuraProfileWriter", + "package_type": "plugin", + "display_name": "Cura Profile Writer", + "description": "Provides support for exporting Cura profiles.", + "package_version": "1.0.0", + "cura_version": 4, + "website": "https://ultimaker.com", + "author": { + "author_id": "Ultimaker", + "display_name": "Ultimaker B.V.", + "email": "plugins@ultimaker.com", + "website": "https://ultimaker.com" + } + } + }, + "FirmwareUpdateChecker": { + "package_info": { + "package_id": "FirmwareUpdateChecker", + "package_type": "plugin", + "display_name": "Firmware Update Checker", + "description": "Checks for firmware updates.", + "package_version": "1.0.0", + "cura_version": 4, + "website": "https://ultimaker.com", + "author": { + "author_id": "Ultimaker", + "display_name": "Ultimaker B.V.", + "email": "plugins@ultimaker.com", + "website": "https://ultimaker.com" + } + } + }, + "GCodeGzReader": { + "package_info": { + "package_id": "GCodeGzReader", + "package_type": "plugin", + "display_name": "Compressed G-code Reader", + "description": "Reads g-code from a compressed archive.", + "package_version": "1.0.0", + "cura_version": 4, + "website": "https://ultimaker.com", + "author": { + "author_id": "Ultimaker", + "display_name": "Ultimaker B.V.", + "email": "plugins@ultimaker.com", + "website": "https://ultimaker.com" + } + } + }, + "GCodeGzWriter": { + "package_info": { + "package_id": "GCodeGzWriter", + "package_type": "plugin", + "display_name": "Compressed G-code Writer", + "description": "Writes g-code to a compressed archive.", + "package_version": "1.0.0", + "cura_version": 4, + "website": "https://ultimaker.com", + "author": { + "author_id": "Ultimaker", + "display_name": "Ultimaker B.V.", + "email": "plugins@ultimaker.com", + "website": "https://ultimaker.com" + } + } + }, + "GCodeProfileReader": { + "package_info": { + "package_id": "GCodeProfileReader", + "package_type": "plugin", + "display_name": "G-Code Profile Reader", + "description": "Provides support for importing profiles from g-code files.", + "package_version": "1.0.0", + "cura_version": 4, + "website": "https://ultimaker.com", + "author": { + "author_id": "Ultimaker", + "display_name": "Ultimaker B.V.", + "email": "plugins@ultimaker.com", + "website": "https://ultimaker.com" + } + } + }, + "GCodeReader": { + "package_info": { + "package_id": "GCodeReader", + "package_type": "plugin", + "display_name": "G-Code Reader", + "description": "Allows loading and displaying G-code files.", + "package_version": "1.0.0", + "cura_version": 4, + "website": "https://ultimaker.com", + "author": { + "author_id": "VictorLarchenko", + "display_name": "Victor Larchenko", + "email": "plugins@ultimaker.com", + "website": "https://ultimaker.com" + } + } + }, + "GCodeWriter": { + "package_info": { + "package_id": "GCodeWriter", + "package_type": "plugin", + "display_name": "G-Code Writer", + "description": "Writes g-code to a file.", + "package_version": "1.0.0", + "cura_version": 4, + "website": "https://ultimaker.com", + "author": { + "author_id": "Ultimaker", + "display_name": "Ultimaker B.V.", + "email": "plugins@ultimaker.com", + "website": "https://ultimaker.com" + } + } + }, + "ImageReader": { + "package_info": { + "package_id": "ImageReader", + "package_type": "plugin", + "display_name": "Image Reader", + "description": "Enables ability to generate printable geometry from 2D image files.", + "package_version": "1.0.0", + "cura_version": 4, + "website": "https://ultimaker.com", + "author": { + "author_id": "Ultimaker", + "display_name": "Ultimaker B.V.", + "email": "plugins@ultimaker.com", + "website": "https://ultimaker.com" + } + } + }, + "LegacyProfileReader": { + "package_info": { + "package_id": "LegacyProfileReader", + "package_type": "plugin", + "display_name": "Legacy Cura Profile Reader", + "description": "Provides support for importing profiles from legacy Cura versions.", + "package_version": "1.0.0", + "cura_version": 4, + "website": "https://ultimaker.com", + "author": { + "author_id": "Ultimaker", + "display_name": "Ultimaker B.V.", + "email": "plugins@ultimaker.com", + "website": "https://ultimaker.com" + } + } + }, + "MachineSettingsAction": { + "package_info": { + "package_id": "MachineSettingsAction", + "package_type": "plugin", + "display_name": "Machine Settings Action", + "description": "Provides a way to change machine settings (such as build volume, nozzle size, etc.).", + "package_version": "1.0.0", + "cura_version": 4, + "website": "https://ultimaker.com", + "author": { + "author_id": "fieldOfView", + "display_name": "fieldOfView", + "email": null, + "website": "https://ultimaker.com" + } + } + }, + "ModelChecker": { + "package_info": { + "package_id": "ModelChecker", + "package_type": "plugin", + "display_name": "Model Checker", + "description": "Checks models and print configuration for possible printing issues and give suggestions.", + "package_version": "0.1.0", + "cura_version": 4, + "website": "https://ultimaker.com", + "author": { + "author_id": "Ultimaker", + "display_name": "Ultimaker B.V.", + "email": "plugins@ultimaker.com", + "website": "https://ultimaker.com" + } + } + }, + "MonitorStage": { + "package_info": { + "package_id": "MonitorStage", + "package_type": "plugin", + "display_name": "Monitor Stage", + "description": "Provides a monitor stage in Cura.", + "package_version": "1.0.0", + "cura_version": 4, + "website": "https://ultimaker.com", + "author": { + "author_id": "Ultimaker", + "display_name": "Ultimaker B.V.", + "email": "plugins@ultimaker.com", + "website": "https://ultimaker.com" + } + } + }, + "PerObjectSettingsTool": { + "package_info": { + "package_id": "PerObjectSettingsTool", + "package_type": "plugin", + "display_name": "Per-Object Settings Tool", + "description": "Provides the per-model settings.", + "package_version": "1.0.0", + "cura_version": 4, + "website": "https://ultimaker.com", + "author": { + "author_id": "Ultimaker", + "display_name": "Ultimaker B.V.", + "email": "plugins@ultimaker.com", + "website": "https://ultimaker.com" + } + } + }, + "PostProcessingPlugin": { + "package_info": { + "package_id": "PostProcessingPlugin", + "package_type": "plugin", + "display_name": "Post Processing", + "description": "Extension that allows for user created scripts for post processing.", + "package_version": "2.2.0", + "cura_version": 4, + "website": "https://ultimaker.com", + "author": { + "author_id": "Ultimaker", + "display_name": "Ultimaker B.V.", + "email": "plugins@ultimaker.com", + "website": "https://ultimaker.com" + } + } + }, + "PrepareStage": { + "package_info": { + "package_id": "PrepareStage", + "package_type": "plugin", + "display_name": "Prepare Stage", + "description": "Provides a prepare stage in Cura.", + "package_version": "1.0.0", + "cura_version": 4, + "website": "https://ultimaker.com", + "author": { + "author_id": "Ultimaker", + "display_name": "Ultimaker B.V.", + "email": "plugins@ultimaker.com", + "website": "https://ultimaker.com" + } + } + }, + "RemovableDriveOutputDevice": { + "package_info": { + "package_id": "RemovableDriveOutputDevice", + "package_type": "plugin", + "display_name": "Removable Drive Output Device", + "description": "Provides removable drive hotplugging and writing support.", + "package_version": "1.0.0", + "cura_version": 4, + "website": "https://ultimaker.com", + "author": { + "author_id": "Ultimaker", + "display_name": "Ultimaker B.V.", + "email": "plugins@ultimaker.com", + "website": "https://ultimaker.com" + } + } + }, + "SimulationView": { + "package_info": { + "package_id": "SimulationView", + "package_type": "plugin", + "display_name": "Simulation View", + "description": "Provides the Simulation view.", + "package_version": "1.0.0", + "cura_version": 4, + "website": "https://ultimaker.com", + "author": { + "author_id": "Ultimaker", + "display_name": "Ultimaker B.V.", + "email": "plugins@ultimaker.com", + "website": "https://ultimaker.com" + } + } + }, + "SliceInfoPlugin": { + "package_info": { + "package_id": "SliceInfoPlugin", + "package_type": "plugin", + "display_name": "Slice Info", + "description": "Submits anonymous slice info. Can be disabled through preferences.", + "package_version": "1.0.0", + "cura_version": 4, + "website": "https://ultimaker.com", + "author": { + "author_id": "Ultimaker", + "display_name": "Ultimaker B.V.", + "email": "plugins@ultimaker.com", + "website": "https://ultimaker.com" + } + } + }, + "SolidView": { + "package_info": { + "package_id": "SolidView", + "package_type": "plugin", + "display_name": "Solid View", + "description": "Provides a normal solid mesh view.", + "package_version": "1.0.0", + "cura_version": 4, + "website": "https://ultimaker.com", + "author": { + "author_id": "Ultimaker", + "display_name": "Ultimaker B.V.", + "email": "plugins@ultimaker.com", + "website": "https://ultimaker.com" + } + } + }, + "SupportEraser": { + "package_info": { + "package_id": "SupportEraser", + "package_type": "plugin", + "display_name": "Support Eraser Tool", + "description": "Creates an eraser mesh to block the printing of support in certain places.", + "package_version": "1.0.0", + "cura_version": 4, + "website": "https://ultimaker.com", + "author": { + "author_id": "Ultimaker", + "display_name": "Ultimaker B.V.", + "email": "plugins@ultimaker.com", + "website": "https://ultimaker.com" + } + } + }, + "Toolbox": { + "package_info": { + "package_id": "Toolbox", + "package_type": "plugin", + "display_name": "Toolbox", + "description": "Find, manage and install new Cura packages.", + "package_version": "1.0.0", + "cura_version": 4, + "website": "https://ultimaker.com", + "author": { + "author_id": "Ultimaker", + "display_name": "Ultimaker B.V.", + "email": "plugins@ultimaker.com", + "website": "https://ultimaker.com" + } + } + }, + "UFPWriter": { + "package_info": { + "package_id": "UFPWriter", + "package_type": "plugin", + "display_name": "UFP Writer", + "description": "Provides support for writing Ultimaker Format Packages.", + "package_version": "1.0.0", + "cura_version": 4, + "website": "https://ultimaker.com", + "author": { + "author_id": "Ultimaker", + "display_name": "Ultimaker B.V.", + "email": "plugins@ultimaker.com", + "website": "https://ultimaker.com" + } + } + }, + "UltimakerMachineActions": { + "package_info": { + "package_id": "UltimakerMachineActions", + "package_type": "plugin", + "display_name": "Ultimaker Machine Actions", + "description": "Provides machine actions for Ultimaker machines (such as bed leveling wizard, selecting upgrades, etc.).", + "package_version": "1.0.0", + "cura_version": 4, + "website": "https://ultimaker.com", + "author": { + "author_id": "Ultimaker", + "display_name": "Ultimaker B.V.", + "email": "plugins@ultimaker.com", + "website": "https://ultimaker.com" + } + } + }, + "UM3NetworkPrinting": { + "package_info": { + "package_id": "UM3NetworkPrinting", + "package_type": "plugin", + "display_name": "UM3 Network Printing", + "description": "Manages network connections to Ultimaker 3 printers.", + "package_version": "1.0.0", + "cura_version": 4, + "website": "https://ultimaker.com", + "author": { + "author_id": "Ultimaker", + "display_name": "Ultimaker B.V.", + "email": "plugins@ultimaker.com", + "website": "https://ultimaker.com" + } + } + }, + "USBPrinting": { + "package_info": { + "package_id": "USBPrinting", + "package_type": "plugin", + "display_name": "USB Printing", + "description": "Accepts G-Code and sends them to a printer. Plugin can also update firmware.", + "package_version": "1.0.0", + "cura_version": 4, + "website": "https://ultimaker.com", + "author": { + "author_id": "Ultimaker", + "display_name": "Ultimaker B.V.", + "email": "plugins@ultimaker.com", + "website": "https://ultimaker.com" + } + } + }, + "UserAgreement": { + "package_info": { + "package_id": "UserAgreement", + "package_type": "plugin", + "display_name": "User Agreement", + "description": "Ask the user once if he/she agrees with our license.", + "package_version": "1.0.0", + "cura_version": 4, + "website": "https://ultimaker.com", + "author": { + "author_id": "Ultimaker", + "display_name": "Ultimaker B.V.", + "email": "plugins@ultimaker.com", + "website": "https://ultimaker.com" + } + } + }, + "VersionUpgrade21to22": { + "package_info": { + "package_id": "VersionUpgrade", + "package_type": "plugin", + "display_name": "Version Upgrade 2.1 to 2.2", + "description": "Upgrades configurations from Cura 2.1 to Cura 2.2.", + "package_version": "1.0.0", + "cura_version": 4, + "website": "https://ultimaker.com", + "author": { + "author_id": "Ultimaker", + "display_name": "Ultimaker B.V.", + "email": "plugins@ultimaker.com", + "website": "https://ultimaker.com" + } + } + }, + "VersionUpgrade22to24": { + "package_info": { + "package_id": "VersionUpgrade", + "package_type": "plugin", + "display_name": "Version Upgrade 2.2 to 2.4", + "description": "Upgrades configurations from Cura 2.2 to Cura 2.4.", + "package_version": "1.0.0", + "cura_version": 4, + "website": "https://ultimaker.com", + "author": { + "author_id": "Ultimaker", + "display_name": "Ultimaker B.V.", + "email": "plugins@ultimaker.com", + "website": "https://ultimaker.com" + } + } + }, + "VersionUpgrade25to26": { + "package_info": { + "package_id": "VersionUpgrade", + "package_type": "plugin", + "display_name": "Version Upgrade 2.5 to 2.6", + "description": "Upgrades configurations from Cura 2.5 to Cura 2.6.", + "package_version": "1.0.0", + "cura_version": 4, + "website": "https://ultimaker.com", + "author": { + "author_id": "Ultimaker", + "display_name": "Ultimaker B.V.", + "email": "plugins@ultimaker.com", + "website": "https://ultimaker.com" + } + } + }, + "VersionUpgrade26to27": { + "package_info": { + "package_id": "VersionUpgrade", + "package_type": "plugin", + "display_name": "Version Upgrade 2.6 to 2.7", + "description": "Upgrades configurations from Cura 2.6 to Cura 2.7.", + "package_version": "1.0.0", + "cura_version": 4, + "website": "https://ultimaker.com", + "author": { + "author_id": "Ultimaker", + "display_name": "Ultimaker B.V.", + "email": "plugins@ultimaker.com", + "website": "https://ultimaker.com" + } + } + }, + "VersionUpgrade27to30": { + "package_info": { + "package_id": "VersionUpgrade", + "package_type": "plugin", + "display_name": "Version Upgrade 2.7 to 3.0", + "description": "Upgrades configurations from Cura 2.7 to Cura 3.0.", + "package_version": "1.0.0", + "cura_version": 4, + "website": "https://ultimaker.com", + "author": { + "author_id": "Ultimaker", + "display_name": "Ultimaker B.V.", + "email": "plugins@ultimaker.com", + "website": "https://ultimaker.com" + } + } + }, + "VersionUpgrade30to31": { + "package_info": { + "package_id": "VersionUpgrade", + "package_type": "plugin", + "display_name": "Version Upgrade 3.0 to 3.1", + "description": "Upgrades configurations from Cura 3.0 to Cura 3.1.", + "package_version": "1.0.0", + "cura_version": 4, + "website": "https://ultimaker.com", + "author": { + "author_id": "Ultimaker", + "display_name": "Ultimaker B.V.", + "email": "plugins@ultimaker.com", + "website": "https://ultimaker.com" + } + } + }, + "VersionUpgrade32to33": { + "package_info": { + "package_id": "VersionUpgrade", + "package_type": "plugin", + "display_name": "Version Upgrade 3.2 to 3.3", + "description": "Upgrades configurations from Cura 3.2 to Cura 3.3.", + "package_version": "1.0.0", + "cura_version": 4, + "website": "https://ultimaker.com", + "author": { + "author_id": "Ultimaker", + "display_name": "Ultimaker B.V.", + "email": "plugins@ultimaker.com", + "website": "https://ultimaker.com" + } + } + }, + "VersionUpgrade33to34": { + "package_info": { + "package_id": "VersionUpgrade", + "package_type": "plugin", + "display_name": "Version Upgrade 3.3 to 3.4", + "description": "Upgrades configurations from Cura 3.3 to Cura 3.4.", + "package_version": "1.0.0", + "cura_version": 4, + "website": "https://ultimaker.com", + "author": { + "author_id": "Ultimaker", + "display_name": "Ultimaker B.V.", + "email": "plugins@ultimaker.com", + "website": "https://ultimaker.com" + } + } + }, + "X3DReader": { + "package_info": { + "package_id": "X3DReader", + "package_type": "plugin", + "display_name": "X3D Reader", + "description": "Provides support for reading X3D files.", + "package_version": "0.5.0", + "cura_version": 4, + "website": "https://ultimaker.com", + "author": { + "author_id": "SevaAlekseyev", + "display_name": "Seva Alekseyev", + "email": "plugins@ultimaker.com", + "website": "https://ultimaker.com" + } + } + }, + "XmlMaterialProfile": { + "package_info": { + "package_id": "XMLMaterialProfile", + "package_type": "plugin", + "display_name": "XML Material Profiles", + "description": "Provides capabilities to read and write XML-based material profiles.", + "package_version": "1.0.0", + "cura_version": 4, + "website": "https://ultimaker.com", + "author": { + "author_id": "Ultimaker", + "display_name": "Ultimaker B.V.", + "email": "plugins@ultimaker.com", + "website": "https://ultimaker.com" + } + } + }, + "XRayView": { + "package_info": { + "package_id": "XRayView", + "package_type": "plugin", + "display_name": "X-Ray View", + "description": "Provides the X-Ray view.", + "package_version": "1.0.0", + "cura_version": 4, + "website": "https://ultimaker.com", + "author": { + "author_id": "Ultimaker", + "display_name": "Ultimaker B.V.", + "email": "plugins@ultimaker.com", + "website": "https://ultimaker.com" + } + } + }, + "DagomaChromatikPLA": { + "filename": "/Users/i.paschal/Library/Application Support/cura/3.2/cache/cura_packages/DagomaChromatikPLA.curapackage", + "package_info": { + "package_id": "DagomaChromatikPLA", + "package_type": "material", + "display_name": "Dagoma Chromatik PLA", + "description": "Filament testé et approuvé pour les imprimantes 3D Dagoma. Chromatik est l'idéal pour débuter et suivre les tutoriels premiers pas. Il vous offre qualité et résistance pour chacune de vos impressions.", + "package_version": "1.0.0", + "cura_version": 4, + "website": "https://dagoma.fr/boutique/filaments.html", + "author": { + "author_id": "Dagoma", + "display_name": "Dagoma", + "email": null, + "website": "https://dagoma.fr" + } + } + }, + "FABtotumABS": { + "filename": "/Users/i.paschal/Library/Application Support/cura/3.2/cache/cura_packages/FABtotumABS.curapackage", + "package_info": { + "package_id": "FABtotumABS", + "package_type": "material", + "display_name": "FABtotum ABS", + "description": "This material is easy to be extruded but it is not the simplest to use. It is one of the most used in 3D printing to get very well finished objects. It is not sustainable and its smoke can be dangerous if inhaled. The reason to prefer this filament to PLA is mainly because of its precision and mechanical specs. ABS (for plastic) stands for Acrylonitrile Butadiene Styrene and it is a thermoplastic which is widely used in everyday objects. It can be printed with any FFF 3D printer which can get to high temperatures as it must be extruded in a range between 220° and 245°, so it’s compatible with all versions of the FABtotum Personal fabricator.", + "package_version": "1.0.0", + "cura_version": 4, + "website": "https://store.fabtotum.com/eu/products/filaments.html?filament_type=40", + "author": { + "author_id": "FABtotum", + "display_name": "FABtotum S.R.L.", + "email": "info@fabtotum.com", + "website": "https://www.fabtotum.com" + } + } + }, + "FABtotumNylon": { + "filename": "/Users/i.paschal/Library/Application Support/cura/3.2/cache/cura_packages/FABtotumNylon.curapackage", + "package_info": { + "package_id": "FABtotumNylon", + "package_type": "material", + "display_name": "FABtotum Nylon", + "description": "When 3D printing started this material was not listed among the extrudable filaments. It is flexible as well as resistant to tractions. It is well known for its uses in textile but also in industries which require a strong and flexible material. There are different kinds of Nylon: 3D printing mostly uses Nylon 6 and Nylon 6.6, which are the most common. It requires higher temperatures to be printed, so a 3D printer must be able to reach them (around 240°C): the FABtotum, of course, can.", + "package_version": "1.0.0", + "cura_version": 4, + "website": "https://store.fabtotum.com/eu/products/filaments.html?filament_type=53", + "author": { + "author_id": "FABtotum", + "display_name": "FABtotum S.R.L.", + "email": "info@fabtotum.com", + "website": "https://www.fabtotum.com" + } + } + }, + "FABtotumPLA": { + "filename": "/Users/i.paschal/Library/Application Support/cura/3.2/cache/cura_packages/FABtotumPLA.curapackage", + "package_info": { + "package_id": "FABtotumPLA", + "package_type": "material", + "display_name": "FABtotum PLA", + "description": "It is the most common filament used for 3D printing. It is studied to be bio-degradable as it comes from corn starch’s sugar mainly. It is completely made of renewable sources and has no footprint on polluting. PLA stands for PolyLactic Acid and it is a thermoplastic that today is still considered the easiest material to be 3D printed. It can be extruded at lower temperatures: the standard range of FABtotum’s one is between 185° and 195°.", + "package_version": "1.0.0", + "cura_version": 4, + "website": "https://store.fabtotum.com/eu/products/filaments.html?filament_type=39", + "author": { + "author_id": "FABtotum", + "display_name": "FABtotum S.R.L.", + "email": "info@fabtotum.com", + "website": "https://www.fabtotum.com" + } + } + }, + "FABtotumTPU": { + "filename": "/Users/i.paschal/Library/Application Support/cura/3.2/cache/cura_packages/FABtotumTPU.curapackage", + "package_info": { + "package_id": "FABtotumTPU", + "package_type": "material", + "display_name": "FABtotum TPU Shore 98A", + "description": "", + "package_version": "1.0.0", + "cura_version": 4, + "website": "https://store.fabtotum.com/eu/products/filaments.html?filament_type=66", + "author": { + "author_id": "FABtotum", + "display_name": "FABtotum S.R.L.", + "email": "info@fabtotum.com", + "website": "https://www.fabtotum.com" + } + } + }, + "FiberlogyHDPLA": { + "filename": "/Users/i.paschal/Library/Application Support/cura/3.2/cache/cura_packages/FiberlogyHDPLA.curapackage", + "package_info": { + "package_id": "FiberlogyHDPLA", + "package_type": "material", + "display_name": "Fiberlogy HD PLA", + "description": "With our HD PLA you have many more options. You can use this material in two ways. Choose the one you like best. You can use it as a normal PLA and get prints characterized by a very good adhesion between the layers and high precision. You can also make your prints acquire similar properties to that of ABS – better impact resistance and high temperature resistance. All you need is an oven. Yes, an oven! By annealing our HD PLA in an oven, in accordance with the manual, you will avoid all the inconveniences of printing with ABS, such as unpleasant odour or hazardous fumes.", + "package_version": "1.0.0", + "cura_version": 4, + "website": "http://fiberlogy.com/en/fiberlogy-filaments/filament-hd-pla/", + "author": { + "author_id": "Fiberlogy", + "diplay_name": "Fiberlogy S.A.", + "email": "grzegorz.h@fiberlogy.com", + "website": "http://fiberlogy.com" + } + } + }, + "Filo3DPLA": { + "filename": "/Users/i.paschal/Library/Application Support/cura/3.2/cache/cura_packages/Filo3DPLA.curapackage", + "package_info": { + "package_id": "Filo3DPLA", + "package_type": "material", + "display_name": "Filo3D PLA", + "description": "Fast, safe and reliable printing. PLA is ideal for the fast and reliable printing of parts and prototypes with a great surface quality.", + "package_version": "1.0.0", + "cura_version": 4, + "website": "https://dagoma.fr", + "author": { + "author_id": "Dagoma", + "display_name": "Dagoma", + "email": null, + "website": "https://dagoma.fr" + } + } + }, + "IMADE3DJellyBOXPETG": { + "filename": "/Users/i.paschal/Library/Application Support/cura/3.2/cache/cura_packages/IMADE3DJellyBOXPETG.curapackage", + "package_info": { + "package_id": "IMADE3DJellyBOXPETG", + "package_type": "material", + "display_name": "IMADE3D JellyBOX PETG", + "description": "", + "package_version": "1.0.0", + "cura_version": 4, + "website": "http://shop.imade3d.com/filament.html", + "author": { + "author_id": "IMADE3D", + "display_name": "IMADE3D", + "email": "info@imade3d.com", + "website": "https://www.imade3d.com" + } + } + }, + "IMADE3DJellyBOXPLA": { + "filename": "/Users/i.paschal/Library/Application Support/cura/3.2/cache/cura_packages/IMADE3DJellyBOXPLA.curapackage", + "package_info": { + "package_id": "IMADE3DJellyBOXPLA", + "package_type": "material", + "display_name": "IMADE3D JellyBOX PLA", + "description": "", + "package_version": "1.0.0", + "cura_version": 4, + "website": "http://shop.imade3d.com/filament.html", + "author": { + "author_id": "IMADE3D", + "display_name": "IMADE3D", + "email": "info@imade3d.com", + "website": "https://www.imade3d.com" + } + } + }, + "OctofiberPLA": { + "filename": "/Users/i.paschal/Library/Application Support/cura/3.2/cache/cura_packages/OctoFiberPLA.curapackage", + "package_info": { + "package_id": "OctofiberPLA", + "package_type": "material", + "display_name": "Octofiber PLA", + "description": "PLA material from Octofiber.", + "package_version": "1.0.0", + "cura_version": 4, + "website": "https://nl.octofiber.com/3d-printing-filament/pla.html", + "author": { + "author_id": "Octofiber", + "display_name": "Octofiber", + "email": "info@octofiber.com", + "website": "https://nl.octofiber.com" + } + } + }, + "PolyFlexPLA": { + "filename": "/Users/i.paschal/Library/Application Support/cura/3.2/cache/cura_packages/PolyFlexPLA.curapackage", + "package_info": { + "package_id": "PolyFlexPLA", + "package_type": "material", + "display_name": "PolyFlex™ PLA", + "description": "PolyFlex™ is a highly flexible yet easy to print 3D printing material. Featuring good elasticity and a large strain-to- failure, PolyFlex™ opens up a completely new realm of applications.", + "package_version": "1.0.0", + "cura_version": 4, + "website": "http://www.polymaker.com/shop/polyflex/", + "author": { + "author_id": "Polymaker", + "display_name": "Polymaker L.L.C.", + "email": "inquiry@polymaker.com", + "website": "https://www.polymaker.com" + } + } + }, + "PolyMaxPLA": { + "filename": "/Users/i.paschal/Library/Application Support/cura/3.2/cache/cura_packages/PolyMaxPLA.curapackage", + "package_info": { + "package_id": "PolyMaxPLA", + "package_type": "material", + "display_name": "PolyMax™ PLA", + "description": "PolyMax™ PLA is a 3D printing material with excellent mechanical properties and printing quality. PolyMax™ PLA has an impact resistance of up to nine times that of regular PLA, and better overall mechanical properties than ABS.", + "package_version": "1.0.0", + "cura_version": 4, + "website": "http://www.polymaker.com/shop/polymax/", + "author": { + "author_id": "Polymaker", + "display_name": "Polymaker L.L.C.", + "email": "inquiry@polymaker.com", + "website": "https://www.polymaker.com" + } + } + }, + "PolyPlusPLA": { + "filename": "/Users/i.paschal/Library/Application Support/cura/3.2/cache/cura_packages/PolyPlusPLA.curapackage", + "package_info": { + "package_id": "PolyPlusPLA", + "package_type": "material", + "display_name": "PolyPlus™ PLA True Colour", + "description": "PolyPlus™ PLA is a premium PLA designed for all desktop FDM/FFF 3D printers. It is produced with our patented Jam-Free™ technology that ensures consistent extrusion and prevents jams.", + "package_version": "1.0.0", + "cura_version": 4, + "website": "http://www.polymaker.com/shop/polyplus-true-colour/", + "author": { + "author_id": "Polymaker", + "display_name": "Polymaker L.L.C.", + "email": "inquiry@polymaker.com", + "website": "https://www.polymaker.com" + } + } + }, + "PolyWoodPLA": { + "filename": "/Users/i.paschal/Library/Application Support/cura/3.2/cache/cura_packages/PolyWoodPLA.curapackage", + "package_info": { + "package_id": "PolyWoodPLA", + "package_type": "material", + "display_name": "PolyWood™ PLA", + "description": "PolyWood™ is a wood mimic printing material that contains no actual wood ensuring a clean Jam-Free™ printing experience.", + "package_version": "1.0.0", + "cura_version": 4, + "website": "http://www.polymaker.com/shop/polywood/", + "author": { + "author_id": "Polymaker", + "display_name": "Polymaker L.L.C.", + "email": "inquiry@polymaker.com", + "website": "https://www.polymaker.com" + } + } + }, + "UltimakerABS": { + "filename": "/Users/i.paschal/Library/Application Support/cura/3.2/cache/cura_packages/UltimakerABS.curapackage", + "package_info": { + "package_id": "UltimakerABS", + "package_type": "material", + "display_name": "Ultimaker ABS", + "description": "Example package for material and quality profiles for Ultimaker materials.", + "package_version": "1.0.0", + "cura_version": 4, + "website": "https://ultimaker.com/products/materials/abs", + "author": { + "author_id": "Ultimaker", + "display_name": "Ultimaker B.V.", + "email": "materials@ultimaker.com", + "website": "https://ultimaker.com", + "description": "Professional 3D printing made accessible.", + "support_website": "https://ultimaker.com/en/resources/troubleshooting/materials" + } + } + }, + "UltimakerCPE": { + "filename": "/Users/i.paschal/Library/Application Support/cura/3.2/cache/cura_packages/UltimakerCPE.curapackage", + "package_info": { + "package_id": "UltimakerCPE", + "package_type": "material", + "display_name": "Ultimaker CPE", + "description": "Example package for material and quality profiles for Ultimaker materials.", + "package_version": "1.0.0", + "cura_version": 4, + "website": "https://ultimaker.com/products/materials/abs", + "author": { + "author_id": "Ultimaker", + "display_name": "Ultimaker B.V.", + "email": "materials@ultimaker.com", + "website": "https://ultimaker.com", + "description": "Professional 3D printing made accessible.", + "support_website": "https://ultimaker.com/en/resources/troubleshooting/materials" + } + } + }, + "UltimakerNylon": { + "filename": "/Users/i.paschal/Library/Application Support/cura/3.2/cache/cura_packages/UltimakerNylon.curapackage", + "package_info": { + "package_id": "UltimakerNylon", + "package_type": "material", + "display_name": "Ultimaker Nylon", + "description": "Example package for material and quality profiles for Ultimaker materials.", + "package_version": "1.0.0", + "cura_version": 4, + "website": "https://ultimaker.com/products/materials/abs", + "author": { + "author_id": "Ultimaker", + "display_name": "Ultimaker B.V.", + "email": "materials@ultimaker.com", + "website": "https://ultimaker.com", + "description": "Professional 3D printing made accessible.", + "support_website": "https://ultimaker.com/en/resources/troubleshooting/materials" + } + } + }, + "UltimakerPLA": { + "filename": "/Users/i.paschal/Library/Application Support/cura/3.2/cache/cura_packages/UltimakerPLA.curapackage", + "package_info": { + "package_id": "UltimakerPLA", + "package_type": "material", + "display_name": "Ultimaker PLA", + "description": "Example package for material and quality profiles for Ultimaker materials.", + "package_version": "1.0.0", + "cura_version": 4, + "website": "https://ultimaker.com/products/materials/abs", + "author": { + "author_id": "Ultimaker", + "display_name": "Ultimaker B.V.", + "email": "materials@ultimaker.com", + "website": "https://ultimaker.com", + "description": "Professional 3D printing made accessible.", + "support_website": "https://ultimaker.com/en/resources/troubleshooting/materials" + } + } + }, + "UltimakerPVA": { + "filename": "/Users/i.paschal/Library/Application Support/cura/3.2/cache/cura_packages/UltimakerPVA.curapackage", + "package_info": { + "package_id": "UltimakerPVA", + "package_type": "material", + "display_name": "Ultimaker PVA", + "description": "Example package for material and quality profiles for Ultimaker materials.", + "package_version": "1.0.0", + "cura_version": 4, + "website": "https://ultimaker.com/products/materials/abs", + "author": { + "author_id": "Ultimaker", + "display_name": "Ultimaker B.V.", + "email": "materials@ultimaker.com", + "website": "https://ultimaker.com", + "description": "Professional 3D printing made accessible.", + "support_website": "https://ultimaker.com/en/resources/troubleshooting/materials" + } + } + }, + "VertexDeltaABS": { + "filename": "/Users/i.paschal/Library/Application Support/cura/3.2/cache/cura_packages/VertexDeltaABS.curapackage", + "package_info": { + "package_id": "VertexDeltaABS", + "package_type": "material", + "display_name": "Vertex Delta ABS", + "description": "ABS material and quality files for the Delta Vertex K8800.", + "package_version": "1.0.0", + "cura_version": 4, + "website": "https://vertex3dprinter.eu", + "author": { + "author_id": "Velleman", + "display_name": "Velleman N.V.", + "email": "info@velleman.eu", + "website": "https://www.vellemanprojects.eu" + } + } + }, + "VertexDeltaPET": { + "filename": "/Users/i.paschal/Library/Application Support/cura/3.2/cache/cura_packages/VertexDeltaPET.curapackage", + "package_info": { + "package_id": "VertexDeltaPET", + "package_type": "material", + "display_name": "Vertex Delta PET", + "description": "ABS material and quality files for the Delta Vertex K8800.", + "package_version": "1.0.0", + "cura_version": 4, + "website": "https://vertex3dprinter.eu", + "author": { + "author_id": "Velleman", + "display_name": "Velleman N.V.", + "email": "info@velleman.eu", + "website": "https://www.vellemanprojects.eu" + } + } + }, + "VertexDeltaPLA": { + "filename": "/Users/i.paschal/Library/Application Support/cura/3.2/cache/cura_packages/VertexDeltaPLA.curapackage", + "package_info": { + "package_id": "VertexDeltaPLA", + "package_type": "material", + "display_name": "Vertex Delta PLA", + "description": "ABS material and quality files for the Delta Vertex K8800.", + "package_version": "1.0.0", + "cura_version": 4, + "website": "https://vertex3dprinter.eu", + "author": { + "author_id": "Velleman", + "display_name": "Velleman N.V.", + "email": "info@velleman.eu", + "website": "https://www.vellemanprojects.eu" + } + } + }, + "VertexDeltaTPU": { + "filename": "/Users/i.paschal/Library/Application Support/cura/3.2/cache/cura_packages/VertexDeltaTPU.curapackage", + "package_info": { + "package_id": "VertexDeltaTPU", + "package_type": "material", + "display_name": "Vertex Delta TPU", + "description": "ABS material and quality files for the Delta Vertex K8800.", + "package_version": "1.0.0", + "cura_version": 4, + "website": "https://vertex3dprinter.eu", + "author": { + "author_id": "Velleman", + "display_name": "Velleman N.V.", + "email": "info@velleman.eu", + "website": "https://www.vellemanprojects.eu" + } + } + } +} \ No newline at end of file From 4b931326fd42c2f1c3c622a4447a338b5a187ee5 Mon Sep 17 00:00:00 2001 From: Ian Paschal Date: Tue, 8 May 2018 15:04:19 +0200 Subject: [PATCH 4/8] CURA-5296 Set packages version with super secret method --- plugins/Toolbox/src/Toolbox.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/plugins/Toolbox/src/Toolbox.py b/plugins/Toolbox/src/Toolbox.py index 0451494d14..1b2d0f5cfc 100644 --- a/plugins/Toolbox/src/Toolbox.py +++ b/plugins/Toolbox/src/Toolbox.py @@ -18,6 +18,7 @@ from UM.Extension import Extension from UM.i18n import i18nCatalog from UM.Version import Version +import cura.CuraVersion from cura.CuraApplication import CuraApplication from .AuthorsModel import AuthorsModel from .PackagesModel import PackagesModel @@ -34,7 +35,7 @@ class Toolbox(QObject, Extension): self._application = Application.getInstance() self._package_manager = None self._plugin_registry = Application.getInstance().getPluginRegistry() - self._packages_version = self._plugin_registry.APIVersion + self._packages_version = cura.CuraVersion.CuraPackagesVersion if hasattr(cura.CuraVersion, "CuraPackagesVersion") else self._plugin_registry.APIVersion # type:ignore 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) From 0561c66e4720ba3f06ce07da2f461a181be66ba4 Mon Sep 17 00:00:00 2001 From: Ian Paschal Date: Tue, 8 May 2018 15:38:18 +0200 Subject: [PATCH 5/8] CURA-5096 Remove unused leftovers --- resources/packages.json | 23 ----------------------- 1 file changed, 23 deletions(-) diff --git a/resources/packages.json b/resources/packages.json index 0b03bdd0d7..fb5da42fa7 100644 --- a/resources/packages.json +++ b/resources/packages.json @@ -731,7 +731,6 @@ } }, "DagomaChromatikPLA": { - "filename": "/Users/i.paschal/Library/Application Support/cura/3.2/cache/cura_packages/DagomaChromatikPLA.curapackage", "package_info": { "package_id": "DagomaChromatikPLA", "package_type": "material", @@ -749,7 +748,6 @@ } }, "FABtotumABS": { - "filename": "/Users/i.paschal/Library/Application Support/cura/3.2/cache/cura_packages/FABtotumABS.curapackage", "package_info": { "package_id": "FABtotumABS", "package_type": "material", @@ -767,7 +765,6 @@ } }, "FABtotumNylon": { - "filename": "/Users/i.paschal/Library/Application Support/cura/3.2/cache/cura_packages/FABtotumNylon.curapackage", "package_info": { "package_id": "FABtotumNylon", "package_type": "material", @@ -785,7 +782,6 @@ } }, "FABtotumPLA": { - "filename": "/Users/i.paschal/Library/Application Support/cura/3.2/cache/cura_packages/FABtotumPLA.curapackage", "package_info": { "package_id": "FABtotumPLA", "package_type": "material", @@ -803,7 +799,6 @@ } }, "FABtotumTPU": { - "filename": "/Users/i.paschal/Library/Application Support/cura/3.2/cache/cura_packages/FABtotumTPU.curapackage", "package_info": { "package_id": "FABtotumTPU", "package_type": "material", @@ -821,7 +816,6 @@ } }, "FiberlogyHDPLA": { - "filename": "/Users/i.paschal/Library/Application Support/cura/3.2/cache/cura_packages/FiberlogyHDPLA.curapackage", "package_info": { "package_id": "FiberlogyHDPLA", "package_type": "material", @@ -839,7 +833,6 @@ } }, "Filo3DPLA": { - "filename": "/Users/i.paschal/Library/Application Support/cura/3.2/cache/cura_packages/Filo3DPLA.curapackage", "package_info": { "package_id": "Filo3DPLA", "package_type": "material", @@ -857,7 +850,6 @@ } }, "IMADE3DJellyBOXPETG": { - "filename": "/Users/i.paschal/Library/Application Support/cura/3.2/cache/cura_packages/IMADE3DJellyBOXPETG.curapackage", "package_info": { "package_id": "IMADE3DJellyBOXPETG", "package_type": "material", @@ -875,7 +867,6 @@ } }, "IMADE3DJellyBOXPLA": { - "filename": "/Users/i.paschal/Library/Application Support/cura/3.2/cache/cura_packages/IMADE3DJellyBOXPLA.curapackage", "package_info": { "package_id": "IMADE3DJellyBOXPLA", "package_type": "material", @@ -893,7 +884,6 @@ } }, "OctofiberPLA": { - "filename": "/Users/i.paschal/Library/Application Support/cura/3.2/cache/cura_packages/OctoFiberPLA.curapackage", "package_info": { "package_id": "OctofiberPLA", "package_type": "material", @@ -911,7 +901,6 @@ } }, "PolyFlexPLA": { - "filename": "/Users/i.paschal/Library/Application Support/cura/3.2/cache/cura_packages/PolyFlexPLA.curapackage", "package_info": { "package_id": "PolyFlexPLA", "package_type": "material", @@ -929,7 +918,6 @@ } }, "PolyMaxPLA": { - "filename": "/Users/i.paschal/Library/Application Support/cura/3.2/cache/cura_packages/PolyMaxPLA.curapackage", "package_info": { "package_id": "PolyMaxPLA", "package_type": "material", @@ -947,7 +935,6 @@ } }, "PolyPlusPLA": { - "filename": "/Users/i.paschal/Library/Application Support/cura/3.2/cache/cura_packages/PolyPlusPLA.curapackage", "package_info": { "package_id": "PolyPlusPLA", "package_type": "material", @@ -965,7 +952,6 @@ } }, "PolyWoodPLA": { - "filename": "/Users/i.paschal/Library/Application Support/cura/3.2/cache/cura_packages/PolyWoodPLA.curapackage", "package_info": { "package_id": "PolyWoodPLA", "package_type": "material", @@ -983,7 +969,6 @@ } }, "UltimakerABS": { - "filename": "/Users/i.paschal/Library/Application Support/cura/3.2/cache/cura_packages/UltimakerABS.curapackage", "package_info": { "package_id": "UltimakerABS", "package_type": "material", @@ -1003,7 +988,6 @@ } }, "UltimakerCPE": { - "filename": "/Users/i.paschal/Library/Application Support/cura/3.2/cache/cura_packages/UltimakerCPE.curapackage", "package_info": { "package_id": "UltimakerCPE", "package_type": "material", @@ -1023,7 +1007,6 @@ } }, "UltimakerNylon": { - "filename": "/Users/i.paschal/Library/Application Support/cura/3.2/cache/cura_packages/UltimakerNylon.curapackage", "package_info": { "package_id": "UltimakerNylon", "package_type": "material", @@ -1043,7 +1026,6 @@ } }, "UltimakerPLA": { - "filename": "/Users/i.paschal/Library/Application Support/cura/3.2/cache/cura_packages/UltimakerPLA.curapackage", "package_info": { "package_id": "UltimakerPLA", "package_type": "material", @@ -1063,7 +1045,6 @@ } }, "UltimakerPVA": { - "filename": "/Users/i.paschal/Library/Application Support/cura/3.2/cache/cura_packages/UltimakerPVA.curapackage", "package_info": { "package_id": "UltimakerPVA", "package_type": "material", @@ -1083,7 +1064,6 @@ } }, "VertexDeltaABS": { - "filename": "/Users/i.paschal/Library/Application Support/cura/3.2/cache/cura_packages/VertexDeltaABS.curapackage", "package_info": { "package_id": "VertexDeltaABS", "package_type": "material", @@ -1101,7 +1081,6 @@ } }, "VertexDeltaPET": { - "filename": "/Users/i.paschal/Library/Application Support/cura/3.2/cache/cura_packages/VertexDeltaPET.curapackage", "package_info": { "package_id": "VertexDeltaPET", "package_type": "material", @@ -1119,7 +1098,6 @@ } }, "VertexDeltaPLA": { - "filename": "/Users/i.paschal/Library/Application Support/cura/3.2/cache/cura_packages/VertexDeltaPLA.curapackage", "package_info": { "package_id": "VertexDeltaPLA", "package_type": "material", @@ -1137,7 +1115,6 @@ } }, "VertexDeltaTPU": { - "filename": "/Users/i.paschal/Library/Application Support/cura/3.2/cache/cura_packages/VertexDeltaTPU.curapackage", "package_info": { "package_id": "VertexDeltaTPU", "package_type": "material", From db15b1c2a1ac11d798d3b8641ee4642bbc7e5dfe Mon Sep 17 00:00:00 2001 From: Ian Paschal Date: Tue, 8 May 2018 16:28:28 +0200 Subject: [PATCH 6/8] CURA-5296 Fix packages.json path --- cura/CuraPackageManager.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cura/CuraPackageManager.py b/cura/CuraPackageManager.py index 0e1d235555..b3a1451e6b 100644 --- a/cura/CuraPackageManager.py +++ b/cura/CuraPackageManager.py @@ -30,8 +30,8 @@ class CuraPackageManager(QObject): # JSON file that keeps track of all installed packages. self._bundled_package_management_file_path = os.path.join( - Application.getInstallPrefix(), - Application.getInstance().getApplicationName(), + os.path.dirname(os.path.abspath(__file__)), + "..", "resources", "packages.json" ) From d6ad8ed09e89fd7d7f49f096004b700ad6fe1b6b Mon Sep 17 00:00:00 2001 From: Ian Paschal Date: Tue, 8 May 2018 16:52:09 +0200 Subject: [PATCH 7/8] CURA-5296 Move installed plugins to "installed" dict --- cura/CuraPackageManager.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/cura/CuraPackageManager.py b/cura/CuraPackageManager.py index b3a1451e6b..0a59dac677 100644 --- a/cura/CuraPackageManager.py +++ b/cura/CuraPackageManager.py @@ -35,8 +35,10 @@ class CuraPackageManager(QObject): "resources", "packages.json" ) - self._user_package_management_file_path = os.path.join(os.path.abspath(Resources.getDataStoragePath()), "packages.json") - + self._user_package_management_file_path = os.path.join( + os.path.abspath(Resources.getDataStoragePath()), + "packages.json" + ) self._bundled_package_dict = {} # A dict of all bundled packages self._installed_package_dict = {} # A dict of all installed packages @@ -100,6 +102,8 @@ class CuraPackageManager(QObject): def _installAllScheduledPackages(self) -> None: for package_id, installation_package_data in self._to_install_package_dict.items(): self._installPackage(installation_package_data) + self._installed_package_dict[package_id] = self._to_install_package_dict[package_id] + self._saveManagementData() self._to_install_package_dict.clear() self._saveManagementData() From 4a78825f554b01984decf42a4d18996686df3823 Mon Sep 17 00:00:00 2001 From: Ian Paschal Date: Tue, 8 May 2018 17:03:09 +0200 Subject: [PATCH 8/8] CURA-5296 Delete package info individually --- cura/CuraPackageManager.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/cura/CuraPackageManager.py b/cura/CuraPackageManager.py index 0a59dac677..d93631b63a 100644 --- a/cura/CuraPackageManager.py +++ b/cura/CuraPackageManager.py @@ -100,12 +100,13 @@ class CuraPackageManager(QObject): # (for initialize) Installs all packages that have been scheduled to be installed. def _installAllScheduledPackages(self) -> None: - for package_id, installation_package_data in self._to_install_package_dict.items(): - self._installPackage(installation_package_data) + + while self._to_install_package_dict: + package_id, package_info = list(self._to_install_package_dict.items())[0] + self._installPackage(package_info) self._installed_package_dict[package_id] = self._to_install_package_dict[package_id] + del self._to_install_package_dict[package_id] self._saveManagementData() - self._to_install_package_dict.clear() - self._saveManagementData() # Checks the given package is installed. If so, return a dictionary that contains the package's information. def getInstalledPackageInfo(self, package_id: str) -> Optional[dict]: