Ref T252, send all loading status messages as list

This commit is contained in:
Klaus Basan
2018-02-16 03:49:36 +01:00
parent 8110baad33
commit 640ec3a573
4 changed files with 33 additions and 24 deletions

View File

@@ -18,6 +18,7 @@
#include <QDir> #include <QDir>
#include <Qt> #include <Qt>
#include <QtGlobal> #include <QtGlobal>
#include <QMap>
using namespace BlackMisc; using namespace BlackMisc;
using namespace BlackMisc::Simulation::Data; using namespace BlackMisc::Simulation::Data;
@@ -35,8 +36,8 @@ namespace BlackMisc
m_caches.setCurrentSimulator(simulator); m_caches.setCurrentSimulator(simulator);
// first connect is an internal connection to log info about load status // first connect is an internal connection to log info about load status
connect(this, &IAircraftModelLoader::loadingFinished, this, &IAircraftModelLoader::loadFinished); connect(this, &IAircraftModelLoader::loadingFinished, this, &IAircraftModelLoader::onLoadingFinished);
connect(&m_caches, &IMultiSimulatorModelCaches::cacheChanged, this, &IAircraftModelLoader::cacheChanged); connect(&m_caches, &IMultiSimulatorModelCaches::cacheChanged, this, &IAircraftModelLoader::onCacheChanged);
} }
QString IAircraftModelLoader::enumToString(IAircraftModelLoader::LoadFinishedInfo info) 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); Q_UNUSED(info);
@@ -118,17 +119,22 @@ namespace BlackMisc
// so there is some redundancy here between status and m_loadingMessages // so there is some redundancy here between status and m_loadingMessages
m_loadingInProgress = false; m_loadingInProgress = false;
if (m_loadingMessages.hasWarningOrErrorMessages()) const QMap<int, int> 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 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"); static const CStatusMessage status(this, CStatusMessage::SeverityInfo, "Cached changed");
emit this->loadingFinished(status, simInfo, CacheLoaded); emit this->loadingFinished(status, simInfo, CacheLoaded);
@@ -211,10 +217,11 @@ namespace BlackMisc
const QStringList modelDirs = this->getInitializedModelDirectories(modelDirectories, simulator); const QStringList modelDirs = this->getInitializedModelDirectories(modelDirectories, simulator);
if (m_skipLoadingEmptyModelDir && modelDirs.isEmpty()) 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(", "); << simulator.toQString() << modelDirectories.join(", ");
m_loadingMessages.push_back(status); m_loadingMessages.push_back(status);
emit loadingFinished(status, simulator, LoadingSkipped); emit this->loadingFinished(m_loadingMessages, simulator, LoadingSkipped);
return; return;
} }
@@ -258,9 +265,9 @@ namespace BlackMisc
return m_caches.getInfoStringFsFamily(); 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> IAircraftModelLoader::createModelLoader(const CSimulatorInfo &simulator) std::unique_ptr<IAircraftModelLoader> IAircraftModelLoader::createModelLoader(const CSimulatorInfo &simulator)

View File

@@ -18,7 +18,7 @@
#include "blackmisc/simulation/data/modelcaches.h" #include "blackmisc/simulation/data/modelcaches.h"
#include "blackmisc/simulation/settings/simulatorsettings.h" #include "blackmisc/simulation/settings/simulatorsettings.h"
#include "blackmisc/simulation/simulatorinfo.h" #include "blackmisc/simulation/simulatorinfo.h"
#include "blackmisc/statusmessage.h" #include "blackmisc/statusmessagelist.h"
#include <QDateTime> #include <QDateTime>
#include <QFlags> #include <QFlags>
@@ -151,7 +151,7 @@ namespace BlackMisc
QString getInfoStringFsFamily() const; QString getInfoStringFsFamily() const;
//! Current simulator settings //! Current simulator settings
Settings::CSimulatorSettings getCurrentSimulatorSettings() const; Settings::CSpecializedSimulatorSettings getCurrentSimulatorSettings() const;
//! Access to multi simulator settings //! Access to multi simulator settings
const Settings::CMultiSimulatorSettings &multiSimulatorSettings() const { return m_settings; } const Settings::CMultiSimulatorSettings &multiSimulatorSettings() const { return m_settings; }
@@ -180,7 +180,7 @@ namespace BlackMisc
signals: signals:
//! Parsing is finished or cache has been loaded //! 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: protected:
//! Constructor //! Constructor
@@ -199,10 +199,10 @@ namespace BlackMisc
virtual void startLoadingFromDisk(LoadMode mode, const ModelConsolidation &modelConsolidation, const QStringList &modelDirectories) = 0; virtual void startLoadingFromDisk(LoadMode mode, const ModelConsolidation &modelConsolidation, const QStringList &modelDirectories) = 0;
//! Loading finished, also logs messages //! 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 //! 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 //! Get model directories from settings if empty, otherwise checked and UNC path fixed
QStringList getInitializedModelDirectories(const QStringList &modelDirectories, const CSimulatorInfo &simulator) const; QStringList getInitializedModelDirectories(const QStringList &modelDirectories, const CSimulatorInfo &simulator) const;

View File

@@ -107,9 +107,7 @@ namespace BlackMisc
} }
else else
{ {
CStatusMessage status = m_loadingMessages.toSingleMessage(); emit this->loadingFinished(m_loadingMessages, simulator, ParsedData);
status.setSeverity(CStatusMessage::SeverityError);
emit this->loadingFinished(status, simulator, ParsedData);
} }
}); });
} }

View File

@@ -149,9 +149,10 @@ namespace BlackMisc
if (modelConsolidation) { modelConsolidation(models, true); } if (modelConsolidation) { modelConsolidation(models, true); }
return models; return models;
}); });
m_parserWorker->thenWithResult<CAircraftModelList>(this, [this](const auto & models) m_parserWorker->thenWithResult<CAircraftModelList>(this, [ = ](const auto & models)
{ {
this->updateInstalledModels(models); this->updateInstalledModels(models);
emit this->loadingFinished(m_loadingMessages, simulator, ParsedData);
}); });
} }
else if (mode.testFlag(LoadDirectly)) else if (mode.testFlag(LoadDirectly))
@@ -169,7 +170,7 @@ namespace BlackMisc
void CAircraftModelLoaderXPlane::updateInstalledModels(const CAircraftModelList &models) void CAircraftModelLoaderXPlane::updateInstalledModels(const CAircraftModelList &models)
{ {
this->setCachedModels(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 QString CAircraftModelLoaderXPlane::CSLPlane::getModelName() const
@@ -336,7 +337,8 @@ namespace BlackMisc
{ {
if (installedModels.containsModelString(plane.getModelName())) 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; continue;
} }
@@ -704,13 +706,15 @@ namespace BlackMisc
bool result = it.value()(tokens, package, package.path, lineNum); bool result = it.value()(tokens, package, package.path, lineNum);
if (!result) 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; break;
} }
} }
else 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; break;
} }
} }