]> cloud.milkyroute.net Git - dolphin.git/commitdiff
Filter json-only KFileItemAction plugins by mimetype
authorElvis Angelaccio <elvis.angelaccio@kdemail.net>
Tue, 23 Aug 2016 15:58:48 +0000 (17:58 +0200)
committerElvis Angelaccio <elvis.angelaccio@kdemail.net>
Tue, 23 Aug 2016 16:06:40 +0000 (18:06 +0200)
Commit d48b733 introduced support for kfileitemaction plugins with json
metadata, but forgot to filter them by the commonMimeType (like
KMimeTypeTrader::query() does with old-style plugins).

So we need to load a plugin only when commonMimeType is equal to (or child of) one
of the mimetypes supported by the plugin.

src/dolphincontextmenu.cpp

index ff2e5478a48517649f405bd48f54c95b129ec5ab..9507ba0a8db7a54a32ab8eb9b2b875df98a37994 100644 (file)
@@ -48,6 +48,7 @@
 #include <QKeyEvent>
 #include <QMenuBar>
 #include <QMenu>
+#include <QMimeDatabase>
 
 #include <panels/places/placesitem.h>
 #include <panels/places/placesitemmodel.h>
@@ -519,8 +520,19 @@ void DolphinContextMenu::addFileItemPluginActions()
         }
     }
 
-    const auto jsonPlugins = KPluginLoader::findPlugins(QStringLiteral("kf5/kfileitemaction"), [](const KPluginMetaData& metaData) {
-        return metaData.serviceTypes().contains(QStringLiteral("KFileItemAction/Plugin"));
+    const auto jsonPlugins = KPluginLoader::findPlugins(QStringLiteral("kf5/kfileitemaction"), [=](const KPluginMetaData& metaData) {
+        if (!metaData.serviceTypes().contains(QStringLiteral("KFileItemAction/Plugin"))) {
+            return false;
+        }
+
+        auto mimeType = QMimeDatabase().mimeTypeForName(commonMimeType);
+        foreach (const auto& supportedMimeType, metaData.mimeTypes()) {
+            if (mimeType.inherits(supportedMimeType)) {
+                return true;
+            }
+        }
+
+        return false;
     });
 
     foreach (const auto& jsonMetadata, jsonPlugins) {