Core: Support disabling Addon by FreeCAD version

If package.xml metadata file exists, it is scanned for FreeCAD version
compatibility before the Addon is loaded. If the Addon specifies that it is
explicitly not compatible with the current version of FreeCAD, the Addon is
not loaded.
This commit is contained in:
Chris Hennes
2022-03-08 23:19:04 -06:00
parent 907ef395f4
commit f122061424
6 changed files with 81 additions and 6 deletions
+17 -2
View File
@@ -318,8 +318,11 @@ void MetadataPy::setFreeCADMax(Py::Object args)
getMetadataPtr()->setFreeCADMax(App::Meta::Version(version));
}
PyObject* MetadataPy::getFirstSupportedFreeCADVersion(PyObject*)
PyObject* MetadataPy::getFirstSupportedFreeCADVersion(PyObject* p)
{
if (!PyArg_ParseTuple(p, ""))
return nullptr;
// Short-circuit: if the toplevel sets a version, then the lower-levels are overridden
if (getMetadataPtr()->freecadmin() != App::Meta::Version())
return Py::new_reference_to(Py::String(getMetadataPtr()->freecadmin().str()));
@@ -341,8 +344,11 @@ PyObject* MetadataPy::getFirstSupportedFreeCADVersion(PyObject*)
}
}
PyObject* MetadataPy::getLastSupportedFreeCADVersion(PyObject*)
PyObject* MetadataPy::getLastSupportedFreeCADVersion(PyObject* p)
{
if (!PyArg_ParseTuple(p, ""))
return nullptr;
// Short-circuit: if the toplevel sets a version, then the lower-levels are overridden
if (getMetadataPtr()->freecadmax() != App::Meta::Version())
return Py::new_reference_to(Py::String(getMetadataPtr()->freecadmax().str()));
@@ -364,6 +370,15 @@ PyObject* MetadataPy::getLastSupportedFreeCADVersion(PyObject*)
}
}
PyObject* MetadataPy::supportsCurrentFreeCAD(PyObject* p)
{
if (!PyArg_ParseTuple(p, ""))
return nullptr;
bool result = getMetadataPtr()->supportsCurrentFreeCAD();
return Py::new_reference_to(Py::Boolean(result));
}
PyObject* MetadataPy::getCustomAttributes(const char* /*attr*/) const
{
return 0;