diff options
| author | Al <26797547+Al12rs@users.noreply.github.com> | 2026-05-04 04:47:20 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-05-03 21:47:20 -0500 |
| commit | ca7a149874e99a8f401cb30c430f58a48be4c642 (patch) | |
| tree | 9764a43289eab32bfb838aa91234ddf87fae4eb0 /src/modinforegular.cpp | |
| parent | ef7499aade74a148416b5fde7e8c03a75ea381c3 (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.cpp | 14 |
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; } |
