]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/settings/contextmenu/contextmenusettingspage.cpp
KServiceTypeTrader has been deprecated since KService 5.90
[dolphin.git] / src / settings / contextmenu / contextmenusettingspage.cpp
index 8ebac2e12242f15dcb7efe10ebe28e4d2e7fcae8..acf80d19526367cb1100f93f0f648c152a9e8e15 100644 (file)
 #include "global.h"
 
 #include <KDesktopFile>
+#include <KDesktopFileActions>
+#include <KFileUtils>
 #include <KLocalizedString>
 #include <KMessageBox>
-#include <KNS3/Button>
 #include <KPluginMetaData>
 #include <KService>
 #include <KServiceTypeTrader>
-#include <KDesktopFileActions>
-
 #include <kio_version.h>
+#include <kiocore_export.h>
+#include <kservice_export.h>
+
+#include <QtGlobal>
+#include <knewstuff_version.h>
+#if KNEWSTUFF_VERSION >= QT_VERSION_CHECK(5, 91, 0)
+#include <KNSWidgets/Button>
+#else
+#include <KNS3/Button>
+#endif
 
 #include <QGridLayout>
 #include <QLabel>
@@ -83,25 +92,27 @@ ContextMenuSettingsPage::ContextMenuSettingsPage(QWidget* parent,
     m_listView->setVerticalScrollMode(QListView::ScrollPerPixel);
     connect(m_listView, &QListView::clicked, this, &ContextMenuSettingsPage::changed);
 
+    topLayout->addWidget(label);
+    topLayout->addWidget(m_searchLineEdit);
+    topLayout->addWidget(m_listView);
+
 #ifndef Q_OS_WIN
-    auto *downloadButton = new KNS3::Button(i18nc("@action:button", "Download New Services..."),
-                                                  QStringLiteral("servicemenu.knsrc"),
-                                                  this);
-    connect(downloadButton, &KNS3::Button::dialogFinished, this, [this](const KNS3::Entry::List &changedEntries) {
+#if KNEWSTUFF_VERSION >= QT_VERSION_CHECK(5, 91, 0)
+    using NewStuffButton = KNSWidgets::Button;
+#else
+    using NewStuffButton = KNS3::Button;
+#endif // KNEWSTUFF_VERSION
+    auto *downloadButton = new NewStuffButton(i18nc("@action:button", "Download New Services..."),
+                                              QStringLiteral("servicemenu.knsrc"),
+                                              this);
+    connect(downloadButton, &NewStuffButton::dialogFinished, this, [this](const auto &changedEntries) {
            if (!changedEntries.isEmpty()) {
                m_serviceModel->clear();
                loadServices();
            }
     });
-
-#endif
-
-    topLayout->addWidget(label);
-    topLayout->addWidget(m_searchLineEdit);
-    topLayout->addWidget(m_listView);
-#ifndef Q_OS_WIN
     topLayout->addWidget(downloadButton);
-#endif
+#endif // Q_OS_WIN
 
     m_enabledVcsPlugins = VersionControlSettings::enabledPlugins();
     std::sort(m_enabledVcsPlugins.begin(), m_enabledVcsPlugins.end());
@@ -126,7 +137,7 @@ bool ContextMenuSettingsPage::entryVisible(const QString& id)
         return ContextMenuSettings::showCopyLocation();
     } else if (id == "duplicate") {
         return ContextMenuSettings::showDuplicateHere();
-    } else if (id == "open_terminal") {
+    } else if (id == "open_terminal_here") {
         return ContextMenuSettings::showOpenTerminal();
     }
     return false;
@@ -148,7 +159,7 @@ void ContextMenuSettingsPage::setEntryVisible(const QString& id, bool visible)
         ContextMenuSettings::setShowCopyLocation(visible);
     } else if (id == "duplicate") {
         ContextMenuSettings::setShowDuplicateHere(visible);
-    } else if (id == "open_terminal") {
+    } else if (id == "open_terminal_here") {
         ContextMenuSettings::setShowOpenTerminal(visible);
     }
 }
@@ -272,10 +283,18 @@ void ContextMenuSettingsPage::loadServices()
     const KConfigGroup showGroup = config.group("Show");
 
     // Load generic services
-    const KService::List entries = KServiceTypeTrader::self()->query(QStringLiteral("KonqPopupMenu/Plugin"));
-    for (const KService::Ptr &service : entries) {
-        const QString file = QStandardPaths::locate(QStandardPaths::GenericDataLocation, "kservices5/" % service->entryPath());
-        const QList<KServiceAction> serviceActions = KDesktopFileActions::userDefinedServices(file, true);
+    const auto locations = QStandardPaths::locateAll(QStandardPaths::GenericDataLocation, QStringLiteral("kio/servicemenus"), QStandardPaths::LocateDirectory);
+    QStringList files = KFileUtils::findAllUniqueFiles(locations);
+
+#if KIOWIDGETS_BUILD_DEPRECATED_SINCE(5, 90)
+    const KService::List services = KServiceTypeTrader::self()->query(QStringLiteral("KonqPopupMenu/Plugin"));
+    for (const KService::Ptr &service : services) {
+        files << QStandardPaths::locate(QStandardPaths::GenericDataLocation, "kservices5/" % service->entryPath());
+    }
+#endif
+
+    for (const auto &file : qAsConst(files)) {
+        const QList<KServiceAction> serviceActions = KDesktopFileActions::userDefinedServices(KService(file), true);
 
         const KDesktopFile desktopFile(file);
         const QString subMenuName = desktopFile.desktopGroup().readEntry("X-KDE-Submenu");
@@ -295,7 +314,7 @@ void ContextMenuSettingsPage::loadServices()
     }
 
     // Load service plugins, this is deprecated in KIO 5.82
-#if KIO_VERSION < QT_VERSION_CHECK(6, 0, 0)
+#if KIOCORE_BUILD_DEPRECATED_SINCE(5, 82)
     const KService::List pluginServices = KServiceTypeTrader::self()->query(QStringLiteral("KFileItemAction/Plugin"));
     for (const KService::Ptr &service : pluginServices) {
         const QString desktopEntryName = service->desktopEntryName();
@@ -307,7 +326,7 @@ void ContextMenuSettingsPage::loadServices()
 #endif
 
     // Load JSON-based plugins that implement the KFileItemActionPlugin interface
-    const auto jsonPlugins = KPluginLoader::findPlugins(QStringLiteral("kf5/kfileitemaction"));
+    const auto jsonPlugins = KPluginMetaData::findPlugins(QStringLiteral("kf5/kfileitemaction"));
 
     for (const auto &jsonMetadata : jsonPlugins) {
         const QString desktopEntryName = jsonMetadata.pluginId();
@@ -328,7 +347,7 @@ void ContextMenuSettingsPage::loadVersionControlSystems()
     // Create a checkbox for each available version control plugin
     QSet<QString> loadedPlugins;
 
-    const QVector<KPluginMetaData> plugins = KPluginLoader::findPlugins(QStringLiteral("dolphin/vcs"));
+    const QVector<KPluginMetaData> plugins = KPluginMetaData::findPlugins(QStringLiteral("dolphin/vcs"));
     for (const auto &plugin : plugins) {
         const QString pluginName = plugin.name();
         addRow(QStringLiteral("code-class"),
@@ -338,18 +357,6 @@ void ContextMenuSettingsPage::loadVersionControlSystems()
         loadedPlugins += pluginName;
     }
 
-    const KService::List pluginServices = KServiceTypeTrader::self()->query(QStringLiteral("FileViewVersionControlPlugin"));
-    for (const auto &plugin : pluginServices) {
-        const QString pluginName = plugin->name();
-        if (loadedPlugins.contains(pluginName)) {
-            continue;
-        }
-        addRow(QStringLiteral("code-class"),
-               pluginName,
-               VersionControlServicePrefix + pluginName,
-               enabledPlugins.contains(pluginName));
-    }
-
     m_sortModel->sort(Qt::DisplayRole);
 }