Addon Manager: Check for requires newer FreeCAD
This commit is contained in:
@@ -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">
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user