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:17:03 -06:00
parent 7de25e8c37
commit 0c85c16932
6 changed files with 81 additions and 6 deletions

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;