summaryrefslogtreecommitdiff
path: root/src/modinfo.cpp
diff options
context:
space:
mode:
authorSilarn <jrim@rimpo.org>2019-02-11 16:51:47 -0600
committerSilarn <jrim@rimpo.org>2019-02-18 21:31:21 -0600
commit2b9d2f32fbbc576c9367a24c0347e5870ff20117 (patch)
treef13f20f95dc2dda2dab1cd90a73e957e6ddb3a16 /src/modinfo.cpp
parent5a7d0243c69d5194ee1a4d0be05d2bcaec18aeac (diff)
Endorsement and efficiency updates
* Reduce update timeout to 5 minutes * Introduce bulk endorsement check replacing global mod info check * Fine tune performance of bulk update info query * Thread the update processing to prevent lockups
Diffstat (limited to 'src/modinfo.cpp')
-rw-r--r--src/modinfo.cpp37
1 files changed, 13 insertions, 24 deletions
diff --git a/src/modinfo.cpp b/src/modinfo.cpp
index 3e694baf..938a6418 100644
--- a/src/modinfo.cpp
+++ b/src/modinfo.cpp
@@ -284,16 +284,8 @@ ModInfo::ModInfo(PluginContainer *pluginContainer)
}
-int ModInfo::checkAllForUpdate(PluginContainer *pluginContainer, QObject *receiver)
+void ModInfo::checkAllForUpdate(PluginContainer *pluginContainer, QObject *receiver)
{
- int result = 0;
-
- // MO2 endorsement status is no longer available via this method - an alternative must be found
- //IPluginGame const *game = pluginContainer->managedGame("Skyrim Special Edition");
- //if (game && game->nexusModOrganizerID()) {
- // NexusInterface::instance(pluginContainer)->requestUpdates(game->nexusModOrganizerID(), receiver, QVariant(), game->gameShortName(), QString());
- //}
-
QDateTime earliest = QDateTime::currentDateTimeUtc();
QDateTime latest;
std::set<QString> games;
@@ -315,8 +307,6 @@ int ModInfo::checkAllForUpdate(PluginContainer *pluginContainer, QObject *receiv
}
}
- result = organizedGames.size();
-
if (organizedGames.empty())
qWarning("All of your mods have been checked recently. We restrict update checks to help preserve your available API requests.");
@@ -336,8 +326,6 @@ int ModInfo::checkAllForUpdate(PluginContainer *pluginContainer, QObject *receiv
for (auto gameName : games)
NexusInterface::instance(pluginContainer)->requestUpdateInfo(gameName, NexusInterface::UpdatePeriod::DAY, receiver, QVariant(false), QString());
}
-
- return result;
}
std::set<QSharedPointer<ModInfo>> ModInfo::filteredMods(QString gameName, QVariantList updateData, bool addOldMods, bool markUpdated)
@@ -345,10 +333,12 @@ std::set<QSharedPointer<ModInfo>> ModInfo::filteredMods(QString gameName, QVaria
std::set<QSharedPointer<ModInfo>> finalMods;
for (QVariant result : updateData) {
QVariantMap update = result.toMap();
- for (auto mod : s_Collection)
- if (mod->getNexusID() == update["mod_id"].toInt() && mod->getGameName().compare(gameName, Qt::CaseInsensitive) == 0)
- if (mod->getLastNexusUpdate() > QDateTime::fromSecsSinceEpoch(update["latest_file_update"].toInt(), Qt::UTC))
- finalMods.insert(mod);
+ std::copy_if(s_Collection.begin(), s_Collection.end(), std::inserter(finalMods, finalMods.end()), [=](QSharedPointer<ModInfo> info) -> bool {
+ if (info->getNexusID() == update["mod_id"].toInt() && info->getGameName().compare(gameName, Qt::CaseInsensitive) == 0)
+ if (info->getLastNexusUpdate() > QDateTime::fromSecsSinceEpoch(update["latest_file_update"].toInt(), Qt::UTC))
+ return true;
+ return false;
+ });
}
if (addOldMods)
@@ -358,20 +348,21 @@ std::set<QSharedPointer<ModInfo>> ModInfo::filteredMods(QString gameName, QVaria
if (markUpdated) {
std::set<QSharedPointer<ModInfo>> updates;
- for (auto mod : s_Collection)
- if (mod->getGameName().compare(gameName, Qt::CaseInsensitive) == 0 && mod->canBeUpdated())
- updates.insert(mod);
+ std::copy_if(s_Collection.begin(), s_Collection.end(), std::inserter(updates, updates.end()), [=](QSharedPointer<ModInfo> info) -> bool {
+ if (info->getGameName().compare(gameName, Qt::CaseInsensitive) == 0 && info->canBeUpdated())
+ return true;
+ return false;
+ });
std::set<QSharedPointer<ModInfo>> diff;
std::set_difference(updates.begin(), updates.end(), finalMods.begin(), finalMods.end(), std::inserter(diff, diff.end()));
for (auto skipped : diff) {
skipped->setLastNexusUpdate(QDateTime::currentDateTimeUtc());
- skipped->updateNXMInfo();
}
}
return finalMods;
}
-int ModInfo::manualUpdateCheck(PluginContainer *pluginContainer, QObject *receiver, std::multimap<QString, int> IDs)
+void ModInfo::manualUpdateCheck(PluginContainer *pluginContainer, QObject *receiver, std::multimap<QString, int> IDs)
{
std::vector<QSharedPointer<ModInfo>> mods;
std::set<std::pair<QString, int>> organizedGames;
@@ -402,8 +393,6 @@ int ModInfo::manualUpdateCheck(PluginContainer *pluginContainer, QObject *receiv
} else {
qInfo("None of the selected mods can be updated.");
}
-
- return organizedGames.size();
}