lv2 phase 2 fixups
[goodguy/history.git] / cinelerra-5.1 / cinelerra / pluginlv2client.C
index 7ccb6ef8f2aad633d36c2a0c931fc7034c4872b0..6163f2dfd9867e1c7e16550d465acc15e51c785a 100644 (file)
@@ -307,6 +307,36 @@ int PluginLV2Client::process_realtime(int64_t size,
 }
 
 
+PluginLV2BlackList::PluginLV2BlackList(const char *path)
+{
+       set_array_delete();
+       char lv2_blacklist_path[BCTEXTLEN];
+       sprintf(lv2_blacklist_path, "%s/%s", File::get_cindat_path(), path);
+       FILE *bfp = fopen(lv2_blacklist_path, "r");
+       if( !bfp ) return;
+       while( fgets(lv2_blacklist_path, sizeof(lv2_blacklist_path), bfp) ) {
+               if( lv2_blacklist_path[0] == '#' ) continue;
+               int len = strlen(lv2_blacklist_path);
+               if( len > 0 && lv2_blacklist_path[len-1] == '\n' )
+                       lv2_blacklist_path[len-1] = 0;
+               if( !lv2_blacklist_path[0] ) continue;
+               append(cstrdup(lv2_blacklist_path));
+       }
+       fclose(bfp);
+}
+
+PluginLV2BlackList::~PluginLV2BlackList()
+{
+       remove_all_objects();
+}
+
+int PluginLV2BlackList::is_badboy(const char *uri)
+{
+       for( int i=size(); --i>=0; )
+               if( !strcmp(uri, get(i)) ) return 1;
+       return 0;
+}
+
 PluginServer* MWindow::new_lv2_server(MWindow *mwindow, const char *name)
 {
        return new PluginServer(mwindow, name, PLUGIN_TYPE_LV2);
@@ -323,6 +353,8 @@ PluginClient *PluginServer::new_lv2_plugin()
 int MWindow::init_lv2_index(MWindow *mwindow, Preferences *preferences, FILE *fp)
 {
        printf("init lv2 index:\n");
+       PluginLV2BlackList blacklist("lv2_blacklist.txt");
+
        LilvWorld *world = lilv_world_new();
        lilv_world_load_all(world);
        const LilvPlugins *all_plugins = lilv_world_get_all_plugins(world);
@@ -330,6 +362,8 @@ int MWindow::init_lv2_index(MWindow *mwindow, Preferences *preferences, FILE *fp
        LILV_FOREACH(plugins, i, all_plugins) {
                const LilvPlugin *lilv = lilv_plugins_get(all_plugins, i);
                const char *uri = lilv_node_as_uri(lilv_plugin_get_uri(lilv));
+               if( blacklist.is_badboy(uri) ) continue;
+printf("LOAD: %s\n", uri);
                PluginServer server(mwindow, uri, PLUGIN_TYPE_LV2);
                int result = server.open_plugin(1, preferences, 0, 0);
                if( !result ) {
@@ -424,16 +458,14 @@ int PluginLV2ParentUI::hide()
        return 0;
 }
 
-
-// stub in parent
-int PluginLV2ChildUI::handle_child() { return 0; }
-void PluginLV2UI::reset_gui() {}
-
 ForkChild *PluginLV2ParentUI::new_fork()
 {
        return new PluginLV2ChildUI();
 }
 
+// stub in parent
+int PluginLV2ChildUI::child_iteration(int64_t usec) { return -1; }
+int PluginLV2ChildUI::send_host(int64_t token, const void *data, int bytes) { return -1; }
 
 #else
 #include "mwindow.h"