2222
2323#include " launcher.h"
2424
25+ #include < QCoreApplication>
2526#include < QPluginLoader>
2627#include < QVersionNumber>
2728
@@ -43,10 +44,12 @@ QObject *Launcher::loadPlugin(const QString &path, const QString &pluginName) {
4344 QPluginLoader pluginLoader (pluginPath, this );
4445
4546 QJsonObject metaData = pluginLoader.metaData ()[" MetaData" ].toObject ();
46- QString pluginIntgLibVersion = metaData[" dependencies" ].toObject ()[" integrations.library" ].toString ();
47+ QJsonObject dependencies = metaData[" dependencies" ].toObject ();
48+ QString pluginIntgLibVersion = dependencies[" integrations.library" ].toString ();
49+ QString requiredMinAppVersion = dependencies[" app" ].toString ();
4750
4851 qCInfo (lcPlugin) << " Loading plugin:" << pluginPath << " version:" << metaData[" version" ].toString ()
49- << " intg.lib:" << pluginIntgLibVersion;
52+ << " intg.lib:" << pluginIntgLibVersion << " min app version: " << requiredMinAppVersion ;
5053
5154 if (pluginIntgLibVersion.isEmpty ()) {
5255 Notifications::getInstance ()->add (true , tr (" Incompatible plugin %1: metadata missing" ).arg (pluginName));
@@ -58,6 +61,12 @@ QObject *Launcher::loadPlugin(const QString &path, const QString &pluginName) {
5861 return nullptr ;
5962 }
6063
64+ if (!isCompatibleAppVersion (requiredMinAppVersion)) {
65+ Notifications::getInstance ()->add (
66+ true , tr (" Plugin %1 requires app version %2 or higher" ).arg (pluginName, requiredMinAppVersion));
67+ return nullptr ;
68+ }
69+
6170 QObject *plugin = pluginLoader.instance ();
6271 if (!plugin) {
6372 qCCritical (lcPlugin) << " Failed to load plugin:" << pluginPath << pluginLoader.errorString ();
@@ -98,6 +107,13 @@ bool Launcher::isCompatibleIntgLibVersion(const QString &pluginIntgLibVersion) {
98107 intgVersionPlugin.minorVersion () == intgVersion.minorVersion ();
99108}
100109
110+ bool Launcher::isCompatibleAppVersion (const QString &requiredMinAppVersion) {
111+ QVersionNumber appVersion = QVersionNumber::fromString (cleanVersionString (QCoreApplication::applicationVersion ()));
112+ QVersionNumber reqMinVersion = QVersionNumber::fromString (cleanVersionString (requiredMinAppVersion));
113+
114+ return QVersionNumber::compare (appVersion, reqMinVersion) >= 0 ;
115+ }
116+
101117QString Launcher::cleanVersionString (const QString &version) {
102118 if (version.startsWith (' v' )) {
103119 return version.mid (1 );
0 commit comments