mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-05-06 02:16:04 +08:00
Ref T246, model loader improvements / renamings
This commit is contained in:
@@ -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");
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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");
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
Reference in New Issue
Block a user