summaryrefslogtreecommitdiffstats
path: root/sigtools
diff options
context:
space:
mode:
authorBen Boeckel <MathStuf@gmail.com>2009-06-06 18:33:20 -0400
committerBen Boeckel <MathStuf@gmail.com>2009-06-06 18:33:20 -0400
commit51f1d2c9d6c2a2b89821143de8fc3bce95d8f164 (patch)
tree8c801023690e0e8b85ca402bc15be52953b948f6 /sigtools
parentd1f49af94f06c5e658dd9d616fadde8694e74f2b (diff)
downloadsigen-51f1d2c9d6c2a2b89821143de8fc3bce95d8f164.tar.gz
sigen-51f1d2c9d6c2a2b89821143de8fc3bce95d8f164.tar.xz
sigen-51f1d2c9d6c2a2b89821143de8fc3bce95d8f164.zip
Add a query for plugins that have given extensions
Diffstat (limited to 'sigtools')
-rw-r--r--sigtools/PluginLoader.cpp15
-rw-r--r--sigtools/PluginLoader.h1
2 files changed, 16 insertions, 0 deletions
diff --git a/sigtools/PluginLoader.cpp b/sigtools/PluginLoader.cpp
index 2603c169..a155399c 100644
--- a/sigtools/PluginLoader.cpp
+++ b/sigtools/PluginLoader.cpp
@@ -35,6 +35,7 @@
// Qt includes
#include <QtCore/QFile>
+#include <QtCore/QSet>
using namespace Sigmod;
using namespace Sigscript;
@@ -51,6 +52,20 @@ QStringList PluginLoader::availablePlugins(const QString& type, const bool force
return loader->services(type);
}
+QStringList PluginLoader::services(const QString& type, const QStringList& extensions)
+{
+ const QSet<QString> query = extensions.toSet();
+ const QStringList names = loader->services(type);
+ QStringList list;
+ foreach (const QString& name, names)
+ {
+ PluginBase* plugin = loader->factory(type, name);
+ if (plugin && (plugin->extensions(name).toSet().intersect(query).size() == query.size()))
+ list.append(name);
+ }
+ return list;
+}
+
KService::Ptr PluginLoader::service(const QString& type, const QString& name)
{
return loader->service(type, name);
diff --git a/sigtools/PluginLoader.h b/sigtools/PluginLoader.h
index ce8b6dc7..4d7460f7 100644
--- a/sigtools/PluginLoader.h
+++ b/sigtools/PluginLoader.h
@@ -50,6 +50,7 @@ namespace Sigtools
namespace PluginLoader
{
SIGTOOLS_EXPORT QStringList availablePlugins(const QString& type, const bool forceLookup = false);
+ SIGTOOLS_EXPORT KService::List services(const QString& type, const QStringList& extensions);
SIGTOOLS_EXPORT KService::Ptr service(const QString& type, const QString& name);
SIGTOOLS_EXPORT QString description(const QString& type, const QString& name);