diff --git a/plugins/Marketplace/LocalPackageList.py b/plugins/Marketplace/LocalPackageList.py index 5b3c05609e..a1f3f45e7e 100644 --- a/plugins/Marketplace/LocalPackageList.py +++ b/plugins/Marketplace/LocalPackageList.py @@ -58,12 +58,14 @@ class LocalPackageList(PackageList): def _makePackageModel(self, package_info: Dict[str, Any]) -> PackageModel: """ Create a PackageModel from the package_info and determine its section_title""" - bundled_or_installed = "bundled" if self._manager.isBundledPackage(package_info["package_id"]) else "installed" + package_id = package_info["package_id"] + bundled_or_installed = "bundled" if self._manager.isBundledPackage(package_id) else "installed" package_type = package_info["package_type"] section_title = self.PACKAGE_CATEGORIES[bundled_or_installed][package_type] package = PackageModel(package_info, section_title = section_title, parent = self) - if package_info["package_id"] in self._manager.getPackagesToRemove() or package_info["package_id"] in self._manager.getPackagesToInstall(): + if package_id in self._manager.getPackagesToRemove() or package_id in self._manager.getPackagesToInstall(): package.is_recently_managed = True + package.can_downgrade = self._manager.canDowngrade(package_id) self._connectManageButtonSignals(package) return package diff --git a/plugins/Marketplace/PackageModel.py b/plugins/Marketplace/PackageModel.py index 5251f03524..92daf310a3 100644 --- a/plugins/Marketplace/PackageModel.py +++ b/plugins/Marketplace/PackageModel.py @@ -66,6 +66,7 @@ class PackageModel(QObject): self._can_update = False self._is_updating = False self._is_enabling = False + self._can_downgrade = False self._section_title = section_title self.sdk_version = package_data.get("sdk_version_semver", "") # Note that there's a lot more info in the package_data than just these specified here. @@ -323,7 +324,7 @@ class PackageModel(QObject): if self._is_recently_managed: return "hidden" if self._is_installed: - if self._is_bundled: + if self._is_bundled and not self._can_downgrade: return "hidden" else: return "secondary" @@ -350,6 +351,16 @@ class PackageModel(QObject): self._is_installing = value self.stateManageButtonChanged.emit() + @property + def can_downgrade(self) -> bool: + return self._can_downgrade + + @can_downgrade.setter + def can_downgrade(self, value: bool) -> None: + if value != self._can_downgrade: + self._can_downgrade = value + self.stateManageButtonChanged.emit() + # --- Updating --- @pyqtProperty(str, notify = stateManageButtonChanged)