Ref T246, model loader improvements / renamings

This commit is contained in:
Klaus Basan
2018-07-16 15:51:54 +02:00
parent a7947d3c87
commit 76334b75d1
7 changed files with 52 additions and 23 deletions

View File

@@ -34,11 +34,12 @@ namespace BlackMisc
{ {
Q_ASSERT_X(simulator.isSingleSimulator(), Q_FUNC_INFO, "Only one simulator per loader"); Q_ASSERT_X(simulator.isSingleSimulator(), Q_FUNC_INFO, "Only one simulator per loader");
m_caches.setCurrentSimulator(simulator); m_caches.setCurrentSimulator(simulator);
this->setObjectInfo(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::onLoadingFinished); connect(this, &IAircraftModelLoader::loadingFinished, this, &IAircraftModelLoader::onLoadingFinished);
connect(&m_caches, &IMultiSimulatorModelCaches::cacheChanged, this, &IAircraftModelLoader::onCacheChanged); connect(&m_caches, &IMultiSimulatorModelCaches::cacheChanged, this, &IAircraftModelLoader::onCacheChanged);
connect(&m_settings, &CMultiSimulatorSettings::simulatorSettingsChanged, this, &IAircraftModelLoader::simulatorSettingsChanged); connect(&m_settings, &CMultiSimulatorSettings::settingsChanged, this, &IAircraftModelLoader::onSettingsChanged);
} }
QString IAircraftModelLoader::enumToString(IAircraftModelLoader::LoadFinishedInfo info) QString IAircraftModelLoader::enumToString(IAircraftModelLoader::LoadFinishedInfo info)
@@ -93,6 +94,7 @@ namespace BlackMisc
CStatusMessage IAircraftModelLoader::setCachedModels(const CAircraftModelList &models, const CSimulatorInfo &simulator) CStatusMessage IAircraftModelLoader::setCachedModels(const CAircraftModelList &models, const CSimulatorInfo &simulator)
{ {
const CSimulatorInfo sim = simulator.isSingleSimulator() ? simulator : this->getSimulator(); // support default value const CSimulatorInfo sim = simulator.isSingleSimulator() ? simulator : this->getSimulator(); // support default value
this->setObjectInfo(sim);
return m_caches.setCachedModels(models, sim); return m_caches.setCachedModels(models, sim);
} }
@@ -100,6 +102,7 @@ namespace BlackMisc
{ {
if (models.isEmpty()) { return CStatusMessage(this, CStatusMessage::SeverityInfo, "No data"); } if (models.isEmpty()) { return CStatusMessage(this, CStatusMessage::SeverityInfo, "No data"); }
const CSimulatorInfo sim = simulator.isSingleSimulator() ? simulator : this->getSimulator(); // support default values const CSimulatorInfo sim = simulator.isSingleSimulator() ? simulator : this->getSimulator(); // support default values
this->setObjectInfo(sim);
CAircraftModelList allModels(m_caches.getSynchronizedCachedModels(sim)); CAircraftModelList allModels(m_caches.getSynchronizedCachedModels(sim));
const int c = allModels.replaceOrAddModelsWithString(models, Qt::CaseInsensitive); const int c = allModels.replaceOrAddModelsWithString(models, Qt::CaseInsensitive);
if (c > 0) if (c > 0)
@@ -115,6 +118,7 @@ namespace BlackMisc
void IAircraftModelLoader::onLoadingFinished(const CStatusMessageList &statusMsgs, const CSimulatorInfo &simulator, LoadFinishedInfo info) void IAircraftModelLoader::onLoadingFinished(const CStatusMessageList &statusMsgs, const CSimulatorInfo &simulator, LoadFinishedInfo info)
{ {
Q_UNUSED(info); Q_UNUSED(info);
this->setObjectInfo(simulator);
// remark: in the past status used to be bool, now it is CStatusMessage // remark: in the past status used to be bool, now it is CStatusMessage
// so there is some redundancy here between status and m_loadingMessages // so there is some redundancy here between status and m_loadingMessages
@@ -141,6 +145,11 @@ namespace BlackMisc
emit this->loadingFinished(status, simInfo, CacheLoaded); emit this->loadingFinished(status, simInfo, CacheLoaded);
} }
void IAircraftModelLoader::onSettingsChanged(const CSimulatorInfo &simInfo)
{
emit this->simulatorSettingsChanged(simInfo);
}
QStringList IAircraftModelLoader::getInitializedModelDirectories(const QStringList &modelDirectories, const CSimulatorInfo &simulator) const QStringList IAircraftModelLoader::getInitializedModelDirectories(const QStringList &modelDirectories, const CSimulatorInfo &simulator) const
{ {
QStringList modelDirs = modelDirectories.isEmpty() ? m_settings.getModelDirectoriesOrDefault(simulator) : modelDirectories; QStringList modelDirs = modelDirectories.isEmpty() ? m_settings.getModelDirectoriesOrDefault(simulator) : modelDirectories;
@@ -148,6 +157,11 @@ namespace BlackMisc
return CDirectoryUtils::getExistingUnemptyDirectories(modelDirs); return CDirectoryUtils::getExistingUnemptyDirectories(modelDirs);
} }
void IAircraftModelLoader::setObjectInfo(const CSimulatorInfo &simulatorInfo)
{
this->setObjectName("Model loader for: '" + simulatorInfo.toQString(true) + "'");
}
QStringList IAircraftModelLoader::getModelDirectoriesOrDefault() const QStringList IAircraftModelLoader::getModelDirectoriesOrDefault() const
{ {
const QStringList mdirs = m_settings.getModelDirectoriesOrDefault(this->getSimulator()); const QStringList mdirs = m_settings.getModelDirectoriesOrDefault(this->getSimulator());
@@ -190,7 +204,7 @@ namespace BlackMisc
return this->setCachedModels(CAircraftModelList()); return this->setCachedModels(CAircraftModelList());
} }
void IAircraftModelLoader::startLoading(LoadMode mode, const ModelConsolidation &modelConsolidation, const QStringList &modelDirectories) void IAircraftModelLoader::startLoading(LoadMode mode, const ModelConsolidationCallback &modelConsolidation, const QStringList &modelDirectories)
{ {
if (m_loadingInProgress) { return; } if (m_loadingInProgress) { return; }
m_loadingInProgress = true; m_loadingInProgress = true;
@@ -219,13 +233,14 @@ namespace BlackMisc
if (m_skipLoadingEmptyModelDir && modelDirs.isEmpty()) if (m_skipLoadingEmptyModelDir && modelDirs.isEmpty())
{ {
const CStatusMessage status = CStatusMessage(this, CStatusMessage::SeverityWarning, const CStatusMessage status = CStatusMessage(this, CStatusMessage::SeverityWarning,
"Empty or not existing %1 directory '%2', skipping read") "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 this->loadingFinished(m_loadingMessages, simulator, LoadingSkipped); emit this->loadingFinished(m_loadingMessages, simulator, LoadingSkipped);
return; return;
} }
this->setObjectInfo(simulator);
this->startLoadingFromDisk(mode, modelConsolidation, modelDirs); this->startLoadingFromDisk(mode, modelConsolidation, modelDirs);
} }
@@ -256,12 +271,12 @@ namespace BlackMisc
m_loadingInProgress = true; // avoids further startups m_loadingInProgress = true; // avoids further startups
} }
QString IAircraftModelLoader::getInfoString() const QString IAircraftModelLoader::getModelCacheInfoString() const
{ {
return m_caches.getInfoString(); return m_caches.getInfoString();
} }
QString IAircraftModelLoader::getInfoStringFsFamily() const QString IAircraftModelLoader::getModelCacheInfoStringFsFamily() const
{ {
return m_caches.getInfoStringFsFamily(); return m_caches.getInfoStringFsFamily();
} }
@@ -271,6 +286,11 @@ namespace BlackMisc
return m_settings.getSpecializedSettings(this->getSimulator()); return m_settings.getSpecializedSettings(this->getSimulator());
} }
void IAircraftModelLoader::synchronizeModelCache(const CSimulatorInfo &simulator)
{
m_caches.synchronizeCache(simulator);
}
std::unique_ptr<IAircraftModelLoader> IAircraftModelLoader::createModelLoader(const CSimulatorInfo &simulator) std::unique_ptr<IAircraftModelLoader> IAircraftModelLoader::createModelLoader(const CSimulatorInfo &simulator)
{ {
Q_ASSERT_X(simulator.isSingleSimulator(), Q_FUNC_INFO, "Single simulator"); Q_ASSERT_X(simulator.isSingleSimulator(), Q_FUNC_INFO, "Single simulator");

View File

@@ -51,6 +51,9 @@ namespace BlackMisc
Q_INTERFACES(BlackMisc::Simulation::IModelsPerSimulatorUpdatable) Q_INTERFACES(BlackMisc::Simulation::IModelsPerSimulatorUpdatable)
public: public:
//! Log categories
static const BlackMisc::CLogCategoryList &getLogCategories();
//! Parser mode //! Parser mode
enum LoadModeFlag enum LoadModeFlag
{ {
@@ -87,14 +90,11 @@ namespace BlackMisc
//! Callback to consolidate data, normally with DB data //! Callback to consolidate data, normally with DB data
//! \remark this has to be a abstarct, as DB handling is subject of BlackCore //! \remark this has to be a abstarct, as DB handling is subject of BlackCore
using ModelConsolidation = std::function<int (BlackMisc::Simulation::CAircraftModelList &, bool)>; using ModelConsolidationCallback = std::function<int (BlackMisc::Simulation::CAircraftModelList &, bool)>;
//! Log categories
static const BlackMisc::CLogCategoryList &getLogCategories();
//! Start the loading process from disk. //! Start the loading process from disk.
//! Optional DB models can be passed and used for data consolidation. //! Optional DB models can be passed and used for data consolidation.
void startLoading(LoadMode mode = InBackgroundWithCache, const ModelConsolidation &modelConsolidation = {}, const QStringList &modelDirectories = {}); void startLoading(LoadMode mode = InBackgroundWithCache, const ModelConsolidationCallback &modelConsolidation = {}, const QStringList &modelDirectories = {});
//! Loading finished? //! Loading finished?
virtual bool isLoadingFinished() const = 0; virtual bool isLoadingFinished() const = 0;
@@ -145,12 +145,15 @@ namespace BlackMisc
void gracefulShutdown(); void gracefulShutdown();
//! \copydoc BlackMisc::Simulation::Data::CModelCaches::getInfoString //! \copydoc BlackMisc::Simulation::Data::CModelCaches::getInfoString
QString getInfoString() const; QString getModelCacheInfoString() const;
//! \copydoc BlackMisc::Simulation::Data::CModelCaches::getInfoStringFsFamily //! \copydoc BlackMisc::Simulation::Data::CModelCaches::getInfoStringFsFamily
QString getInfoStringFsFamily() const; QString getModelCacheInfoStringFsFamily() const;
//! Current simulator settings //! \copydoc BlackMisc::Simulation::Data::IMultiSimulatorModelCaches::synchronizeCache
void synchronizeModelCache(const CSimulatorInfo &simulator);
//! \copydoc Settings::CMultiSimulatorSettings::getSpecializedSettings
Settings::CSpecializedSimulatorSettings getCurrentSimulatorSettings() const; Settings::CSpecializedSimulatorSettings getCurrentSimulatorSettings() const;
//! Access to multi simulator settings //! Access to multi simulator settings
@@ -201,7 +204,7 @@ namespace BlackMisc
BlackMisc::CStatusMessage clearCache(); BlackMisc::CStatusMessage clearCache();
//! Start the loading process from disk //! Start the loading process from disk
virtual void startLoadingFromDisk(LoadMode mode, const ModelConsolidation &modelConsolidation, const QStringList &modelDirectories) = 0; virtual void startLoadingFromDisk(LoadMode mode, const ModelConsolidationCallback &modelConsolidation, const QStringList &modelDirectories) = 0;
//! Loading finished, also logs messages //! Loading finished, also logs messages
void onLoadingFinished(const CStatusMessageList &statusMsgs, const CSimulatorInfo &simulator, LoadFinishedInfo info); void onLoadingFinished(const CStatusMessageList &statusMsgs, const CSimulatorInfo &simulator, LoadFinishedInfo info);
@@ -209,6 +212,9 @@ namespace BlackMisc
//! A cache has been changed //! A cache has been changed
void onCacheChanged(const CSimulatorInfo &simInfo); void onCacheChanged(const CSimulatorInfo &simInfo);
//! A setting has been changed
void onSettingsChanged(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;
@@ -218,6 +224,9 @@ namespace BlackMisc
CStatusMessageList m_loadingMessages; //!< loading messages CStatusMessageList m_loadingMessages; //!< loading messages
Data::CModelCaches m_caches { false, this }; //!< caches used with this loader Data::CModelCaches m_caches { false, this }; //!< caches used with this loader
Settings::CMultiSimulatorSettings m_settings { this }; //!< settings Settings::CMultiSimulatorSettings m_settings { this }; //!< settings
private:
void setObjectInfo(const BlackMisc::Simulation::CSimulatorInfo &simulatorInfo);
}; };
} // ns } // ns
} // ns } // ns

View File

@@ -250,12 +250,12 @@ namespace BlackMisc
IMultiSimulatorModelCaches(QObject *parent = nullptr) : QObject(parent) IMultiSimulatorModelCaches(QObject *parent = nullptr) : QObject(parent)
{ } { }
//! \name Cache has been changed //! \name Cache has been changed. This will only detect changes elsewhere, owned caches will not signal local changes
//! @{ //! @{
void changedFsx() { emitCacheChanged(BlackMisc::Simulation::CSimulatorInfo(BlackMisc::Simulation::CSimulatorInfo::FSX)); } void changedFsx() { emitCacheChanged(BlackMisc::Simulation::CSimulatorInfo::fsx()); }
void changedFs9() { emitCacheChanged(BlackMisc::Simulation::CSimulatorInfo(BlackMisc::Simulation::CSimulatorInfo::FS9)); } void changedFs9() { emitCacheChanged(BlackMisc::Simulation::CSimulatorInfo::fs9()); }
void changedP3D() { emitCacheChanged(BlackMisc::Simulation::CSimulatorInfo(BlackMisc::Simulation::CSimulatorInfo::P3D)); } void changedP3D() { emitCacheChanged(BlackMisc::Simulation::CSimulatorInfo::p3d()); }
void changedXP() { emitCacheChanged(BlackMisc::Simulation::CSimulatorInfo(BlackMisc::Simulation::CSimulatorInfo::XPLANE)); } void changedXP() { emitCacheChanged(BlackMisc::Simulation::CSimulatorInfo::xplane()); }
//! @} //! @}
//! Void version of synchronizeCurrentCache //! Void version of synchronizeCurrentCache

View File

@@ -61,7 +61,7 @@ namespace BlackMisc
if (m_parserWorker) { m_parserWorker->waitForFinished(); } if (m_parserWorker) { m_parserWorker->waitForFinished(); }
} }
void CAircraftCfgParser::startLoadingFromDisk(LoadMode mode, const ModelConsolidation &modelConsolidation, const QStringList &modelDirectories) void CAircraftCfgParser::startLoadingFromDisk(LoadMode mode, const ModelConsolidationCallback &modelConsolidation, const QStringList &modelDirectories)
{ {
static const CStatusMessage statusLoadingOk(this, CStatusMessage::SeverityInfo, "Aircraft config parser loaded data"); static const CStatusMessage statusLoadingOk(this, CStatusMessage::SeverityInfo, "Aircraft config parser loaded data");
static const CStatusMessage statusLoadingError(this, CStatusMessage::SeverityError, "Aircraft config parser did not load data"); static const CStatusMessage statusLoadingError(this, CStatusMessage::SeverityError, "Aircraft config parser did not load data");

View File

@@ -60,7 +60,7 @@ namespace BlackMisc
protected: protected:
//! \name Interface functions //! \name Interface functions
//! @{ //! @{
virtual void startLoadingFromDisk(LoadMode mode, const ModelConsolidation &modelConsolidation, const QStringList &modelDirectories) override; virtual void startLoadingFromDisk(LoadMode mode, const ModelConsolidationCallback &modelConsolidation, const QStringList &modelDirectories) override;
//! @} //! @}
private: private:

View File

@@ -123,7 +123,7 @@ namespace BlackMisc
if (m_parserWorker) { m_parserWorker->waitForFinished(); } if (m_parserWorker) { m_parserWorker->waitForFinished(); }
} }
void CAircraftModelLoaderXPlane::startLoadingFromDisk(LoadMode mode, const ModelConsolidation &modelConsolidation, const QStringList &modelDirectories) void CAircraftModelLoaderXPlane::startLoadingFromDisk(LoadMode mode, const ModelConsolidationCallback &modelConsolidation, const QStringList &modelDirectories)
{ {
const CSimulatorInfo simulator = this->getSimulator(); const CSimulatorInfo simulator = this->getSimulator();
const QStringList modelDirs = this->getInitializedModelDirectories(modelDirectories, simulator); const QStringList modelDirs = this->getInitializedModelDirectories(modelDirectories, simulator);

View File

@@ -61,7 +61,7 @@ namespace BlackMisc
protected: protected:
//! \name Interface functions //! \name Interface functions
//! @{ //! @{
virtual void startLoadingFromDisk(LoadMode mode, const ModelConsolidation &modelConsolidation, const QStringList &modelDirectories) override; virtual void startLoadingFromDisk(LoadMode mode, const ModelConsolidationCallback &modelConsolidation, const QStringList &modelDirectories) override;
//! @} //! @}
private: private: