@@ -184,10 +184,10 @@ void QgsPluginRegistry::unloadAll()
184
184
}
185
185
186
186
187
- bool QgsPluginRegistry::checkQgisVersion ( QString minVersion )
187
+ bool QgsPluginRegistry::checkQgisVersion ( QString minVersion, QString maxVersion )
188
188
{
189
+ // Parse qgisMinVersion. Must be in form x.y.z or just x.y
189
190
QStringList minVersionParts = minVersion.split ( ' .' );
190
- // qgis version must be in form x.y.z or just x.y
191
191
if ( minVersionParts.count () != 2 && minVersionParts.count () != 3 )
192
192
return false ;
193
193
@@ -206,6 +206,35 @@ bool QgsPluginRegistry::checkQgisVersion( QString minVersion )
206
206
return false ;
207
207
}
208
208
209
+ // Parse qgisMaxVersion. Must be in form x.y.z or just x.y
210
+ int maxVerMajor, maxVerMinor, maxVerBugfix = 0 ;
211
+ if ( maxVersion.isEmpty () || maxVersion == " __error__" )
212
+ {
213
+ maxVerMajor = minVerMajor;
214
+ maxVerMinor = 999 ;
215
+ maxVerBugfix = 999 ;
216
+ }
217
+ else
218
+ {
219
+ QStringList maxVersionParts = maxVersion.split ( ' .' );
220
+ if ( maxVersionParts.count () != 2 && maxVersionParts.count () != 3 )
221
+ return false ;
222
+
223
+ bool ok;
224
+ maxVerMajor = maxVersionParts.at ( 0 ).toInt ( &ok );
225
+ if ( !ok )
226
+ return false ;
227
+ maxVerMinor = maxVersionParts.at ( 1 ).toInt ( &ok );
228
+ if ( !ok )
229
+ return false ;
230
+ if ( maxVersionParts.count () == 3 )
231
+ {
232
+ maxVerBugfix = maxVersionParts.at ( 2 ).toInt ( &ok );
233
+ if ( !ok )
234
+ return false ;
235
+ }
236
+ }
237
+
209
238
// our qgis version - cut release name after version number
210
239
QString qgisVersion = QString ( QGis::QGIS_VERSION ).section ( ' -' , 0 , 0 );
211
240
QStringList qgisVersionParts = qgisVersion.split ( " ." );
@@ -215,21 +244,21 @@ bool QgsPluginRegistry::checkQgisVersion( QString minVersion )
215
244
int qgisBugfix = qgisVersionParts.at ( 2 ).toInt ();
216
245
217
246
// first check major version
218
- if ( minVerMajor > qgisMajor )
247
+ if ( minVerMajor > qgisMajor || maxVerMajor < qgisMajor )
219
248
return false ;
220
- if ( minVerMajor < qgisMajor )
249
+ if ( minVerMajor < qgisMajor || maxVerMajor > qgisMajor )
221
250
return true ;
222
251
// if same, check minor version
223
- if ( minVerMinor > qgisMinor )
252
+ if ( minVerMinor > qgisMinor || maxVerMinor < qgisMinor )
224
253
return false ;
225
- if ( minVerMinor < qgisMinor )
254
+ if ( minVerMinor < qgisMinor || maxVerMinor > qgisMinor )
226
255
return true ;
227
256
228
- // if still same, check bugfix version
257
+ // if still same, check bugfix version (lower range only)
229
258
if ( minVerBugfix > qgisBugfix )
230
259
return false ;
231
260
232
- // looks like min version is the same as our version - that's fine
261
+ // looks like min or max version is the same as our version - that's fine
233
262
return true ;
234
263
}
235
264
@@ -562,7 +591,9 @@ bool QgsPluginRegistry::checkPythonPlugin( QString packageName )
562
591
bool QgsPluginRegistry::isPythonPluginCompatible ( QString packageName )
563
592
{
564
593
QString minVersion = mPythonUtils ->getPluginMetadata ( packageName, " qgisMinimumVersion" );
565
- return minVersion != " __error__" && checkQgisVersion ( minVersion );
594
+ // try to read qgisMaximumVersion. Note checkQgisVersion can cope with "__error__" value.
595
+ QString maxVersion = mPythonUtils ->getPluginMetadata ( packageName, " qgisMaximumVersion" );
596
+ return minVersion != " __error__" && checkQgisVersion ( minVersion, maxVersion );
566
597
}
567
598
568
599
QList<QgsPluginMetadata*> QgsPluginRegistry::pluginData ()
0 commit comments