summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/modinfo.cpp14
-rw-r--r--src/modinfo.h1
-rw-r--r--src/organizercore.cpp6
3 files changed, 14 insertions, 7 deletions
diff --git a/src/modinfo.cpp b/src/modinfo.cpp
index 5a90d74b..81b45a49 100644
--- a/src/modinfo.cpp
+++ b/src/modinfo.cpp
@@ -46,7 +46,7 @@ using namespace MOBase;
using namespace MOShared;
-env::ThreadPool<ModInfo::ModThread> ModInfo::s_Threads(10);
+env::ThreadPool<ModInfo::ModThread> ModInfo::s_Threads;
std::vector<ModInfo::Ptr> ModInfo::s_Collection;
std::map<QString, unsigned int> ModInfo::s_ModsByName;
std::map<std::pair<QString, int>, std::vector<unsigned int>> ModInfo::s_ModsByModID;
@@ -251,6 +251,7 @@ void ModInfo::updateFromDisc(const QString &modDirectory,
DirectoryEntry **directoryStructure,
PluginContainer *pluginContainer,
bool displayForeign,
+ std::size_t refreshThreadCount,
MOBase::IPluginGame const *game)
{
TimeThis tt("ModInfo::updateFromDisc()");
@@ -287,14 +288,17 @@ void ModInfo::updateFromDisc(const QString &modDirectory,
createFromOverwrite(pluginContainer, game, directoryStructure);
std::sort(s_Collection.begin(), s_Collection.end(), ModInfo::ByName);
-
- updateIndices();
-
+
+ // This force loading a part of the FileTree:
+ s_Threads.setMax(refreshThreadCount);
for (auto& p : s_Collection) {
- auto &t = s_Threads.request();
+ auto& t = s_Threads.request();
t.ptr = p;
t.wakeup();
}
+
+ updateIndices();
+
}
diff --git a/src/modinfo.h b/src/modinfo.h
index d3d13d9c..081f3660 100644
--- a/src/modinfo.h
+++ b/src/modinfo.h
@@ -143,6 +143,7 @@ public:
MOShared::DirectoryEntry **directoryStructure,
PluginContainer *pluginContainer,
bool displayForeign,
+ std::size_t refreshThreadCount,
MOBase::IPluginGame const *game);
static void clear() { s_Collection.clear(); s_ModsByName.clear(); s_ModsByModID.clear(); }
diff --git a/src/organizercore.cpp b/src/organizercore.cpp
index 74163d8d..6e4b3fbf 100644
--- a/src/organizercore.cpp
+++ b/src/organizercore.cpp
@@ -208,7 +208,8 @@ void OrganizerCore::updateExecutablesList()
void OrganizerCore::updateModInfoFromDisc() {
ModInfo::updateFromDisc(
m_Settings.paths().mods(), &m_DirectoryStructure,
- m_PluginContainer, m_Settings.interface().displayForeign(), managedGame());
+ m_PluginContainer, m_Settings.interface().displayForeign(),
+ m_Settings.refreshThreadCount(), managedGame());
}
void OrganizerCore::setUserInterface(IUserInterface* ui)
@@ -1097,7 +1098,8 @@ void OrganizerCore::refreshModList(bool saveChanges)
ModInfo::updateFromDisc(
m_Settings.paths().mods(), &m_DirectoryStructure,
- m_PluginContainer, m_Settings.interface().displayForeign(), managedGame());
+ m_PluginContainer, m_Settings.interface().displayForeign(),
+ m_Settings.refreshThreadCount(), managedGame());
m_CurrentProfile->refreshModStatus();