diff --git a/libs/ardour/ardour/plugin_manager.h b/libs/ardour/ardour/plugin_manager.h index 3f6b250b68..393b07e38b 100644 --- a/libs/ardour/ardour/plugin_manager.h +++ b/libs/ardour/ardour/plugin_manager.h @@ -302,6 +302,8 @@ private: void reset_scan_cancel_state (bool single = false); + void get_all_plugins (PluginInfoList&) const; + bool no_timeout () const { return _cancel_scan_timeout_one || _cancel_scan_timeout_all; } void detect_name_ambiguities (ARDOUR::PluginInfoList*); diff --git a/libs/ardour/plugin_manager.cc b/libs/ardour/plugin_manager.cc index 416624a7ce..13e43708fd 100644 --- a/libs/ardour/plugin_manager.cc +++ b/libs/ardour/plugin_manager.cc @@ -610,18 +610,8 @@ PluginManager::refresh (bool cache_only) } void -PluginManager::detect_ambiguities () +PluginManager::get_all_plugins (PluginInfoList& all_plugs) const { - detect_name_ambiguities (_windows_vst_plugin_info); - detect_name_ambiguities (_lxvst_plugin_info); - detect_name_ambiguities (_mac_vst_plugin_info); - detect_name_ambiguities (_au_plugin_info); - detect_name_ambiguities (_ladspa_plugin_info); - detect_name_ambiguities (_lv2_plugin_info); - detect_name_ambiguities (_lua_plugin_info); - detect_name_ambiguities (_vst3_plugin_info); - - PluginInfoList all_plugs; if (_windows_vst_plugin_info) { all_plugs.insert(all_plugs.end(), _windows_vst_plugin_info->begin(), _windows_vst_plugin_info->end()); } @@ -646,6 +636,22 @@ PluginManager::detect_ambiguities () if (_lua_plugin_info) { all_plugs.insert(all_plugs.end(), _lua_plugin_info->begin(), _lua_plugin_info->end()); } +} + +void +PluginManager::detect_ambiguities () +{ + detect_name_ambiguities (_windows_vst_plugin_info); + detect_name_ambiguities (_lxvst_plugin_info); + detect_name_ambiguities (_mac_vst_plugin_info); + detect_name_ambiguities (_au_plugin_info); + detect_name_ambiguities (_ladspa_plugin_info); + detect_name_ambiguities (_lv2_plugin_info); + detect_name_ambiguities (_lua_plugin_info); + detect_name_ambiguities (_vst3_plugin_info); + + PluginInfoList all_plugs; + get_all_plugins (all_plugs); detect_type_ambiguities (all_plugs); save_scanlog (); @@ -2898,12 +2904,25 @@ PluginManager::get_all_tags (TagFilter tag_filter) const { std::vector ret; + PluginInfoList all_plugs; + get_all_plugins (all_plugs); + + std::map> nfos; + for (auto const& nfo : all_plugs) { + nfos[to_generic_vst (nfo->type)].insert (nfo->unique_id); + } + PluginTagList::const_iterator pt; for (pt = ptags.begin(); pt != ptags.end(); ++pt) { if ((*pt).tags.empty ()) { continue; } + if (nfos[(*pt).type].find ((*pt).unique_id) == nfos[(*pt).type].end ()) { + /* Plugin is not installed */ + continue; + } + /* if favorites_only then we need to check the info ptr and maybe skip */ if (tag_filter == OnlyFavorites) { PluginStatus stat ((*pt).type, (*pt).unique_id);