summaryrefslogtreecommitdiff
path: root/src/modinforegular.cpp
diff options
context:
space:
mode:
authorAl <26797547+Al12rs@users.noreply.github.com>2026-05-04 04:47:20 +0200
committerGitHub <noreply@github.com>2026-05-03 21:47:20 -0500
commitca7a149874e99a8f401cb30c430f58a48be4c642 (patch)
tree9764a43289eab32bfb838aa91234ddf87fae4eb0 /src/modinforegular.cpp
parentef7499aade74a148416b5fde7e8c03a75ea381c3 (diff)
Improve mod update check accuracy (#2385)
* Index API response into lookup maps * extract new findLatestActiveSuccessor method from update check function * extract method to check if a file is active * use new isActiveFileStatus in modInfoRegular * fix bug when merging during mod install * remember ordering of installed nexus file ids * refactor update check logic to prioritize Nexus file IDs over filenames * refactor nxmUpdatesAvailable to simplify update checking logic * refactor update check logic to find Nexus file IDs by filename and streamline successor retrieval * refactor update checking to streamline version resolution and improve successor retrieval
Diffstat (limited to 'src/modinforegular.cpp')
-rw-r--r--src/modinforegular.cpp14
1 files changed, 10 insertions, 4 deletions
diff --git a/src/modinforegular.cpp b/src/modinforegular.cpp
index 0e73b70c..2042f772 100644
--- a/src/modinforegular.cpp
+++ b/src/modinforegular.cpp
@@ -227,8 +227,8 @@ void ModInfoRegular::readMeta()
int numFiles = metaFile.beginReadArray("installedFiles");
for (int i = 0; i < numFiles; ++i) {
metaFile.setArrayIndex(i);
- m_InstalledFileIDs.insert(std::make_pair(metaFile.value("modid").toInt(),
- metaFile.value("fileid").toInt()));
+ m_InstalledFileIDs.emplace_back(metaFile.value("modid").toInt(),
+ metaFile.value("fileid").toInt());
}
metaFile.endArray();
@@ -332,7 +332,7 @@ bool ModInfoRegular::updateAvailable() const
if (m_IgnoredVersion.isValid() && (m_IgnoredVersion == m_NewestVersion)) {
return false;
}
- if (m_NexusFileStatus == 4 || m_NexusFileStatus == 6) {
+ if (!NexusInterface::isActiveFileStatus(m_NexusFileStatus)) {
return true;
}
return m_NewestVersion.isValid() && (m_Version < m_NewestVersion);
@@ -942,7 +942,13 @@ QStringList ModInfoRegular::archives(bool checkOnDisk)
void ModInfoRegular::addInstalledFile(int modId, int fileId)
{
- m_InstalledFileIDs.insert(std::make_pair(modId, fileId));
+ const auto entry = std::make_pair(modId, fileId);
+ const auto existing =
+ std::find(m_InstalledFileIDs.begin(), m_InstalledFileIDs.end(), entry);
+ if (existing != m_InstalledFileIDs.end()) {
+ m_InstalledFileIDs.erase(existing);
+ }
+ m_InstalledFileIDs.push_back(entry);
m_MetaInfoChanged = true;
}