From 640ec3a573c4e00f28555bb8250662cce9d1fba6 Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Fri, 16 Feb 2018 03:49:36 +0100 Subject: [PATCH] Ref T252, send all loading status messages as list --- .../simulation/aircraftmodelloader.cpp | 29 ++++++++++++------- .../simulation/aircraftmodelloader.h | 10 +++---- .../simulation/fscommon/aircraftcfgparser.cpp | 4 +-- .../xplane/aircraftmodelloaderxplane.cpp | 14 +++++---- 4 files changed, 33 insertions(+), 24 deletions(-) diff --git a/src/blackmisc/simulation/aircraftmodelloader.cpp b/src/blackmisc/simulation/aircraftmodelloader.cpp index 027976868..efe29a00a 100644 --- a/src/blackmisc/simulation/aircraftmodelloader.cpp +++ b/src/blackmisc/simulation/aircraftmodelloader.cpp @@ -18,6 +18,7 @@ #include #include #include +#include using namespace BlackMisc; using namespace BlackMisc::Simulation::Data; @@ -35,8 +36,8 @@ namespace BlackMisc m_caches.setCurrentSimulator(simulator); // first connect is an internal connection to log info about load status - connect(this, &IAircraftModelLoader::loadingFinished, this, &IAircraftModelLoader::loadFinished); - connect(&m_caches, &IMultiSimulatorModelCaches::cacheChanged, this, &IAircraftModelLoader::cacheChanged); + connect(this, &IAircraftModelLoader::loadingFinished, this, &IAircraftModelLoader::onLoadingFinished); + connect(&m_caches, &IMultiSimulatorModelCaches::cacheChanged, this, &IAircraftModelLoader::onCacheChanged); } QString IAircraftModelLoader::enumToString(IAircraftModelLoader::LoadFinishedInfo info) @@ -110,7 +111,7 @@ namespace BlackMisc } } - void IAircraftModelLoader::loadFinished(const CStatusMessage &status, const BlackMisc::Simulation::CSimulatorInfo &simulator, LoadFinishedInfo info) + void IAircraftModelLoader::onLoadingFinished(const CStatusMessageList &statusMsgs, const CSimulatorInfo &simulator, LoadFinishedInfo info) { Q_UNUSED(info); @@ -118,17 +119,22 @@ namespace BlackMisc // so there is some redundancy here between status and m_loadingMessages m_loadingInProgress = false; - if (m_loadingMessages.hasWarningOrErrorMessages()) + const QMap counts = statusMsgs.countSeverities(); + const int errors = counts.value(SeverityError); + const int warnings = counts.value(SeverityWarning); + + if (statusMsgs.hasWarningOrErrorMessages()) { - CLogMessage::preformatted(m_loadingMessages); + CLogMessage(this).log(m_loadingMessages.worstSeverity(), + "Message loading produced %1 error and %2 warning messages") << errors << warnings; } else { - CLogMessage(this).info("Loading finished, success '%1' for '%2'") << status.getMessage() << simulator.toQString(); + CLogMessage(this).info("Loading finished, success for '%1'") << simulator.toQString(); } } - void IAircraftModelLoader::cacheChanged(const CSimulatorInfo &simInfo) + void IAircraftModelLoader::onCacheChanged(const CSimulatorInfo &simInfo) { static const CStatusMessage status(this, CStatusMessage::SeverityInfo, "Cached changed"); emit this->loadingFinished(status, simInfo, CacheLoaded); @@ -211,10 +217,11 @@ namespace BlackMisc const QStringList modelDirs = this->getInitializedModelDirectories(modelDirectories, simulator); if (m_skipLoadingEmptyModelDir && modelDirs.isEmpty()) { - const CStatusMessage status = CStatusMessage(this, CStatusMessage::SeverityWarning, "Empty or not existing %1 directory '%2', skipping read") + const CStatusMessage status = CStatusMessage(this, CStatusMessage::SeverityWarning, + "Empty or not existing %1 directory '%2', skipping read") << simulator.toQString() << modelDirectories.join(", "); m_loadingMessages.push_back(status); - emit loadingFinished(status, simulator, LoadingSkipped); + emit this->loadingFinished(m_loadingMessages, simulator, LoadingSkipped); return; } @@ -258,9 +265,9 @@ namespace BlackMisc return m_caches.getInfoStringFsFamily(); } - CSimulatorSettings IAircraftModelLoader::getCurrentSimulatorSettings() const + CSpecializedSimulatorSettings IAircraftModelLoader::getCurrentSimulatorSettings() const { - return m_settings.getSettings(this->getSimulator()); + return m_settings.getSpecializedSettings(this->getSimulator()); } std::unique_ptr IAircraftModelLoader::createModelLoader(const CSimulatorInfo &simulator) diff --git a/src/blackmisc/simulation/aircraftmodelloader.h b/src/blackmisc/simulation/aircraftmodelloader.h index 16d314127..62de21d09 100644 --- a/src/blackmisc/simulation/aircraftmodelloader.h +++ b/src/blackmisc/simulation/aircraftmodelloader.h @@ -18,7 +18,7 @@ #include "blackmisc/simulation/data/modelcaches.h" #include "blackmisc/simulation/settings/simulatorsettings.h" #include "blackmisc/simulation/simulatorinfo.h" -#include "blackmisc/statusmessage.h" +#include "blackmisc/statusmessagelist.h" #include #include @@ -151,7 +151,7 @@ namespace BlackMisc QString getInfoStringFsFamily() const; //! Current simulator settings - Settings::CSimulatorSettings getCurrentSimulatorSettings() const; + Settings::CSpecializedSimulatorSettings getCurrentSimulatorSettings() const; //! Access to multi simulator settings const Settings::CMultiSimulatorSettings &multiSimulatorSettings() const { return m_settings; } @@ -180,7 +180,7 @@ namespace BlackMisc signals: //! Parsing is finished or cache has been loaded - void loadingFinished(const BlackMisc::CStatusMessage &status, const BlackMisc::Simulation::CSimulatorInfo &simulator, LoadFinishedInfo info); + void loadingFinished(const CStatusMessageList &status, const CSimulatorInfo &simulator, LoadFinishedInfo info); protected: //! Constructor @@ -199,10 +199,10 @@ namespace BlackMisc virtual void startLoadingFromDisk(LoadMode mode, const ModelConsolidation &modelConsolidation, const QStringList &modelDirectories) = 0; //! Loading finished, also logs messages - void loadFinished(const CStatusMessage &status, const CSimulatorInfo &simulator, LoadFinishedInfo info); + void onLoadingFinished(const CStatusMessageList &statusMsgs, const CSimulatorInfo &simulator, LoadFinishedInfo info); //! A cache has been changed - void cacheChanged(const CSimulatorInfo &simInfo); + void onCacheChanged(const CSimulatorInfo &simInfo); //! Get model directories from settings if empty, otherwise checked and UNC path fixed QStringList getInitializedModelDirectories(const QStringList &modelDirectories, const CSimulatorInfo &simulator) const; diff --git a/src/blackmisc/simulation/fscommon/aircraftcfgparser.cpp b/src/blackmisc/simulation/fscommon/aircraftcfgparser.cpp index 60fb26cbf..24f189a69 100644 --- a/src/blackmisc/simulation/fscommon/aircraftcfgparser.cpp +++ b/src/blackmisc/simulation/fscommon/aircraftcfgparser.cpp @@ -107,9 +107,7 @@ namespace BlackMisc } else { - CStatusMessage status = m_loadingMessages.toSingleMessage(); - status.setSeverity(CStatusMessage::SeverityError); - emit this->loadingFinished(status, simulator, ParsedData); + emit this->loadingFinished(m_loadingMessages, simulator, ParsedData); } }); } diff --git a/src/blackmisc/simulation/xplane/aircraftmodelloaderxplane.cpp b/src/blackmisc/simulation/xplane/aircraftmodelloaderxplane.cpp index a30b6eae1..d1938856c 100644 --- a/src/blackmisc/simulation/xplane/aircraftmodelloaderxplane.cpp +++ b/src/blackmisc/simulation/xplane/aircraftmodelloaderxplane.cpp @@ -149,9 +149,10 @@ namespace BlackMisc if (modelConsolidation) { modelConsolidation(models, true); } return models; }); - m_parserWorker->thenWithResult(this, [this](const auto & models) + m_parserWorker->thenWithResult(this, [ = ](const auto & models) { this->updateInstalledModels(models); + emit this->loadingFinished(m_loadingMessages, simulator, ParsedData); }); } else if (mode.testFlag(LoadDirectly)) @@ -169,7 +170,7 @@ namespace BlackMisc void CAircraftModelLoaderXPlane::updateInstalledModels(const CAircraftModelList &models) { this->setCachedModels(models); - emit loadingFinished(CStatusMessage(this, CStatusMessage::SeverityInfo, "Updated '%1' models") << models.size(), this->getSimulator(), ParsedData); + emit this->loadingFinished(CStatusMessage(this, CStatusMessage::SeverityInfo, "Updated '%1' models") << models.size(), this->getSimulator(), ParsedData); } QString CAircraftModelLoaderXPlane::CSLPlane::getModelName() const @@ -336,7 +337,8 @@ namespace BlackMisc { if (installedModels.containsModelString(plane.getModelName())) { - CLogMessage(this).warning("Model %1 exists already! Potential model string conflict! Ignoring it.") << plane.getModelName(); + const CStatusMessage msg = CStatusMessage(this).warning("Model %1 exists already! Potential model string conflict! Ignoring it.") << plane.getModelName(); + m_loadingMessages.push_back(msg); continue; } @@ -704,13 +706,15 @@ namespace BlackMisc bool result = it.value()(tokens, package, package.path, lineNum); if (!result) { - CLogMessage(this).warning("Ignoring CSL package %1") << package.name; + const CStatusMessage m = CStatusMessage(this).warning("Ignoring CSL package %1") << package.name; + m_loadingMessages.push_back(m); break; } } else { - CLogMessage(this).warning("Unrecognized command %1 in %2") << tokens[0] << package.name; + const CStatusMessage m = CStatusMessage(this).warning("Unrecognized command %1 in %2") << tokens[0] << package.name; + m_loadingMessages.push_back(m); break; } }