Detect LV2 categories by URI

This commit is contained in:
Robin Gareus 2020-09-15 19:32:14 +02:00
parent ae89c15f02
commit c01b7b7842
Signed by: rgareus
GPG Key ID: A090BCE02CF57F04
2 changed files with 54 additions and 0 deletions

View File

@ -403,7 +403,16 @@ public:
PluginPtr load (Session& session);
std::vector<Plugin::PresetRecord> get_presets (bool user_only) const;
bool is_instrument () const;
bool is_utility () const;
bool is_analyzer () const;
char * _plugin_uri;
private:
bool _is_instrument;
bool _is_utility;
bool _is_analyzer;
};
typedef boost::shared_ptr<LV2PluginInfo> LV2PluginInfoPtr;

View File

@ -3675,6 +3675,24 @@ LV2PluginInfo::discover()
const LilvNode* label = lilv_plugin_class_get_label(pclass);
info->category = lilv_node_as_string(label);
/* check main category */
const char* pcat = lilv_node_as_uri (lilv_plugin_class_get_uri (pclass));
assert (pcat);
info->_is_instrument = 0 == strcmp (pcat, LV2_CORE__InstrumentPlugin);
info->_is_utility = 0 == strcmp (pcat, LV2_CORE__UtilityPlugin);
info->_is_analyzer = 0 == strcmp (pcat, LV2_CORE__AnalyserPlugin);
/* iterate over additional classes */
LilvPluginClasses* classes = lilv_plugin_class_get_children (pclass);
LILV_FOREACH(plugin_classes, i, classes) {
const char* pc = lilv_node_as_uri (lilv_plugin_class_get_uri (lilv_plugin_classes_get (classes, i)));
assert (pc);
info->_is_instrument |= 0 == strcmp (pc, LV2_CORE__InstrumentPlugin);
info->_is_utility |= 0 == strcmp (pc, LV2_CORE__UtilityPlugin);
info->_is_analyzer |= 0 == strcmp (pc, LV2_CORE__AnalyserPlugin);
}
lilv_plugin_classes_free (classes);
LilvNode* author_name = lilv_plugin_get_author_name(p);
info->creator = author_name ? string(lilv_node_as_string(author_name)) : "Unknown";
lilv_node_free(author_name);
@ -3734,3 +3752,30 @@ LV2PluginInfo::discover()
return plugs;
}
bool
LV2PluginInfo::is_instrument () const
{
if (_is_instrument) {
return true;
}
return PluginInfo::is_instrument ();
}
bool
LV2PluginInfo::is_utility () const
{
if (_is_utility) {
return true;
}
return PluginInfo::is_utility ();
}
bool
LV2PluginInfo::is_analyzer () const
{
if (_is_analyzer) {
return true;
}
return PluginInfo::is_analyzer ();
}