@@ -1339,6 +1339,8 @@ String PluginProcessor::findLostPatch(String const& patchPath) const
13391339 }
13401340
13411341 SmallArray<std::pair<File, var>> libraryMetaFiles;
1342+ SmallArray<std::pair<String, File>> candidates;
1343+
13421344 for (auto dir : OSUtils::iterateDirectory (patchesDir, false , false ))
13431345 {
13441346 auto meta = dir.getChildFile (" meta.json" );
@@ -1354,19 +1356,40 @@ String PluginProcessor::findLostPatch(String const& patchPath) const
13541356 for (auto [dir, meta] : libraryMetaFiles)
13551357 {
13561358 if (meta[" Title" ].toString ().toLowerCase ().replace (" " , " -" ) == hashedDirName)
1357- return dir.getChildFile (meta[" Patch" ].toString ()). getFullPathName ( );
1359+ candidates. add ({meta[ " Version " ]. toString (), dir.getChildFile (meta[" Patch" ].toString ())} );
13581360
13591361 if (meta[" Title" ].toString () == dirName)
1360- return dir.getChildFile (meta[" Patch" ].toString ()). getFullPathName ( );
1362+ candidates. add ({meta[ " Version " ]. toString (), dir.getChildFile (meta[" Patch" ].toString ())} );
13611363 }
13621364
13631365 // Last resort, find a patch with a matching name
13641366 for (auto [dir, meta] : libraryMetaFiles)
13651367 {
13661368 if (meta[" Patch" ].toString () == patchName)
1367- return dir.getChildFile (meta[" Patch" ].toString ()).getFullPathName ();
1369+ candidates.add ({meta[" Version" ].toString (), dir.getChildFile (meta[" Patch" ].toString ()).getFullPathName ()});
1370+ }
1371+
1372+ if (candidates.size ()) {
1373+ candidates.sort ([](std::pair<String, File> const & versionA, std::pair<String, File> const & versionB) -> bool {
1374+ auto versionTokensA = StringArray::fromTokens (versionA.first , " ." , " " );
1375+ auto versionTokensB = StringArray::fromTokens (versionB.first , " ." , " " );
1376+
1377+ for (int i = 0 ; i < std::max (versionTokensA.size (), versionTokensB.size ()); i++)
1378+ {
1379+ int v1 = i < versionTokensA.size () && versionTokensA[i].containsOnly (" 0123456789" ) ? versionTokensA[i].getIntValue () : 0 ;
1380+ int v2 = i < versionTokensB.size () && versionTokensB[i].containsOnly (" 0123456789" ) ? versionTokensB[i].getIntValue () : 0 ;
1381+
1382+ if (v1 != v2)
1383+ return v1 < v2;
1384+ }
1385+
1386+ return false ;
1387+ });
1388+
1389+ return candidates[0 ].second .getFullPathName ();
13681390 }
13691391
1392+
13701393 return patchPath.replace (" ${PATCHES_DIR}" , patchesDir.getFullPathName ());
13711394}
13721395
0 commit comments