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 <Qt>
#include <QtGlobal>
#include <QMap>
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<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
{
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> IAircraftModelLoader::createModelLoader(const CSimulatorInfo &simulator)

View File

@@ -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 <QDateTime>
#include <QFlags>
@@ -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;

View File

@@ -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);
}
});
}

View File

@@ -149,9 +149,10 @@ namespace BlackMisc
if (modelConsolidation) { modelConsolidation(models, true); }
return models;
});
m_parserWorker->thenWithResult<CAircraftModelList>(this, [this](const auto & models)
m_parserWorker->thenWithResult<CAircraftModelList>(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;
}
}