#include "updateitemstatesthread.h"
#include <KLocalizedString>
-#include <KService>
-#include <KServiceTypeTrader>
+#include <KPluginFactory>
+#include <KPluginMetaData>
#include <QTimer>
return m_plugin->versionControlActions(items);
} else {
QList<QAction*> actions;
- for (const auto &plugin : qAsConst(m_plugins)) {
+ for (const QPointer<KVersionControlPlugin> &plugin : qAsConst(m_plugins)) {
actions << plugin->outOfVersionControlActions(items);
}
return actions;
{
Q_UNUSED(itemRanges)
- // Because "version" role is emitted by VCS plugin (ourselfs) we don't need to
+ // Because "version" role is emitted by VCS plugin (ourselves) we don't need to
// analyze it and update directory item states information. So lets check if
// there is only "version".
if ( !(roles.count() == 1 && roles.contains("version")) ) {
}
if (m_plugin != nullptr) {
- if (!rootItem.url().path().startsWith(m_localeRepoRoot) || !QFile::exists(m_localeRepoRoot + '/' + m_plugin->fileName())) {
+ if (!rootItem.url().path().startsWith(m_localRepoRoot) || !QFile::exists(m_localRepoRoot + '/' + m_plugin->fileName())) {
m_plugin = nullptr;
// The directory is not versioned. Reset the verification timer to a higher
// by an immediate verification.
m_dirVerificationTimer->setInterval(500);
} else {
- // View was versionned but should not be anymore
+ // View was versioned but should not be anymore
updateItemStates();
}
} else if ((m_plugin = searchPlugin(rootItem.url()))) {
// all fileview version control plugins and remember them in 'plugins'.
const QStringList enabledPlugins = VersionControlSettings::enabledPlugins();
- const KService::List pluginServices = KServiceTypeTrader::self()->query(QStringLiteral("FileViewVersionControlPlugin"));
- for (KService::List::ConstIterator it = pluginServices.constBegin(); it != pluginServices.constEnd(); ++it) {
- 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);
+ const QVector<KPluginMetaData> plugins = KPluginMetaData::findPlugins(QStringLiteral("dolphin/vcs"));
+
+ QSet<QString> loadedPlugins;
+ for (const auto &p : plugins) {
+ if (enabledPlugins.contains(p.name())) {
+ auto plugin = KPluginFactory::instantiatePlugin<KVersionControlPlugin>(p, parent()).plugin;
+ if (plugin) {
m_plugins.append(plugin);
+ loadedPlugins += p.name();
}
}
}
+
+ 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;
}
}
initPlugins();
// Verify whether the current directory is under a version system
- for (const auto &plugin : qAsConst(m_plugins)) {
+ for (const QPointer<KVersionControlPlugin> &plugin : qAsConst(m_plugins)) {
+ if (!plugin) {
+ continue;
+ }
+
// first naively check if we are at working copy root
const QString fileName = directory.path() + '/' + plugin->fileName();
if (QFile::exists(fileName)) {
- m_localeRepoRoot = directory.path();
+ m_localRepoRoot = directory.path();
return plugin;
}
- auto wcRoot = plugin->localRepositoryRoot(directory.path());
- if (!wcRoot.isEmpty()) {
- m_localeRepoRoot = wcRoot;
+ const QString root = plugin->localRepositoryRoot(directory.path());
+ if (!root.isEmpty()) {
+ m_localRepoRoot = root;
return plugin;
}
}