From 7a85b4d547bc22bde6cb3ca7e77ad45ae19306c6 Mon Sep 17 00:00:00 2001 From: Johannes Lorenz Date: Sat, 21 Nov 2020 04:08:21 +0100 Subject: [PATCH] Lv2Manager: Print issues uniq-ed --- include/Lv2ControlBase.h | 2 +- include/Lv2Proc.h | 2 +- include/PluginIssue.h | 2 ++ src/core/PluginIssue.cpp | 18 ++++++++++++++++++ src/core/lv2/Lv2ControlBase.cpp | 4 ++-- src/core/lv2/Lv2Manager.cpp | 15 ++++++++++++++- src/core/lv2/Lv2Proc.cpp | 12 +----------- 7 files changed, 39 insertions(+), 16 deletions(-) diff --git a/include/Lv2ControlBase.h b/include/Lv2ControlBase.h index acfbea25ee..176b5045c5 100644 --- a/include/Lv2ControlBase.h +++ b/include/Lv2ControlBase.h @@ -70,7 +70,7 @@ class LMMS_EXPORT Lv2ControlBase : public LinkedModelGroups { public: static Plugin::PluginTypes check(const LilvPlugin* m_plugin, - std::vector &issues, bool printIssues = false); + std::vector &issues); const LilvPlugin* getPlugin() const { return m_plugin; } diff --git a/include/Lv2Proc.h b/include/Lv2Proc.h index 81e25f785f..702f41cb9a 100644 --- a/include/Lv2Proc.h +++ b/include/Lv2Proc.h @@ -61,7 +61,7 @@ class Lv2Proc : public LinkedModelGroup { public: static Plugin::PluginTypes check(const LilvPlugin* plugin, - std::vector &issues, bool printIssues = false); + std::vector &issues); /* ctor/dtor diff --git a/include/PluginIssue.h b/include/PluginIssue.h index 7f42a9409d..18bb6c5e74 100644 --- a/include/PluginIssue.h +++ b/include/PluginIssue.h @@ -63,6 +63,8 @@ public: { } PluginIssueType type() const { return m_issueType; } + bool operator==(const PluginIssue& other) const; + bool operator<(const PluginIssue& other) const; friend QDebug operator<<(QDebug stream, const PluginIssue& iss); }; diff --git a/src/core/PluginIssue.cpp b/src/core/PluginIssue.cpp index 6214eba028..1b54fb41cc 100644 --- a/src/core/PluginIssue.cpp +++ b/src/core/PluginIssue.cpp @@ -67,6 +67,24 @@ const char *PluginIssue::msgFor(const PluginIssueType &it) +bool PluginIssue::operator==(const PluginIssue &other) const +{ + return (m_issueType == other.m_issueType) && (m_info == other.m_info); +} + + + + +bool PluginIssue::operator<(const PluginIssue &other) const +{ + return (m_issueType != other.m_issueType) + ? m_issueType < other.m_issueType + : m_info < other.m_info; +} + + + + QDebug operator<<(QDebug stream, const PluginIssue &iss) { stream << PluginIssue::msgFor(iss.m_issueType); diff --git a/src/core/lv2/Lv2ControlBase.cpp b/src/core/lv2/Lv2ControlBase.cpp index 00326eeb88..e7ede9dd60 100644 --- a/src/core/lv2/Lv2ControlBase.cpp +++ b/src/core/lv2/Lv2ControlBase.cpp @@ -37,10 +37,10 @@ Plugin::PluginTypes Lv2ControlBase::check(const LilvPlugin *plugin, - std::vector &issues, bool printIssues) + std::vector &issues) { // for some reason, all checks can be done by one processor... - return Lv2Proc::check(plugin, issues, printIssues); + return Lv2Proc::check(plugin, issues); } diff --git a/src/core/lv2/Lv2Manager.cpp b/src/core/lv2/Lv2Manager.cpp index 93946d4262..635b5462c4 100644 --- a/src/core/lv2/Lv2Manager.cpp +++ b/src/core/lv2/Lv2Manager.cpp @@ -118,7 +118,20 @@ void Lv2Manager::initPlugins() const LilvPlugin* curPlug = lilv_plugins_get(plugins, itr); std::vector issues; - Plugin::PluginTypes type = Lv2ControlBase::check(curPlug, issues, m_debug); + Plugin::PluginTypes type = Lv2ControlBase::check(curPlug, issues); + std::sort(issues.begin(), issues.end()); + auto last = std::unique(issues.begin(), issues.end()); + issues.erase(last, issues.end()); + if (m_debug && issues.size()) + { + qDebug() << "Lv2 plugin" + << qStringFromPluginNode(curPlug, lilv_plugin_get_name) + << "(URI:" + << lilv_node_as_uri(lilv_plugin_get_uri(curPlug)) + << ") can not be loaded:"; + for (const PluginIssue& iss : issues) { qDebug() << " - " << iss; } + } + Lv2Info info(curPlug, type, issues.empty()); m_lv2InfoMap[lilv_node_as_uri(lilv_plugin_get_uri(curPlug))] diff --git a/src/core/lv2/Lv2Proc.cpp b/src/core/lv2/Lv2Proc.cpp index e27ffaa9de..e02991789d 100644 --- a/src/core/lv2/Lv2Proc.cpp +++ b/src/core/lv2/Lv2Proc.cpp @@ -58,7 +58,7 @@ struct MidiInputEvent Plugin::PluginTypes Lv2Proc::check(const LilvPlugin *plugin, - std::vector& issues, bool printIssues) + std::vector& issues) { unsigned maxPorts = lilv_plugin_get_num_ports(plugin); enum { inCount, outCount, maxCount }; @@ -128,16 +128,6 @@ Plugin::PluginTypes Lv2Proc::check(const LilvPlugin *plugin, } } - if (printIssues && issues.size()) - { - qDebug() << "Lv2 plugin" - << qStringFromPluginNode(plugin, lilv_plugin_get_name) - << "(URI:" - << lilv_node_as_uri(lilv_plugin_get_uri(plugin)) - << ") can not be loaded:"; - for (const PluginIssue& iss : issues) { qDebug() << " - " << iss; } - } - return (audioChannels[inCount] > 2 || audioChannels[outCount] > 2) ? Plugin::Undefined : (audioChannels[inCount] > 0)