X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/de8ea90ca78ccfb26dd501dc3bc089fb24ad9094..0318f7d8ff8e8f2c2d3188ea51e119c5a42df09e:/src/views/versioncontrol/versioncontrolobserver.cpp diff --git a/src/views/versioncontrol/versioncontrolobserver.cpp b/src/views/versioncontrol/versioncontrolobserver.cpp index cf5be3c91..175d362bc 100644 --- a/src/views/versioncontrol/versioncontrolobserver.cpp +++ b/src/views/versioncontrol/versioncontrolobserver.cpp @@ -15,6 +15,8 @@ #include #include #include +#include +#include #include @@ -279,24 +281,54 @@ void VersionControlObserver::initPlugins() // all fileview version control plugins and remember them in 'plugins'. const QStringList enabledPlugins = VersionControlSettings::enabledPlugins(); + const QVector plugins = KPluginLoader::findPlugins(QStringLiteral("dolphin/vcs")); + + QSet loadedPlugins; + + for (const auto &p : plugins) { + if (enabledPlugins.contains(p.name())) { + KPluginLoader loader(p.fileName()); + KPluginFactory *factory = loader.factory(); + KVersionControlPlugin *plugin = factory->create(); + 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())) { + KPluginLoader pluginLoader(*(*it)); + // Need to cast to int, because pluginVersion() returns -1 as + // an unsigned int for plugins without versions. + if (int(pluginLoader.pluginVersion()) < 2) { + qCWarning(DolphinDebug) << "Can't load old plugin" << (*it)->name(); + continue; + } KVersionControlPlugin* plugin = (*it)->createInstance(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; } }