summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJeremy Rimpo <jrim@rimpo.org>2020-09-09 13:34:54 -0500
committerGitHub <noreply@github.com>2020-09-09 13:34:54 -0500
commit3711cc01446fedca0aa7299d3bc98bdf38288862 (patch)
tree2816c977ecb2a4e992c69d250060753900b47383 /src
parent504683776c51253fbd2b922a269b09177944d031 (diff)
parentd30d966500525cfe3137044c97db024230aac802 (diff)
Merge pull request #1230 from ModOrganizer2/bulk-update-fix
Fixes for bulk update check
Diffstat (limited to 'src')
-rw-r--r--src/mainwindow.cpp21
-rw-r--r--src/modinfo.cpp16
2 files changed, 27 insertions, 10 deletions
diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp
index dc8e6141..b3682297 100644
--- a/src/mainwindow.cpp
+++ b/src/mainwindow.cpp
@@ -4199,7 +4199,7 @@ void MainWindow::checkModsForUpdates()
m_OrganizerCore.doAfterLogin([this] () { this->checkModsForUpdates(); });
NexusInterface::instance(&m_PluginContainer)->getAccessManager()->apiCheck(apiKey);
} else {
- log::warn("You are not currently authenticated with Nexus. Please do so under Settings -> Nexus.");
+ log::warn("{}", tr("You are not currently authenticated with Nexus. Please do so under Settings -> Nexus."));
}
}
@@ -5406,7 +5406,7 @@ void MainWindow::modUpdateCheck(std::multimap<QString, int> IDs)
m_OrganizerCore.doAfterLogin([=]() { this->modUpdateCheck(IDs); });
NexusInterface::instance(&m_PluginContainer)->getAccessManager()->apiCheck(apiKey);
} else
- log::warn("You are not currently authenticated with Nexus. Please do so under Settings -> Nexus.");
+ log::warn("{}", tr("You are not currently authenticated with Nexus. Please do so under Settings -> Nexus."));
}
}
@@ -5524,10 +5524,10 @@ void MainWindow::nxmUpdateInfoAvailable(QString gameName, QVariant userData, QVa
}
QVariantList resultList = resultData.toList();
- QFutureWatcher<std::set<QSharedPointer<ModInfo>>> *watcher = new QFutureWatcher<std::set<QSharedPointer<ModInfo>>>();
+ QFutureWatcher<std::pair<QString, std::set<QSharedPointer<ModInfo>>>> *watcher = new QFutureWatcher<std::pair<QString, std::set<QSharedPointer<ModInfo>>>>();
QObject::connect(watcher, &QFutureWatcher<std::set<QSharedPointer<ModInfo>>>::finished, this, &MainWindow::finishUpdateInfo);
- QFuture<std::set<QSharedPointer<ModInfo>>> future = QtConcurrent::run([=]() -> std::set<QSharedPointer<ModInfo>> {
- return ModInfo::filteredMods(gameNameReal, resultList, userData.toBool(), true);
+ QFuture<std::pair<QString, std::set<QSharedPointer<ModInfo>>>> future = QtConcurrent::run([=]() -> std::pair<QString, std::set<QSharedPointer<ModInfo>>> {
+ return std::make_pair(gameNameReal, ModInfo::filteredMods(gameNameReal, resultList, userData.toBool(), true));
});
watcher->setFuture(future);
if (m_ModListSortProxy != nullptr)
@@ -5536,12 +5536,13 @@ void MainWindow::nxmUpdateInfoAvailable(QString gameName, QVariant userData, QVa
void MainWindow::finishUpdateInfo()
{
- QFutureWatcher<std::set<QSharedPointer<ModInfo>>> *watcher = static_cast<QFutureWatcher<std::set<QSharedPointer<ModInfo>>> *>(sender());
-
- auto finalMods = watcher->result();
+ QFutureWatcher<std::pair<QString, std::set<QSharedPointer<ModInfo>>>> *watcher = static_cast<QFutureWatcher<std::pair<QString, std::set<QSharedPointer<ModInfo>>>> *>(sender());
+
+ QString game = watcher->result().first;
+ auto finalMods = watcher->result().second;
if (finalMods.empty()) {
- log::info("None of your mods appear to have had recent file updates.");
+ log::info("{}", tr("None of your %1 mods appear to have had recent file updates.").arg(game));
}
std::set<std::pair<QString, int>> organizedGames;
@@ -5552,7 +5553,7 @@ void MainWindow::finishUpdateInfo()
}
if (!finalMods.empty() && organizedGames.empty())
- log::warn("All of your mods have been checked recently. We restrict update checks to help preserve your available API requests.");
+ log::warn("{}", tr("All of your mods have been checked recently. We restrict update checks to help preserve your available API requests."));
for (auto game : organizedGames)
NexusInterface::instance(&m_PluginContainer)->requestUpdates(game.second, this, QVariant(), game.first, QString());
diff --git a/src/modinfo.cpp b/src/modinfo.cpp
index 826aa5c9..b79ed657 100644
--- a/src/modinfo.cpp
+++ b/src/modinfo.cpp
@@ -312,6 +312,22 @@ bool ModInfo::checkAllForUpdate(PluginContainer *pluginContainer, QObject *recei
}
}
+ // Detect invalid source games
+ for (auto itr = games.begin(); itr != games.end(); ++itr) {
+ auto gamePlugins = pluginContainer->plugins<IPluginGame>();
+ IPluginGame* gamePlugin = qApp->property("managed_game").value<IPluginGame*>();
+ for (auto plugin : gamePlugins) {
+ if (plugin != nullptr && plugin->gameShortName().compare(*itr, Qt::CaseInsensitive) == 0) {
+ gamePlugin = plugin;
+ break;
+ }
+ }
+ if (gamePlugin != nullptr && gamePlugin->gameNexusName().isEmpty()) {
+ log::warn("{}", tr("The update check has found a mod with a Nexus ID and source game of %1, but this game is not a valid Nexus source.").arg(gamePlugin->gameName()));
+ itr = games.erase(itr);
+ }
+ }
+
if (latest < QDateTime::currentDateTimeUtc().addMonths(-1)) {
std::set<std::pair<QString, int>> organizedGames;
for (auto mod : s_Collection) {