changeset 47:cedcaa258e22

Support "from" field in list request
author Chris Cannam
date Mon, 07 Nov 2016 14:49:05 +0000
parents b780e56eebb4
children 1ed825597b6f
files PiperAdapter.h PiperPluginLibrary.cpp PiperPluginLibrary.h
diffstat 3 files changed, 33 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/PiperAdapter.h	Thu Oct 13 18:13:55 2016 +0100
+++ b/PiperAdapter.h	Mon Nov 07 14:49:05 2016 +0000
@@ -48,6 +48,7 @@
 class PiperAdapterInterface
 {
 public:
+    virtual std::string getLibraryName() const = 0;
     virtual piper_vamp::PluginStaticData getStaticData() const = 0;
     virtual piper_vamp::LoadResponse loadPlugin(piper_vamp::LoadRequest r) const = 0;
     virtual Vamp::Plugin *createPlugin(float inputSampleRate) const = 0;
@@ -65,8 +66,12 @@
     
 public:
     virtual Vamp::Plugin *createPlugin(float inputSampleRate) const = 0;
+
+    virtual std::string getLibraryName() const override {
+        return m_soname;
+    }
     
-    virtual piper_vamp::PluginStaticData getStaticData() const {
+    virtual piper_vamp::PluginStaticData getStaticData() const override {
         Vamp::Plugin *p = createPlugin(44100.f);
 	auto data = piper_vamp::PluginStaticData::fromPlugin
 	    (m_soname + ":" + p->getIdentifier(),
@@ -76,7 +81,8 @@
         return data;
     }
 
-    virtual piper_vamp::LoadResponse loadPlugin(piper_vamp::LoadRequest r) const {
+    virtual piper_vamp::LoadResponse loadPlugin(piper_vamp::LoadRequest r)
+        const override {
 	
 	// We assume the caller has guaranteed that the request is for
 	// the correct plugin (so we don't have to check the plugin
@@ -130,7 +136,7 @@
 public:
     PiperAdapter(std::string libname) : PiperAdapterBase<P>(libname) { }
     
-    virtual Vamp::Plugin *createPlugin(float inputSampleRate) const {
+    virtual Vamp::Plugin *createPlugin(float inputSampleRate) const override {
         return new P(inputSampleRate);
     }
 };
--- a/PiperPluginLibrary.cpp	Thu Oct 13 18:13:55 2016 +0100
+++ b/PiperPluginLibrary.cpp	Mon Nov 07 14:49:05 2016 +0000
@@ -70,10 +70,24 @@
 }
 
 ListResponse
-PiperPluginLibrary::listPluginData() const
+PiperPluginLibrary::listPluginData(ListRequest req) const
 {
+    bool filtered = !req.from.empty();
     ListResponse resp;
     for (auto a: m_adapters) {
+        if (filtered) {
+            auto n = a.second->getLibraryName();
+            bool found = false;
+            for (const auto &f: req.from) {
+                if (f == n) {
+                    found = true;
+                    break;
+                }
+            }
+            if (!found) {
+                continue;
+            }
+        }
 	resp.available.push_back(a.second->getStaticData());
     }
     return resp;
@@ -189,8 +203,15 @@
     switch (type) {
 
     case RRType::List:
-        rj = VampJson::fromRpcResponse_List(listPluginData(), id);
+    {
+        auto req = VampJson::toRpcRequest_List(j, err);
+        if (err != "") {
+            rj = VampJson::fromError(err, type, id);
+        } else {
+            rj = VampJson::fromRpcResponse_List(listPluginData(req), id);
+        }
         break;
+    }
 
     case RRType::Load:
     {
--- a/PiperPluginLibrary.h	Thu Oct 13 18:13:55 2016 +0100
+++ b/PiperPluginLibrary.h	Mon Nov 07 14:49:05 2016 +0000
@@ -69,7 +69,7 @@
     std::string requestJsonImpl(std::string req);
     std::string processRawImpl(int, const float *const *, int, int);
 
-    piper_vamp::ListResponse listPluginData() const;
+    piper_vamp::ListResponse listPluginData(piper_vamp::ListRequest r) const;
     piper_vamp::LoadResponse loadPlugin(piper_vamp::LoadRequest r,
                                         std::string &err) const;
     piper_vamp::ConfigurationResponse configurePlugin(piper_vamp::ConfigurationRequest r,