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

@@ -122,6 +122,22 @@ installed addons will be checked for available updates
</property>
</widget>
</item>
<item>
<widget class="Gui::PrefCheckBox" name="guiprefcheckboxhidenewerfreecadrequired">
<property name="text">
<string>Hide Addons that require a newer version of FreeCAD</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
<property name="prefPath" stdset="0">
<string>Addons</string>
</property>
<property name="prefEntry" stdset="0">
<string>HideNewerFreeCADRequired</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label">
<property name="text">

View File

@@ -35,6 +35,8 @@ from addonmanager_workers import GetMacroDetailsWorker, CheckSingleUpdateWorker
from AddonManagerRepo import AddonManagerRepo
import NetworkManager
from typing import Optional
translate = FreeCAD.Qt.translate
show_javascript_console_output = False
@@ -286,6 +288,7 @@ class PackageDetails(QWidget):
self.ui.buttonUpdate.hide()
self.ui.buttonCheckForUpdate.hide()
required_version = self.requires_newer_freecad()
if repo.obsolete:
self.ui.labelWarningInfo.show()
self.ui.labelWarningInfo.setText(
@@ -306,9 +309,44 @@ class PackageDetails(QWidget):
self.ui.labelWarningInfo.setStyleSheet(
"color:" + utils.warning_color_string()
)
elif required_version:
self.ui.labelWarningInfo.show()
self.ui.labelWarningInfo.setText(
"<h1>"
+ translate("AddonsInstaller", "WARNING: This addon requires FreeCAD ")
+ required_version
+ "</h1>"
)
self.ui.labelWarningInfo.setStyleSheet(
"color:" + utils.warning_color_string()
)
else:
self.ui.labelWarningInfo.hide()
def requires_newer_freecad(self) -> Optional[str]:
# If it's not installed, check to see if it's for a newer version of FreeCAD
if (
self.repo.status() == AddonManagerRepo.UpdateStatus.NOT_INSTALLED
and self.repo.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 = self.repo.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 first_supported_version
elif int(required_version[0]) == fc_major and len(required_version) > 1:
if int(required_version[1]) > fc_minor:
return first_supported_version
return None
def show_workbench(self, repo: AddonManagerRepo) -> None:
"""loads information of a given workbench"""
url = utils.get_readme_html_url(repo)

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