Skip to content

Commit

Permalink
SporeModManager: optimize file collision detection
Browse files Browse the repository at this point in the history
  • Loading branch information
Rosalie241 committed Jul 19, 2022
1 parent f9ae98a commit fb9b674
Showing 1 changed file with 13 additions and 16 deletions.
29 changes: 13 additions & 16 deletions SporeModManager/SporeModManagerHelpers/SporeMod.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ static bool IsModAlreadyInstalled(std::string uniqueName)
return false;
}

static bool CheckIfOtherModContainsFile(SporeMod::Xml::SporeModFile sporeModFile)
static bool CheckIfOtherModContainsFiles(std::vector<SporeMod::Xml::SporeModFile> sporeModFiles)
{
std::vector<SporeMod::Xml::InstalledSporeMod> installedSporeMods;

Expand All @@ -53,12 +53,15 @@ static bool CheckIfOtherModContainsFile(SporeMod::Xml::SporeModFile sporeModFile

for (const auto& installedSporeMod : installedSporeMods)
{
auto installedFileIter = std::find(installedSporeMod.InstalledFiles.begin(), installedSporeMod.InstalledFiles.end(), sporeModFile);
if (installedFileIter != installedSporeMod.InstalledFiles.end())
for (const auto& sporeModFile : sporeModFiles)
{
std::cerr << "An already installed mod (" << installedSporeMod.Name
<< ") contains a file (\"" << sporeModFile.FileName.string() << "\") that this mod wants to install!" << std::endl;
return true;
auto installedFileIter = std::find(installedSporeMod.InstalledFiles.begin(), installedSporeMod.InstalledFiles.end(), sporeModFile);
if (installedFileIter != installedSporeMod.InstalledFiles.end())
{
std::cerr << "An already installed mod (" << installedSporeMod.Name
<< ") contains a file (\"" << sporeModFile.FileName.string() << "\") that this mod wants to install!" << std::endl;
return true;
}
}
}

Expand Down Expand Up @@ -193,12 +196,9 @@ bool SporeMod::InstallSporeMod(std::filesystem::path path)
}

// file collision detection
for (const auto& installedFile : installedSporeMod.InstalledFiles)
if (CheckIfOtherModContainsFiles(installedSporeMod.InstalledFiles))
{
if (CheckIfOtherModContainsFile(installedFile))
{
return false;
}
return false;
}

for (const auto& installedFile : installedSporeMod.InstalledFiles)
Expand Down Expand Up @@ -257,12 +257,9 @@ bool SporeMod::InstallPackage(std::filesystem::path path)
}

// file collision detection
for (const auto& installedFile : installedSporeMod.InstalledFiles)
if (CheckIfOtherModContainsFiles(installedSporeMod.InstalledFiles))
{
if (CheckIfOtherModContainsFile(installedFile))
{
return false;
}
return false;
}

for (const auto& installedFile : installedSporeMod.InstalledFiles)
Expand Down

0 comments on commit fb9b674

Please sign in to comment.