┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src/views/versioncontrol/versioncontrolobserver.cpp
diff options
context:
space:
mode:
authorTobias Fella <[email protected]>2021-04-05 10:37:28 +0000
committerElvis Angelaccio <[email protected]>2021-04-05 10:37:28 +0000
commit30371aedc80bb4e94481058182ab2ad25e35daf9 (patch)
tree8273bb2a1f988a4bdd016dbfc69f271ad6a9e9ab /src/views/versioncontrol/versioncontrolobserver.cpp
parentd97782809a1698124913400c13d12da816ceb1a0 (diff)
Port the VCS plugin system to KPluginLoader
The loader looks for the plugins in ${QT_PLUGIN_PATH}/dolphin/vcs. The old method of loading the plugins is kept around for now, to support external, legacy plugins.
Diffstat (limited to 'src/views/versioncontrol/versioncontrolobserver.cpp')
-rw-r--r--src/views/versioncontrol/versioncontrolobserver.cpp43
1 files changed, 34 insertions, 9 deletions
diff --git a/src/views/versioncontrol/versioncontrolobserver.cpp b/src/views/versioncontrol/versioncontrolobserver.cpp
index cf5be3c91..9f0933a48 100644
--- a/src/views/versioncontrol/versioncontrolobserver.cpp
+++ b/src/views/versioncontrol/versioncontrolobserver.cpp
@@ -15,6 +15,8 @@
#include <KLocalizedString>
#include <KService>
#include <KServiceTypeTrader>
+#include <KPluginLoader>
+#include <KPluginMetaData>
#include <QTimer>
@@ -279,24 +281,47 @@ void VersionControlObserver::initPlugins()
// all fileview version control plugins and remember them in 'plugins'.
const QStringList enabledPlugins = VersionControlSettings::enabledPlugins();
+ const QVector<KPluginMetaData> plugins = KPluginLoader::findPlugins(QStringLiteral("dolphin/vcs"));
+
+ QSet<QString> loadedPlugins;
+
+ for (const auto &p : plugins) {
+ if (enabledPlugins.contains(p.name())) {
+ KPluginLoader loader(p.fileName());
+ KPluginFactory *factory = loader.factory();
+ KVersionControlPlugin *plugin = factory->create<KVersionControlPlugin>();
+ if (plugin) {
+ m_plugins.append(plugin);
+ loadedPlugins += p.name();
+ }
+ }
+ }
+
+ // Deprecated: load plugins using KService. This mechanism will be removed with KF6
const KService::List pluginServices = KServiceTypeTrader::self()->query(QStringLiteral("FileViewVersionControlPlugin"));
for (KService::List::ConstIterator it = pluginServices.constBegin(); it != pluginServices.constEnd(); ++it) {
+ if (loadedPlugins.contains((*it)->property("Name", QVariant::String).toString())) {
+ continue;
+ }
if (enabledPlugins.contains((*it)->name())) {
KVersionControlPlugin* plugin = (*it)->createInstance<KVersionControlPlugin>(this);
if (plugin) {
- connect(plugin, &KVersionControlPlugin::itemVersionsChanged,
- this, &VersionControlObserver::silentDirectoryVerification);
- connect(plugin, &KVersionControlPlugin::infoMessage,
- this, &VersionControlObserver::infoMessage);
- connect(plugin, &KVersionControlPlugin::errorMessage,
- this, &VersionControlObserver::errorMessage);
- connect(plugin, &KVersionControlPlugin::operationCompletedMessage,
- this, &VersionControlObserver::operationCompletedMessage);
-
m_plugins.append(plugin);
}
}
}
+
+ for (auto &plugin : qAsConst(m_plugins)) {
+ connect(plugin, &KVersionControlPlugin::itemVersionsChanged,
+ this, &VersionControlObserver::silentDirectoryVerification);
+ connect(plugin, &KVersionControlPlugin::infoMessage,
+ this, &VersionControlObserver::infoMessage);
+ connect(plugin, &KVersionControlPlugin::errorMessage,
+ this, &VersionControlObserver::errorMessage);
+ connect(plugin, &KVersionControlPlugin::operationCompletedMessage,
+ this, &VersionControlObserver::operationCompletedMessage);
+ }
+
m_pluginsInitialized = true;
}
}