diff --git a/plugins/Toolbox/resources/qml/dialogs/CompatibilityDialog.qml b/plugins/Toolbox/resources/qml/dialogs/CompatibilityDialog.qml index 93945871a3..c2cc1ce4d6 100644 --- a/plugins/Toolbox/resources/qml/dialogs/CompatibilityDialog.qml +++ b/plugins/Toolbox/resources/qml/dialogs/CompatibilityDialog.qml @@ -74,7 +74,7 @@ UM.Dialog{ } Label { - text: model.name + text: model.display_name font: UM.Theme.getFont("medium_bold") anchors.left: packageIcon.right anchors.leftMargin: UM.Theme.getSize("default_margin").width @@ -117,8 +117,7 @@ UM.Dialog{ } Label { - id: packageName - text: model.name + text: model.display_name font: UM.Theme.getFont("medium_bold") anchors.left: packageIcon.right anchors.leftMargin: UM.Theme.getSize("default_margin").width @@ -129,7 +128,6 @@ UM.Dialog{ Label { - id: dismissLabel text: "(Dismiss)" font: UM.Theme.getFont("small") anchors.right: parent.right diff --git a/plugins/Toolbox/src/SubscribedPackagesModel.py b/plugins/Toolbox/src/SubscribedPackagesModel.py index d2ed486de2..acbf4c13f7 100644 --- a/plugins/Toolbox/src/SubscribedPackagesModel.py +++ b/plugins/Toolbox/src/SubscribedPackagesModel.py @@ -4,10 +4,8 @@ from PyQt5.QtCore import Qt from UM.Qt.ListModel import ListModel from cura import ApplicationMetadata - -from PyQt5.QtCore import pyqtSlot - from UM.Logger import Logger +from typing import List class SubscribedPackagesModel(ListModel): @@ -19,32 +17,30 @@ class SubscribedPackagesModel(ListModel): self._discrepancies = None self._sdk_version = ApplicationMetadata.CuraSDKVersion - self.addRoleName(Qt.UserRole + 1, "name") - self.addRoleName(Qt.UserRole + 2, "icon_url") - self.addRoleName(Qt.UserRole + 3, "is_compatible") - self.addRoleName(Qt.UserRole + 4, "is_dismissed") - self.addRoleName(Qt.UserRole + 5, "package_id") + self.addRoleName(Qt.UserRole + 1, "package_id") + self.addRoleName(Qt.UserRole + 2, "display_name") + self.addRoleName(Qt.UserRole + 3, "icon_url") + self.addRoleName(Qt.UserRole + 4, "is_compatible") + self.addRoleName(Qt.UserRole + 5, "is_dismissed") - - def setMetadata(self, data): + def setMetadata(self, data) -> None: if self._metadata != data: self._metadata = data - def addValue(self, discrepancy): + def addDiscrepancies(self, discrepancy: List[str]) -> None: if self._discrepancies != discrepancy: self._discrepancies = discrepancy - def update(self): + def initialize(self) -> None: self._items.clear() for item in self._metadata: if item["package_id"] not in self._discrepancies: continue - package = {"package_id": item["package_id"], - "name": item["display_name"], - "sdk_versions": item["sdk_versions"], - "is_dismissed": False - } + package = {"package_id": item["package_id"], + "display_name": item["display_name"], + "sdk_versions": item["sdk_versions"], + "is_dismissed": False} if self._sdk_version not in item["sdk_versions"]: package.update({"is_compatible": False}) else: @@ -57,7 +53,6 @@ class SubscribedPackagesModel(ListModel): self._items.append(package) self.setItems(self._items) - def hasCompatiblePackages(self) -> bool: has_compatible_items = False for item in self._items: @@ -72,14 +67,16 @@ class SubscribedPackagesModel(ListModel): has_incompatible_items = True return has_incompatible_items - def setDismiss(self, package_id) -> None: - package_id_in_list_of_items = self.find(key="package_id", value=package_id) - if package_id_in_list_of_items != -1: - self.setProperty(package_id_in_list_of_items, property="is_dismissed", value=True) + # Sets the "is_compatible" to True for the given package, in memory + def dismissPackage(self, package_id: str) -> None: + package = self.find(key="package_id", value=package_id) + if package != -1: + self.setProperty(package, property="is_dismissed", value=True) Logger.debug("Package {} has been dismissed".format(package_id)) - def addDismissed(self, list_of_dismissed) -> None: - for package in list_of_dismissed: - item = self.find(key="package_id", value=package) - if item != -1: - self.setProperty(item, property="is_dismissed", value=True) + # Reads the dismissed_packages from user config file and applies them so they won't be shown in the Compatibility Dialog + def applyDismissedPackages(self, dismissed_packages: List[str]) -> None: + for package in dismissed_packages: + exists = self.find(key="package_id", value=package) + if exists != -1: + self.setProperty(exists, property="is_dismissed", value=True) diff --git a/plugins/Toolbox/src/Toolbox.py b/plugins/Toolbox/src/Toolbox.py index f12cc3ba3d..eaaf8d94e9 100644 --- a/plugins/Toolbox/src/Toolbox.py +++ b/plugins/Toolbox/src/Toolbox.py @@ -557,9 +557,9 @@ class Toolbox(QObject, Extension): return populated == len(self._server_response_data.items()) @pyqtSlot(str) - def dismissIncompatiblePackage(self, package_id): - self._models["subscribed_packages"].setDismiss(package_id) - self._package_manager.setAsDismissed(package_id) + def dismissIncompatiblePackage(self, package_id: str): + self._models["subscribed_packages"].dismissPackage(package_id) # sets "is_compatible" to True, in-memory + self._package_manager.dismissPackage(package_id) # adds this package_id as dismissed in the user config file # Make API Calls # -------------------------------------------------------------------------- @@ -668,17 +668,15 @@ class Toolbox(QObject, Extension): def _checkCompatibilities(self, json_data) -> None: user_subscribed_packages = [plugin["package_id"] for plugin in json_data] user_installed_packages = self._package_manager.getUserInstalledPackages() - user_dismissed_packages = list(self._package_manager.getDismissedPackages()) - - user_installed_packages += user_dismissed_packages - - # We check if there are packages installed in Cloud Marketplace but not in Cura marketplace (discrepancy) + user_dismissed_packages = self._package_manager.getDismissedPackages() + if user_dismissed_packages: + user_installed_packages += user_dismissed_packages + # We check if there are packages installed in Cloud Marketplace but not in Cura marketplace package_discrepancy = list(set(user_subscribed_packages).difference(user_installed_packages)) - if package_discrepancy: - self._models["subscribed_packages"].addValue(package_discrepancy) - self._models["subscribed_packages"].update() - self._models["subscribed_packages"].addDismissed(user_dismissed_packages) + self._models["subscribed_packages"].addDiscrepancies(package_discrepancy) + self._models["subscribed_packages"].initialize() + self._models["subscribed_packages"].applyDismissedPackages(user_dismissed_packages) Logger.log("d", "Discrepancy found between Cloud subscribed packages and Cura installed packages") sync_message = Message(i18n_catalog.i18nc( "@info:generic",