mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-17 02:45:33 +08:00
Ref T252, send all loading status messages as list
This commit is contained in:
@@ -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)
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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);
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user