- const bool show = showGroup.readEntry(desktopEntryName, true);
-
- model->insertRow(0);
- const QModelIndex index = model->index(0, 0);
- model->setData(index, service->icon(), Qt::DecorationRole);
- model->setData(index, show, Qt::CheckStateRole);
- model->setData(index, service->name(), Qt::DisplayRole);
- model->setData(index, desktopEntryName, ServiceModel::DesktopEntryNameRole);
+ const bool checked = showGroup.readEntry(desktopEntryName, true);
+ addRow(service->icon(), service->name(), desktopEntryName, checked);
+ }
+ }
+
+ // Load JSON-based plugins that implement the KFileItemActionPlugin interface
+ const auto jsonPlugins = KPluginLoader::findPlugins(QStringLiteral("kf5/kfileitemaction"), [](const KPluginMetaData& metaData) {
+ return metaData.serviceTypes().contains(QStringLiteral("KFileItemAction/Plugin"));
+ });
+
+ foreach (const auto& jsonMetadata, jsonPlugins) {
+ const QString desktopEntryName = jsonMetadata.pluginId();
+ if (!isInServicesList(desktopEntryName)) {
+ const bool checked = showGroup.readEntry(desktopEntryName, true);
+ addRow(jsonMetadata.iconName(), jsonMetadata.name(), desktopEntryName, checked);