From f2c145b2fc9d6ffce838398e06f7aa583d05887d Mon Sep 17 00:00:00 2001 From: LostDragonist Date: Sat, 5 Jan 2019 16:34:10 -0600 Subject: Change qPrintable to qUtf8Printable to better support non-ASCII text --- src/plugincontainer.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) (limited to 'src/plugincontainer.cpp') diff --git a/src/plugincontainer.cpp b/src/plugincontainer.cpp index 8935c472..46a95f0c 100644 --- a/src/plugincontainer.cpp +++ b/src/plugincontainer.cpp @@ -160,12 +160,12 @@ bool PluginContainer::registerPlugin(QObject *plugin, const QString &fileName) for (QObject *proxiedPlugin : matchingPlugins) { if (proxiedPlugin != nullptr) { if (registerPlugin(proxiedPlugin, pluginName)) { - qDebug("loaded plugin \"%s\"", qPrintable(QFileInfo(pluginName).fileName())); + qDebug("loaded plugin \"%s\"", qUtf8Printable(QFileInfo(pluginName).fileName())); } else { qWarning("plugin \"%s\" failed to load. If this plugin is for an older version of MO " "you have to update it or delete it if no update exists.", - qPrintable(pluginName)); + qUtf8Printable(pluginName)); } } } @@ -220,7 +220,7 @@ void PluginContainer::unloadPlugins() QPluginLoader *loader = m_PluginLoaders.back(); m_PluginLoaders.pop_back(); if ((loader != nullptr) && !loader->unload()) { - qDebug("failed to unload %s: %s", qPrintable(loader->fileName()), qPrintable(loader->errorString())); + qDebug("failed to unload %s: %s", qUtf8Printable(loader->fileName()), qUtf8Printable(loader->errorString())); } delete loader; } @@ -275,7 +275,7 @@ void PluginContainer::loadPlugins() while (iter.hasNext()) { iter.next(); if (m_Organizer->settings().pluginBlacklisted(iter.fileName())) { - qDebug("plugin \"%s\" blacklisted", qPrintable(iter.fileName())); + qDebug("plugin \"%s\" blacklisted", qUtf8Printable(iter.fileName())); continue; } loadCheck.write(iter.fileName().toUtf8()); @@ -287,14 +287,14 @@ void PluginContainer::loadPlugins() if (pluginLoader->instance() == nullptr) { m_FailedPlugins.push_back(pluginName); qCritical("failed to load plugin %s: %s", - qPrintable(pluginName), qPrintable(pluginLoader->errorString())); + qUtf8Printable(pluginName), qUtf8Printable(pluginLoader->errorString())); } else { if (registerPlugin(pluginLoader->instance(), pluginName)) { - qDebug("loaded plugin \"%s\"", qPrintable(QFileInfo(pluginName).fileName())); + qDebug("loaded plugin \"%s\"", qUtf8Printable(QFileInfo(pluginName).fileName())); m_PluginLoaders.push_back(pluginLoader.release()); } else { m_FailedPlugins.push_back(pluginName); - qWarning("plugin \"%s\" failed to load (may be outdated)", qPrintable(pluginName)); + qWarning("plugin \"%s\" failed to load (may be outdated)", qUtf8Printable(pluginName)); } } } -- cgit v1.3.1 From 1f3133059e3c821e92dbaa6e3149dd59ce86c245 Mon Sep 17 00:00:00 2001 From: LostDragonist Date: Sat, 23 Mar 2019 21:21:51 -0500 Subject: Prevent diagnose plugins that return false for isActive from reporting notifications --- src/mainwindow.cpp | 11 ++++++++--- src/plugincontainer.cpp | 4 ++++ src/plugincontainer.h | 1 + src/problemsdialog.cpp | 15 ++++++++++++--- src/problemsdialog.h | 6 +++--- 5 files changed, 28 insertions(+), 9 deletions(-) (limited to 'src/plugincontainer.cpp') diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 76101be1..ea46b175 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -727,8 +727,13 @@ bool MainWindow::errorReported(QString &logFile) size_t MainWindow::checkForProblems() { size_t numProblems = 0; - for (IPluginDiagnose *diagnose : m_PluginContainer.plugins()) { - numProblems += diagnose->activeProblems().size(); + for (QObject *pluginObj : m_PluginContainer.plugins()) { + IPlugin *plugin = qobject_cast(pluginObj); + if (plugin == nullptr || plugin->isActive()) { + IPluginDiagnose *diagnose = qobject_cast(pluginObj); + if (diagnose != nullptr) + numProblems += diagnose->activeProblems().size(); + } } return numProblems; } @@ -6063,7 +6068,7 @@ void MainWindow::on_bsaList_itemChanged(QTreeWidgetItem*, int) void MainWindow::on_actionNotifications_triggered() { updateProblemsButton(); - ProblemsDialog problems(m_PluginContainer.plugins(), this); + ProblemsDialog problems(m_PluginContainer.plugins(), this); if (problems.hasProblems()) { QSettings &settings = m_OrganizerCore.settings().directInterface(); QString key = QString("geometry/%1").arg(problems.objectName()); diff --git a/src/plugincontainer.cpp b/src/plugincontainer.cpp index 46a95f0c..2126c5ef 100644 --- a/src/plugincontainer.cpp +++ b/src/plugincontainer.cpp @@ -84,6 +84,10 @@ void PluginContainer::registerGame(IPluginGame *game) bool PluginContainer::registerPlugin(QObject *plugin, const QString &fileName) { + // Storing the original QObject* is a bit of a hack as I couldn't figure out any + // way to cast directly between IPlugin* and IPluginDiagnose* + bf::at_key(m_Plugins).push_back(plugin); + { // generic treatment for all plugins IPlugin *pluginObj = qobject_cast(plugin); if (pluginObj == nullptr) { diff --git a/src/plugincontainer.h b/src/plugincontainer.h index 172dbd09..21ad4241 100644 --- a/src/plugincontainer.h +++ b/src/plugincontainer.h @@ -32,6 +32,7 @@ class PluginContainer : public QObject, public MOBase::IPluginDiagnose private: typedef boost::fusion::map< + boost::fusion::pair>, boost::fusion::pair>, boost::fusion::pair>, boost::fusion::pair>, diff --git a/src/problemsdialog.cpp b/src/problemsdialog.cpp index 60a0b1df..795baab0 100644 --- a/src/problemsdialog.cpp +++ b/src/problemsdialog.cpp @@ -1,6 +1,7 @@ #include "problemsdialog.h" #include "ui_problemsdialog.h" #include +#include #include #include #include @@ -9,8 +10,8 @@ using namespace MOBase; -ProblemsDialog::ProblemsDialog(std::vector diagnosePlugins, QWidget *parent) - : QDialog(parent), ui(new Ui::ProblemsDialog), m_DiagnosePlugins(diagnosePlugins) +ProblemsDialog::ProblemsDialog(std::vector pluginObjects, QWidget *parent) + : QDialog(parent), ui(new Ui::ProblemsDialog), m_PluginObjects(pluginObjects) { ui->setupUi(this); @@ -29,7 +30,15 @@ ProblemsDialog::~ProblemsDialog() void ProblemsDialog::runDiagnosis() { ui->problemsWidget->clear(); - foreach (IPluginDiagnose *diagnose, m_DiagnosePlugins) { + for(QObject *pluginObj : m_PluginObjects) { + IPlugin *plugin = qobject_cast(pluginObj); + if (plugin != nullptr && !plugin->isActive()) + continue; + + IPluginDiagnose *diagnose = qobject_cast(pluginObj); + if (diagnose == nullptr) + continue; + std::vector activeProblems = diagnose->activeProblems(); foreach (unsigned int key, activeProblems) { QTreeWidgetItem *newItem = new QTreeWidgetItem(); diff --git a/src/problemsdialog.h b/src/problemsdialog.h index 24a69cdf..a48a5de1 100644 --- a/src/problemsdialog.h +++ b/src/problemsdialog.h @@ -15,9 +15,9 @@ class ProblemsDialog; class ProblemsDialog : public QDialog { Q_OBJECT - + public: - explicit ProblemsDialog(std::vector diagnosePlugins, QWidget *parent = 0); + explicit ProblemsDialog(std::vector pluginObjects, QWidget *parent = 0); ~ProblemsDialog(); bool hasProblems() const; @@ -34,7 +34,7 @@ private slots: private: Ui::ProblemsDialog *ui; - std::vector m_DiagnosePlugins; + std::vector m_PluginObjects; }; #endif // PROBLEMSDIALOG_H -- cgit v1.3.1