Skip to content

Commit 6676d2b

Browse files
committed
Load oldest version patch if it can't be found
1 parent 46df06d commit 6676d2b

1 file changed

Lines changed: 26 additions & 3 deletions

File tree

Source/PluginProcessor.cpp

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)