recursive VST scans
authorRobin Gareus <robin@gareus.org>
Tue, 3 Mar 2015 15:42:05 +0000 (16:42 +0100)
committerRobin Gareus <robin@gareus.org>
Tue, 3 Mar 2015 18:54:28 +0000 (19:54 +0100)
libs/ardour/plugin_manager.cc
libs/ardour/vst_info_file.cc

index f43f05835ec1b6fbd7df26b38bb385bd5ce75fce..e88541317c586ff42fc7c3dce307878d461688d4 100644 (file)
@@ -278,7 +278,7 @@ PluginManager::clear_vst_cache ()
 #ifdef WINDOWS_VST_SUPPORT
        {
                vector<string> fsi_files;
-               find_files_matching_regex (fsi_files, Config->get_plugin_path_vst(), "\\.fsi$");
+               find_files_matching_regex (fsi_files, Config->get_plugin_path_vst(), "\\.fsi$", true);
                for (vector<string>::iterator i = fsi_files.begin(); i != fsi_files.end (); ++i) {
                        ::g_unlink(i->c_str());
                }
@@ -288,7 +288,7 @@ PluginManager::clear_vst_cache ()
 #ifdef LXVST_SUPPORT
        {
                vector<string> fsi_files;
-               find_files_matching_regex (fsi_files, Config->get_plugin_path_lxvst(), "\\.fsi$");
+               find_files_matching_regex (fsi_files, Config->get_plugin_path_lxvst(), "\\.fsi$", true);
                for (vector<string>::iterator i = fsi_files.begin(); i != fsi_files.end (); ++i) {
                        ::g_unlink(i->c_str());
                }
@@ -299,7 +299,7 @@ PluginManager::clear_vst_cache ()
        {
                string personal = get_personal_vst_info_cache_dir();
                vector<string> fsi_files;
-               find_files_matching_regex (fsi_files, personal, "\\.fsi$");
+               find_files_matching_regex (fsi_files, personal, "\\.fsi$", /* user cache is flat, no recursion */ false);
                for (vector<string>::iterator i = fsi_files.begin(); i != fsi_files.end (); ++i) {
                        ::g_unlink(i->c_str());
                }
@@ -313,7 +313,7 @@ PluginManager::clear_vst_blacklist ()
 #ifdef WINDOWS_VST_SUPPORT
        {
                vector<string> fsi_files;
-               find_files_matching_regex (fsi_files, Config->get_plugin_path_vst(), "\\.fsb$");
+               find_files_matching_regex (fsi_files, Config->get_plugin_path_vst(), "\\.fsb$", true);
                for (vector<string>::iterator i = fsi_files.begin(); i != fsi_files.end (); ++i) {
                        ::g_unlink(i->c_str());
                }
@@ -323,7 +323,7 @@ PluginManager::clear_vst_blacklist ()
 #ifdef LXVST_SUPPORT
        {
                vector<string> fsi_files;
-               find_files_matching_regex (fsi_files, Config->get_plugin_path_lxvst(), "\\.fsb$");
+               find_files_matching_regex (fsi_files, Config->get_plugin_path_lxvst(), "\\.fsb$", true);
                for (vector<string>::iterator i = fsi_files.begin(); i != fsi_files.end (); ++i) {
                        ::g_unlink(i->c_str());
                }
@@ -335,7 +335,7 @@ PluginManager::clear_vst_blacklist ()
                string personal = get_personal_vst_blacklist_dir();
 
                vector<string> fsi_files;
-               find_files_matching_regex (fsi_files, personal, "\\.fsb$");
+               find_files_matching_regex (fsi_files, personal, "\\.fsb$", /* flat user cache */ false);
                for (vector<string>::iterator i = fsi_files.begin(); i != fsi_files.end (); ++i) {
                        ::g_unlink(i->c_str());
                }
@@ -699,7 +699,7 @@ PluginManager::windows_vst_discover_from_path (string path, bool cache_only)
 
        DEBUG_TRACE (DEBUG::PluginManager, string_compose ("detecting Windows VST plugins along %1\n", path));
 
-       find_files_matching_filter (plugin_objects, Config->get_plugin_path_vst(), windows_vst_filter, 0, false, true);
+       find_files_matching_filter (plugin_objects, Config->get_plugin_path_vst(), windows_vst_filter, 0, false, true, true);
 
        for (x = plugin_objects.begin(); x != plugin_objects.end (); ++x) {
                ARDOUR::PluginScanMessage(_("VST"), *x, !cache_only && !cancelled());
@@ -818,7 +818,7 @@ PluginManager::lxvst_discover_from_path (string path, bool cache_only)
 
        DEBUG_TRACE (DEBUG::PluginManager, string_compose ("Discovering linuxVST plugins along %1\n", path));
 
-       find_files_matching_filter (plugin_objects, Config->get_plugin_path_lxvst(), lxvst_filter, 0, false, true);
+       find_files_matching_filter (plugin_objects, Config->get_plugin_path_lxvst(), lxvst_filter, 0, false, true, true);
 
        for (x = plugin_objects.begin(); x != plugin_objects.end (); ++x) {
                ARDOUR::PluginScanMessage(_("LXVST"), *x, !cache_only && !cancelled());
index 731f3e67e8f55584b72008a855f662b4f608d18d..2d68421103d0d14930f8ff9d5925ba333d39540f 100644 (file)
@@ -97,6 +97,7 @@ vstfx_cache_file (const char* dllpath, int personal, const char *ext)
        string dir;
        if (personal) {
                dir = get_personal_vst_info_cache_dir();
+               // TODO prefix path relative to scan-root to avoid duplicates
        } else {
                dir = Glib::path_get_dirname (std::string(dllpath));
        }