Mercurial > hg > svcore
diff plugin/PluginScan.cpp @ 1241:c6bdf247016a 3.0-integration
Support multiple plugin checker helpers, as for multiple piper servers
author | Chris Cannam |
---|---|
date | Tue, 01 Nov 2016 14:06:47 +0000 |
parents | c0cec4659784 |
children | 0492e54ccd56 |
line wrap: on
line diff
--- a/plugin/PluginScan.cpp Tue Nov 01 12:09:05 2016 +0000 +++ b/plugin/PluginScan.cpp Tue Nov 01 14:06:47 2016 +0000 @@ -15,6 +15,7 @@ #include "PluginScan.h" #include "base/Debug.h" +#include "base/HelperExecPath.h" #include "checker/knownplugins.h" @@ -50,22 +51,36 @@ } PluginScan::~PluginScan() { - delete m_kp; + clear(); delete m_logger; } void -PluginScan::scan(QString helperExecutablePath) +PluginScan::scan() { - delete m_kp; + QStringList helperPaths = + HelperExecPath::getHelperExecutables("plugin-checker-helper"); + + clear(); + + for (auto p: helperPaths) { + try { + KnownPlugins *kp = new KnownPlugins(p.toStdString(), m_logger); + m_kp.push_back(kp); + m_succeeded = true; + } catch (const std::exception &e) { + cerr << "ERROR: PluginScan::scan: " << e.what() + << " (with helper path = " << p << ")" << endl; + } + } +} + +void +PluginScan::clear() +{ + for (auto &p: m_kp) delete p; + m_kp.clear(); m_succeeded = false; - try { - m_kp = new KnownPlugins(helperExecutablePath.toStdString(), m_logger); - m_succeeded = true; - } catch (const std::exception &e) { - cerr << "ERROR: PluginScan::scan: " << e.what() << endl; - m_kp = 0; - } } QStringList @@ -80,9 +95,10 @@ } QStringList candidates; - if (!m_kp) return candidates; - auto c = m_kp->getCandidateLibrariesFor(kpt); - for (auto s: c) candidates.push_back(s.c_str()); + for (auto kp: m_kp) { + auto c = kp->getCandidateLibrariesFor(kpt); + for (auto s: c) candidates.push_back(s.c_str()); + } return candidates; } @@ -96,20 +112,23 @@ "installed alongside %1?</p>") .arg(QCoreApplication::applicationName()); } - if (!m_kp) { + if (m_kp.empty()) { return QObject::tr("<b>Did not scan for plugins</b>" "<p>Apparently no scan for plugins was attempted " "(internal error?)</p>"); } - string report = m_kp->getFailureReport(); + QString report; + for (auto kp: m_kp) { + report += QString::fromStdString(kp->getFailureReport()); + } if (report == "") { - return QString(report.c_str()); + return report; } return QObject::tr("<b>Failed to load plugins</b>" "<p>Failed to load one or more plugin libraries:</p>") - + QString(report.c_str()) + + report + QObject::tr("<p>These plugins may be incompatible with the system, " "and will be ignored during this run of %1.</p>") .arg(QCoreApplication::applicationName());