Addon Manager: Check for requires newer FreeCAD

This commit is contained in:
Chris Hennes
2022-02-10 15:25:40 -06:00
parent e8699b1c45
commit ec91c97739
3 changed files with 82 additions and 0 deletions

View File

@@ -102,6 +102,7 @@ class PackageList(QWidget):
self.item_filter.setHidePy2(pref.GetBool("HidePy2", True))
self.item_filter.setHideObsolete(pref.GetBool("HideObsolete", True))
self.item_filter.setHideNewerFreeCADRequired(pref.GetBool("HideNewerFreeCADRequired", True))
def on_listPackages_clicked(self, index: QModelIndex):
source_selection = self.item_filter.mapToSource(index)
@@ -489,6 +490,7 @@ class PackageListFilter(QSortFilterProxyModel):
self.setSortCaseSensitivity(Qt.CaseInsensitive)
self.hide_obsolete = False
self.hide_py2 = False
self.hide_newer_freecad_required = False
def setPackageFilter(
self, type: int
@@ -510,6 +512,10 @@ class PackageListFilter(QSortFilterProxyModel):
self.hide_obsolete = hide_obsolete
self.invalidateFilter()
def setHideNewerFreeCADRequired(self, hide_nfr: bool) -> None:
self.hide_newer_freecad_required = hide_nfr
self.invalidateFilter()
def lessThan(self, left, right) -> bool:
l = self.sourceModel().data(left, PackageListItemModel.DataAccessRole)
r = self.sourceModel().data(right, PackageListItemModel.DataAccessRole)
@@ -555,6 +561,28 @@ class PackageListFilter(QSortFilterProxyModel):
):
return False
# If it's not installed, check to see if it's for a newer version of FreeCAD
if (
data.status() == AddonManagerRepo.UpdateStatus.NOT_INSTALLED
and self.hide_newer_freecad_required
and data.metadata
):
# Only hide if ALL content items require a newer version, otherwise
# it's possible that this package actually provides versions of itself
# for newer and older versions
first_supported_version = data.metadata.getFirstSupportedFreeCADVersion()
if first_supported_version is not None:
required_version = first_supported_version.split(".")
fc_major = int(FreeCAD.Version()[0])
fc_minor = int(FreeCAD.Version()[1])
if int(required_version[0]) > fc_major:
return False
elif int(required_version[0]) == fc_major and len(required_version) > 1:
if int(required_version[1]) > fc_minor:
return False
name = data.display_name
desc = data.description
if hasattr(self, "filterRegularExpression"): # Added in Qt 5.12