From ca7a149874e99a8f401cb30c430f58a48be4c642 Mon Sep 17 00:00:00 2001 From: Al <26797547+Al12rs@users.noreply.github.com> Date: Mon, 4 May 2026 04:47:20 +0200 Subject: 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 --- src/modinforegular.cpp | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) (limited to 'src/modinforegular.cpp') 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; } -- cgit v1.3.1