Paste P433

Masterwork From Distant Lands
ActivePublic

Authored by davidedmundson on Jul 11 2019, 1:09 AM.
diff --git a/CMakeLists.txt b/CMakeLists.txt
index e25664a..540701e 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -28,7 +28,7 @@ option(BUILD_QCH "Build API documentation in QCH format (for e.g. Qt Assistant,
add_feature_info(QCH ${BUILD_QCH} "API documentation in QCH format (for e.g. Qt Assistant, Qt Creator & KDevelop)")
set(REQUIRED_QT_VERSION 5.11.0)
-find_package(Qt5 ${REQUIRED_QT_VERSION} CONFIG REQUIRED Core)
+find_package(Qt5 ${REQUIRED_QT_VERSION} CONFIG REQUIRED Core Concurrent)
ecm_setup_qtplugin_macro_names(
JSON_NONE
diff --git a/src/lib/CMakeLists.txt b/src/lib/CMakeLists.txt
index d6d3879..e6a59c3 100644
--- a/src/lib/CMakeLists.txt
+++ b/src/lib/CMakeLists.txt
@@ -121,7 +121,7 @@ target_include_directories(KF5CoreAddons PUBLIC "$<BUILD_INTERFACE:${kcoreaddons
target_link_libraries(KF5CoreAddons
PUBLIC
- Qt5::Core
+ Qt5::Core Qt5::Concurrent
PRIVATE
${kcoreaddons_OPTIONAL_LIBS}
)
diff --git a/src/lib/plugin/kpluginloader.cpp b/src/lib/plugin/kpluginloader.cpp
index 1801c7c..e591e19 100644
--- a/src/lib/plugin/kpluginloader.cpp
+++ b/src/lib/plugin/kpluginloader.cpp
@@ -28,6 +28,7 @@
#include "kcoreaddons_debug.h"
#include <QCoreApplication>
#include <QMutex>
+#include <QtConcurrent>
// TODO: Upstream the versioning stuff to Qt
// TODO: Patch for Qt to expose plugin-finding code directly
@@ -237,7 +238,6 @@ bool KPluginLoader::unload()
return d->loader->unload();
}
-
void KPluginLoader::forEachPlugin(const QString &directory, std::function<void(const QString &)> callback)
{
QStringList dirsToCheck;
@@ -252,19 +252,25 @@ void KPluginLoader::forEachPlugin(const QString &directory, std::function<void(c
qCDebug(KCOREADDONS_DEBUG) << "Checking for plugins in" << dirsToCheck;
+ QStringList fileList;
for (const QString &dir : qAsConst(dirsToCheck)) {
QDirIterator it(dir, QDir::Files);
while (it.hasNext()) {
it.next();
- if (QLibrary::isLibrary(it.fileName())) {
- callback(it.fileInfo().absoluteFilePath());
- }
+ fileList << it.fileInfo().absoluteFilePath();
}
}
+
+ QtConcurrent::blockingMap(fileList, [callback](const QString &path) {
+ if (QLibrary::isLibrary(path)) {
+ callback(path);
+ }
+ });
}
QVector<KPluginMetaData> KPluginLoader::findPlugins(const QString &directory, std::function<bool(const KPluginMetaData &)> filter)
{
+ QMutex mutex;
QVector<KPluginMetaData> ret;
forEachPlugin(directory, [&](const QString &pluginPath) {
KPluginMetaData metadata(pluginPath);
@@ -274,6 +280,7 @@ QVector<KPluginMetaData> KPluginLoader::findPlugins(const QString &directory, st
if (filter && !filter(metadata)) {
return;
}
+ QMutexLocker lock(&mutex);
ret.append(metadata);
});
return ret;
davidedmundson edited the content of this paste. (Show Details)Jul 11 2019, 1:09 AM
davidedmundson changed the title of this paste from untitled to Masterwork From Distant Lands.