From 76334b75d1a671b11b1d4947153793a67b3445a7 Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Mon, 16 Jul 2018 15:51:54 +0200 Subject: [PATCH] Ref T246, model loader improvements / renamings --- .../simulation/aircraftmodelloader.cpp | 30 +++++++++++++++---- .../simulation/aircraftmodelloader.h | 27 +++++++++++------ src/blackmisc/simulation/data/modelcaches.h | 10 +++---- .../simulation/fscommon/aircraftcfgparser.cpp | 2 +- .../simulation/fscommon/aircraftcfgparser.h | 2 +- .../xplane/aircraftmodelloaderxplane.cpp | 2 +- .../xplane/aircraftmodelloaderxplane.h | 2 +- 7 files changed, 52 insertions(+), 23 deletions(-) diff --git a/src/blackmisc/simulation/aircraftmodelloader.cpp b/src/blackmisc/simulation/aircraftmodelloader.cpp index b5c693e21..35e365d8a 100644 --- a/src/blackmisc/simulation/aircraftmodelloader.cpp +++ b/src/blackmisc/simulation/aircraftmodelloader.cpp @@ -34,11 +34,12 @@ namespace BlackMisc { Q_ASSERT_X(simulator.isSingleSimulator(), Q_FUNC_INFO, "Only one simulator per loader"); m_caches.setCurrentSimulator(simulator); + this->setObjectInfo(simulator); // first connect is an internal connection to log info about load status connect(this, &IAircraftModelLoader::loadingFinished, this, &IAircraftModelLoader::onLoadingFinished); 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) @@ -93,6 +94,7 @@ namespace BlackMisc CStatusMessage IAircraftModelLoader::setCachedModels(const CAircraftModelList &models, const CSimulatorInfo &simulator) { const CSimulatorInfo sim = simulator.isSingleSimulator() ? simulator : this->getSimulator(); // support default value + this->setObjectInfo(sim); return m_caches.setCachedModels(models, sim); } @@ -100,6 +102,7 @@ namespace BlackMisc { if (models.isEmpty()) { return CStatusMessage(this, CStatusMessage::SeverityInfo, "No data"); } const CSimulatorInfo sim = simulator.isSingleSimulator() ? simulator : this->getSimulator(); // support default values + this->setObjectInfo(sim); CAircraftModelList allModels(m_caches.getSynchronizedCachedModels(sim)); const int c = allModels.replaceOrAddModelsWithString(models, Qt::CaseInsensitive); if (c > 0) @@ -115,6 +118,7 @@ namespace BlackMisc void IAircraftModelLoader::onLoadingFinished(const CStatusMessageList &statusMsgs, const CSimulatorInfo &simulator, LoadFinishedInfo info) { Q_UNUSED(info); + this->setObjectInfo(simulator); // remark: in the past status used to be bool, now it is CStatusMessage // so there is some redundancy here between status and m_loadingMessages @@ -141,6 +145,11 @@ namespace BlackMisc 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 modelDirs = modelDirectories.isEmpty() ? m_settings.getModelDirectoriesOrDefault(simulator) : modelDirectories; @@ -148,6 +157,11 @@ namespace BlackMisc return CDirectoryUtils::getExistingUnemptyDirectories(modelDirs); } + void IAircraftModelLoader::setObjectInfo(const CSimulatorInfo &simulatorInfo) + { + this->setObjectName("Model loader for: '" + simulatorInfo.toQString(true) + "'"); + } + QStringList IAircraftModelLoader::getModelDirectoriesOrDefault() const { const QStringList mdirs = m_settings.getModelDirectoriesOrDefault(this->getSimulator()); @@ -190,7 +204,7 @@ namespace BlackMisc 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; } m_loadingInProgress = true; @@ -219,13 +233,14 @@ namespace BlackMisc if (m_skipLoadingEmptyModelDir && modelDirs.isEmpty()) { 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(", "); m_loadingMessages.push_back(status); emit this->loadingFinished(m_loadingMessages, simulator, LoadingSkipped); return; } + this->setObjectInfo(simulator); this->startLoadingFromDisk(mode, modelConsolidation, modelDirs); } @@ -256,12 +271,12 @@ namespace BlackMisc m_loadingInProgress = true; // avoids further startups } - QString IAircraftModelLoader::getInfoString() const + QString IAircraftModelLoader::getModelCacheInfoString() const { return m_caches.getInfoString(); } - QString IAircraftModelLoader::getInfoStringFsFamily() const + QString IAircraftModelLoader::getModelCacheInfoStringFsFamily() const { return m_caches.getInfoStringFsFamily(); } @@ -271,6 +286,11 @@ namespace BlackMisc return m_settings.getSpecializedSettings(this->getSimulator()); } + void IAircraftModelLoader::synchronizeModelCache(const CSimulatorInfo &simulator) + { + m_caches.synchronizeCache(simulator); + } + std::unique_ptr IAircraftModelLoader::createModelLoader(const CSimulatorInfo &simulator) { Q_ASSERT_X(simulator.isSingleSimulator(), Q_FUNC_INFO, "Single simulator"); diff --git a/src/blackmisc/simulation/aircraftmodelloader.h b/src/blackmisc/simulation/aircraftmodelloader.h index 15b6d6182..c0245013c 100644 --- a/src/blackmisc/simulation/aircraftmodelloader.h +++ b/src/blackmisc/simulation/aircraftmodelloader.h @@ -51,6 +51,9 @@ namespace BlackMisc Q_INTERFACES(BlackMisc::Simulation::IModelsPerSimulatorUpdatable) public: + //! Log categories + static const BlackMisc::CLogCategoryList &getLogCategories(); + //! Parser mode enum LoadModeFlag { @@ -87,14 +90,11 @@ namespace BlackMisc //! Callback to consolidate data, normally with DB data //! \remark this has to be a abstarct, as DB handling is subject of BlackCore - using ModelConsolidation = std::function; - - //! Log categories - static const BlackMisc::CLogCategoryList &getLogCategories(); + using ModelConsolidationCallback = std::function; //! Start the loading process from disk. //! 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? virtual bool isLoadingFinished() const = 0; @@ -145,12 +145,15 @@ namespace BlackMisc void gracefulShutdown(); //! \copydoc BlackMisc::Simulation::Data::CModelCaches::getInfoString - QString getInfoString() const; + QString getModelCacheInfoString() const; //! \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; //! Access to multi simulator settings @@ -201,7 +204,7 @@ namespace BlackMisc BlackMisc::CStatusMessage clearCache(); //! 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 void onLoadingFinished(const CStatusMessageList &statusMsgs, const CSimulatorInfo &simulator, LoadFinishedInfo info); @@ -209,6 +212,9 @@ namespace BlackMisc //! A cache has been changed 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 QStringList getInitializedModelDirectories(const QStringList &modelDirectories, const CSimulatorInfo &simulator) const; @@ -218,6 +224,9 @@ namespace BlackMisc CStatusMessageList m_loadingMessages; //!< loading messages Data::CModelCaches m_caches { false, this }; //!< caches used with this loader Settings::CMultiSimulatorSettings m_settings { this }; //!< settings + + private: + void setObjectInfo(const BlackMisc::Simulation::CSimulatorInfo &simulatorInfo); }; } // ns } // ns diff --git a/src/blackmisc/simulation/data/modelcaches.h b/src/blackmisc/simulation/data/modelcaches.h index 5b3f1b7e1..4877d763a 100644 --- a/src/blackmisc/simulation/data/modelcaches.h +++ b/src/blackmisc/simulation/data/modelcaches.h @@ -250,12 +250,12 @@ namespace BlackMisc 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 changedFs9() { emitCacheChanged(BlackMisc::Simulation::CSimulatorInfo(BlackMisc::Simulation::CSimulatorInfo::FS9)); } - void changedP3D() { emitCacheChanged(BlackMisc::Simulation::CSimulatorInfo(BlackMisc::Simulation::CSimulatorInfo::P3D)); } - void changedXP() { emitCacheChanged(BlackMisc::Simulation::CSimulatorInfo(BlackMisc::Simulation::CSimulatorInfo::XPLANE)); } + void changedFsx() { emitCacheChanged(BlackMisc::Simulation::CSimulatorInfo::fsx()); } + void changedFs9() { emitCacheChanged(BlackMisc::Simulation::CSimulatorInfo::fs9()); } + void changedP3D() { emitCacheChanged(BlackMisc::Simulation::CSimulatorInfo::p3d()); } + void changedXP() { emitCacheChanged(BlackMisc::Simulation::CSimulatorInfo::xplane()); } //! @} //! Void version of synchronizeCurrentCache diff --git a/src/blackmisc/simulation/fscommon/aircraftcfgparser.cpp b/src/blackmisc/simulation/fscommon/aircraftcfgparser.cpp index 208015539..8ea2e2b2a 100644 --- a/src/blackmisc/simulation/fscommon/aircraftcfgparser.cpp +++ b/src/blackmisc/simulation/fscommon/aircraftcfgparser.cpp @@ -61,7 +61,7 @@ namespace BlackMisc 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 statusLoadingError(this, CStatusMessage::SeverityError, "Aircraft config parser did not load data"); diff --git a/src/blackmisc/simulation/fscommon/aircraftcfgparser.h b/src/blackmisc/simulation/fscommon/aircraftcfgparser.h index f8ef23092..0fdc41d76 100644 --- a/src/blackmisc/simulation/fscommon/aircraftcfgparser.h +++ b/src/blackmisc/simulation/fscommon/aircraftcfgparser.h @@ -60,7 +60,7 @@ namespace BlackMisc protected: //! \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: diff --git a/src/blackmisc/simulation/xplane/aircraftmodelloaderxplane.cpp b/src/blackmisc/simulation/xplane/aircraftmodelloaderxplane.cpp index 747214d9a..baae6848d 100644 --- a/src/blackmisc/simulation/xplane/aircraftmodelloaderxplane.cpp +++ b/src/blackmisc/simulation/xplane/aircraftmodelloaderxplane.cpp @@ -123,7 +123,7 @@ namespace BlackMisc 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 QStringList modelDirs = this->getInitializedModelDirectories(modelDirectories, simulator); diff --git a/src/blackmisc/simulation/xplane/aircraftmodelloaderxplane.h b/src/blackmisc/simulation/xplane/aircraftmodelloaderxplane.h index 1053b5ce8..009022ede 100644 --- a/src/blackmisc/simulation/xplane/aircraftmodelloaderxplane.h +++ b/src/blackmisc/simulation/xplane/aircraftmodelloaderxplane.h @@ -61,7 +61,7 @@ namespace BlackMisc protected: //! \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: