]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/views/versioncontrol/versioncontrolobserver.cpp
Replace custom hamburger/control menu with KHamburgerMenu
[dolphin.git] / src / views / versioncontrol / versioncontrolobserver.cpp
index cf5be3c9163355429d04a9870037e4ed2c8c7432..175d362bc5528c5a5e30a79d0c7b45e340550fca 100644 (file)
@@ -15,6 +15,8 @@
 #include <KLocalizedString>
 #include <KService>
 #include <KServiceTypeTrader>
+#include <KPluginLoader>
+#include <KPluginMetaData>
 
 #include <QTimer>
 
@@ -279,24 +281,54 @@ 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())) {
+                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<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;
     }
 }