diff --git a/src/blackmisc/blackmisc.pro b/src/blackmisc/blackmisc.pro index 1a26e3313..56f76f0a6 100644 --- a/src/blackmisc/blackmisc.pro +++ b/src/blackmisc/blackmisc.pro @@ -39,7 +39,7 @@ HEADERS += *.h \ $$PWD/simulation/*.h \ $$PWD/simulation/data/*.h \ $$PWD/simulation/settings/*.h \ - $$PWD/simulation/flightgear/*.h \ + $$PWD/simulation/flightgear/*.h \ $$PWD/simulation/fscommon/*.h \ $$PWD/simulation/fsx/*.h \ $$PWD/simulation/xplane/*.h \ @@ -61,7 +61,7 @@ SOURCES += *.cpp \ $$PWD/simulation/*.cpp \ $$PWD/simulation/data/*.cpp \ $$PWD/simulation/settings/*.cpp \ - $$PWD/simulation/flightgear/*.cpp \ + $$PWD/simulation/flightgear/*.cpp \ $$PWD/simulation/fscommon/*.cpp \ $$PWD/simulation/fsx/*.cpp \ $$PWD/simulation/xplane/*.cpp \ diff --git a/src/blackmisc/simulation/flightgear/aircraftmodelloaderflightgear.cpp b/src/blackmisc/simulation/flightgear/aircraftmodelloaderflightgear.cpp index a8ae270d5..ad09e5651 100644 --- a/src/blackmisc/simulation/flightgear/aircraftmodelloaderflightgear.cpp +++ b/src/blackmisc/simulation/flightgear/aircraftmodelloaderflightgear.cpp @@ -9,164 +9,176 @@ #include "aircraftmodelloaderflightgear.h" #include "blackmisc/simulation/aircraftmodel.h" #include -namespace BlackMisc{ - namespace Simulation { - namespace Flightgear { - - bool AircraftModelLoaderFlightgear::isLoadingFinished() const +namespace BlackMisc +{ + namespace Simulation { - return !m_parserWorker || m_parserWorker->isFinished();; - } - - AircraftModelLoaderFlightgear::AircraftModelLoaderFlightgear(QObject *parent) : Simulation::IAircraftModelLoader (Simulation::CSimulatorInfo::fg(), parent) - { } - - AircraftModelLoaderFlightgear::~AircraftModelLoaderFlightgear() - { - // that should be safe as long as the worker uses deleteLater (which it does) - if (m_parserWorker) { m_parserWorker->waitForFinished(); } - } - - void AircraftModelLoaderFlightgear::updateInstalledModels(const CAircraftModelList &models) - { - this->setModelsForSimulator(models, CSimulatorInfo::fg()); - const CStatusMessage m = CStatusMessage(this, CStatusMessage::SeverityInfo, u"Flightgear updated '%1' models") << models.size(); - m_loadingMessages.push_back(m); - } - - Simulation::CAircraftModelList AircraftModelLoaderFlightgear::parseFlyableAirplanes(const QString &rootDirectory, const QStringList &excludeDirectories) + namespace Flightgear { - Q_UNUSED(excludeDirectories); - if (rootDirectory.isEmpty()) { return {}; } - Simulation::CAircraftModelList installedModels; - QDir searchPath(rootDirectory); - searchPath.setNameFilters(QStringList()<< "*-set.xml"); - QDirIterator aircraftIt(searchPath, QDirIterator::Subdirectories | QDirIterator::FollowSymlinks); - - - while (aircraftIt.hasNext()) { - aircraftIt.next(); - if (CFileUtils::isExcludedDirectory(aircraftIt.fileInfo(), excludeDirectories, Qt::CaseInsensitive)) { continue; } - if (aircraftIt.filePath().toStdString().find("/AI/Aircraft") != std::string::npos) { continue; } - Simulation::CAircraftModel model; - std::string modelName = aircraftIt.fileName().toStdString(); - modelName = modelName.substr(0,modelName.find("-set.xml")); - model.setName(QString::fromStdString(modelName)); - model.setModelString(QString::fromStdString(getModelString(aircraftIt.fileName().toStdString(),false))); - model.setModelType(CAircraftModel::TypeOwnSimulatorModel); - model.setSimulator(CSimulatorInfo::fg()); - model.setFileDetailsAndTimestamp(aircraftIt.fileInfo()); - model.setModelMode(CAircraftModel::Exclude); - - addUniqueModel(model,installedModels); - - } - - return installedModels; - } - - CAircraftModelList AircraftModelLoaderFlightgear::parseAIAirplanes(const QString &rootDirectory, const QStringList &excludeDirectories) - { - Q_UNUSED(excludeDirectories); - if (rootDirectory.isEmpty()) { return {}; } - - Simulation::CAircraftModelList installedModels; - - QDir searchPath(rootDirectory); - searchPath.setNameFilters(QStringList()<< "*.xml"); - QDirIterator aircraftIt(searchPath, QDirIterator::Subdirectories | QDirIterator::FollowSymlinks); - - - while (aircraftIt.hasNext()) { - aircraftIt.next(); - if (CFileUtils::isExcludedDirectory(aircraftIt.fileInfo(), excludeDirectories, Qt::CaseInsensitive)) { continue; } - Simulation::CAircraftModel model; - std::string modelName = aircraftIt.fileName().toStdString(); - modelName = modelName.substr(0,modelName.find(".xml")); - model.setName(QString::fromStdString(modelName)); - model.setModelString(QString::fromStdString(getModelString(aircraftIt.filePath().toStdString(),true))); - model.setModelType(CAircraftModel::TypeOwnSimulatorModel); - model.setSimulator(CSimulatorInfo::fg()); - model.setFileDetailsAndTimestamp(aircraftIt.fileInfo()); - model.setModelMode(CAircraftModel::Include); - - addUniqueModel(model,installedModels); - - } - - return installedModels; - } - - void AircraftModelLoaderFlightgear::addUniqueModel(const CAircraftModel &model, CAircraftModelList &models) - { - //TODO Add check - models.push_back(model); - } - - CAircraftModelList AircraftModelLoaderFlightgear::performParsing(const QStringList &rootDirectories, const QStringList &excludeDirectories) - { - CAircraftModelList allModels; - for (const QString &rootDirectory : rootDirectories) + bool AircraftModelLoaderFlightgear::isLoadingFinished() const { - if(QDir(rootDirectory + "/AI/Aircraft").exists()){ - allModels.push_back(parseAIAirplanes(rootDirectory + "/AI/Aircraft", excludeDirectories)); + return !m_parserWorker || m_parserWorker->isFinished();; + } + + AircraftModelLoaderFlightgear::AircraftModelLoaderFlightgear(QObject *parent) : Simulation::IAircraftModelLoader(Simulation::CSimulatorInfo::fg(), parent) + { } + + AircraftModelLoaderFlightgear::~AircraftModelLoaderFlightgear() + { + // that should be safe as long as the worker uses deleteLater (which it does) + if (m_parserWorker) { m_parserWorker->waitForFinished(); } + } + + void AircraftModelLoaderFlightgear::updateInstalledModels(const CAircraftModelList &models) + { + this->setModelsForSimulator(models, CSimulatorInfo::fg()); + const CStatusMessage m = CStatusMessage(this, CStatusMessage::SeverityInfo, u"Flightgear updated '%1' models") << models.size(); + m_loadingMessages.push_back(m); + } + + Simulation::CAircraftModelList AircraftModelLoaderFlightgear::parseFlyableAirplanes(const QString &rootDirectory, const QStringList &excludeDirectories) + { + Q_UNUSED(excludeDirectories); + if (rootDirectory.isEmpty()) { return {}; } + Simulation::CAircraftModelList installedModels; + + QDir searchPath(rootDirectory); + searchPath.setNameFilters(QStringList() << "*-set.xml"); + QDirIterator aircraftIt(searchPath, QDirIterator::Subdirectories | QDirIterator::FollowSymlinks); + + + while (aircraftIt.hasNext()) + { + aircraftIt.next(); + if (CFileUtils::isExcludedDirectory(aircraftIt.fileInfo(), excludeDirectories, Qt::CaseInsensitive)) { continue; } + if (aircraftIt.filePath().toStdString().find("/AI/Aircraft") != std::string::npos) { continue; } + Simulation::CAircraftModel model; + std::string modelName = aircraftIt.fileName().toStdString(); + modelName = modelName.substr(0, modelName.find("-set.xml")); + model.setName(QString::fromStdString(modelName)); + model.setModelString(QString::fromStdString(getModelString(aircraftIt.fileName().toStdString(), false))); + model.setModelType(CAircraftModel::TypeOwnSimulatorModel); + model.setSimulator(CSimulatorInfo::fg()); + model.setFileDetailsAndTimestamp(aircraftIt.fileInfo()); + model.setModelMode(CAircraftModel::Exclude); + + addUniqueModel(model, installedModels); + } - allModels.push_back(parseFlyableAirplanes(rootDirectory, excludeDirectories)); + + return installedModels; } - return allModels; - } + CAircraftModelList AircraftModelLoaderFlightgear::parseAIAirplanes(const QString &rootDirectory, const QStringList &excludeDirectories) + { + Q_UNUSED(excludeDirectories); + if (rootDirectory.isEmpty()) { return {}; } - void AircraftModelLoaderFlightgear::startLoadingFromDisk(IAircraftModelLoader::LoadMode mode, const IAircraftModelLoader::ModelConsolidationCallback &modelConsolidation, const QStringList &modelDirectories) - { - const CSimulatorInfo simulator = CSimulatorInfo::fg(); - const QStringList modelDirs = this->getInitializedModelDirectories(modelDirectories, simulator); - const QStringList excludedDirectoryPatterns(m_settings.getModelExcludeDirectoryPatternsOrDefault(simulator)); // copy + Simulation::CAircraftModelList installedModels; + + QDir searchPath(rootDirectory); + searchPath.setNameFilters(QStringList() << "*.xml"); + QDirIterator aircraftIt(searchPath, QDirIterator::Subdirectories | QDirIterator::FollowSymlinks); - if(mode.testFlag(LoadInBackground)){ - if (m_parserWorker && !m_parserWorker->isFinished()){ return; } - emit this->diskLoadingStarted(simulator, mode); + while (aircraftIt.hasNext()) + { + aircraftIt.next(); + if (CFileUtils::isExcludedDirectory(aircraftIt.fileInfo(), excludeDirectories, Qt::CaseInsensitive)) { continue; } + Simulation::CAircraftModel model; + std::string modelName = aircraftIt.fileName().toStdString(); + modelName = modelName.substr(0, modelName.find(".xml")); + model.setName(QString::fromStdString(modelName)); + model.setModelString(QString::fromStdString(getModelString(aircraftIt.filePath().toStdString(), true))); + model.setModelType(CAircraftModel::TypeOwnSimulatorModel); + model.setSimulator(CSimulatorInfo::fg()); + model.setFileDetailsAndTimestamp(aircraftIt.fileInfo()); + model.setModelMode(CAircraftModel::Include); - m_parserWorker = CWorker::fromTask(this, "CAircraftModelLoaderFlightgear::performParsing", - [this, modelDirs, excludedDirectoryPatterns, modelConsolidation]() - { - auto models = this->performParsing(modelDirs, excludedDirectoryPatterns); - if (modelConsolidation) { modelConsolidation(models, true); } - return models; - }); - m_parserWorker->thenWithResult(this, [ = ](const auto & models) - { - this->updateInstalledModels(models); - m_loadingMessages.freezeOrder(); - emit this->loadingFinished(m_loadingMessages, simulator, ParsedData); - }); - } else if (mode.testFlag(LoadDirectly)){ - emit this->diskLoadingStarted(simulator, mode); - CAircraftModelList models(this->performParsing(modelDirs, excludedDirectoryPatterns)); - this->updateInstalledModels(models); + addUniqueModel(model, installedModels); + + } + + return installedModels; } - } - - std::string AircraftModelLoaderFlightgear::getModelString(std::string fileName, bool ai) - { - std::string modelString = "FG "; - if(ai){ - modelString.append("AI "); - fileName = fileName.substr(fileName.find("Aircraft")+9); - fileName = fileName.substr(0,fileName.find(".xml")); - - } else { - fileName = fileName.substr(0,fileName.find("-set.xml")); + void AircraftModelLoaderFlightgear::addUniqueModel(const CAircraftModel &model, CAircraftModelList &models) + { + //TODO Add check + models.push_back(model); } - modelString.append(fileName); + CAircraftModelList AircraftModelLoaderFlightgear::performParsing(const QStringList &rootDirectories, const QStringList &excludeDirectories) + { + CAircraftModelList allModels; + for (const QString &rootDirectory : rootDirectories) + { + if (QDir(rootDirectory + "/AI/Aircraft").exists()) + { + allModels.push_back(parseAIAirplanes(rootDirectory + "/AI/Aircraft", excludeDirectories)); + } + allModels.push_back(parseFlyableAirplanes(rootDirectory, excludeDirectories)); + } + + return allModels; + } + + void AircraftModelLoaderFlightgear::startLoadingFromDisk(IAircraftModelLoader::LoadMode mode, const IAircraftModelLoader::ModelConsolidationCallback &modelConsolidation, const QStringList &modelDirectories) + { + const CSimulatorInfo simulator = CSimulatorInfo::fg(); + const QStringList modelDirs = this->getInitializedModelDirectories(modelDirectories, simulator); + const QStringList excludedDirectoryPatterns(m_settings.getModelExcludeDirectoryPatternsOrDefault(simulator)); // copy - return modelString; - } + if (mode.testFlag(LoadInBackground)) + { + if (m_parserWorker && !m_parserWorker->isFinished()) { return; } + emit this->diskLoadingStarted(simulator, mode); + + m_parserWorker = CWorker::fromTask(this, "CAircraftModelLoaderFlightgear::performParsing", + [this, modelDirs, excludedDirectoryPatterns, modelConsolidation]() + { + auto models = this->performParsing(modelDirs, excludedDirectoryPatterns); + if (modelConsolidation) { modelConsolidation(models, true); } + return models; + }); + m_parserWorker->thenWithResult(this, [ = ](const auto & models) + { + this->updateInstalledModels(models); + m_loadingMessages.freezeOrder(); + emit this->loadingFinished(m_loadingMessages, simulator, ParsedData); + }); + } + else if (mode.testFlag(LoadDirectly)) + { + emit this->diskLoadingStarted(simulator, mode); + CAircraftModelList models(this->performParsing(modelDirs, excludedDirectoryPatterns)); + this->updateInstalledModels(models); + } + + } + + std::string AircraftModelLoaderFlightgear::getModelString(std::string fileName, bool ai) + { + std::string modelString = "FG "; + if (ai) + { + modelString.append("AI "); + fileName = fileName.substr(fileName.find("Aircraft") + 9); + fileName = fileName.substr(0, fileName.find(".xml")); + + } + else + { + fileName = fileName.substr(0, fileName.find("-set.xml")); + } + + modelString.append(fileName); + + + return modelString; + } } diff --git a/src/blackmisc/simulation/flightgear/aircraftmodelloaderflightgear.h b/src/blackmisc/simulation/flightgear/aircraftmodelloaderflightgear.h index 441994dc1..484cc52e4 100644 --- a/src/blackmisc/simulation/flightgear/aircraftmodelloaderflightgear.h +++ b/src/blackmisc/simulation/flightgear/aircraftmodelloaderflightgear.h @@ -9,46 +9,50 @@ #include "blackmisc/simulation/aircraftmodelloader.h" #include -namespace BlackMisc{ - namespace Simulation { - namespace Flightgear { - /*! - * Flightgear aircraft model loader - */ - class AircraftModelLoaderFlightgear : public Simulation::IAircraftModelLoader{ - Q_OBJECT +namespace BlackMisc +{ + namespace Simulation + { + namespace Flightgear + { + /*! + * Flightgear aircraft model loader + */ + class AircraftModelLoaderFlightgear : public Simulation::IAircraftModelLoader + { + Q_OBJECT - // IAircraftModelLoader interface - public: + // IAircraftModelLoader interface + public: - //! Constructor - AircraftModelLoaderFlightgear(QObject *parent = nullptr); + //! Constructor + AircraftModelLoaderFlightgear(QObject *parent = nullptr); - //! Virtual destructor - virtual ~AircraftModelLoaderFlightgear() override; + //! Virtual destructor + virtual ~AircraftModelLoaderFlightgear() override; - // Interface functions - //! Parsed or injected models - void updateInstalledModels(const CAircraftModelList &models); - bool isLoadingFinished() const override; + // Interface functions + //! Parsed or injected models + void updateInstalledModels(const CAircraftModelList &models); + bool isLoadingFinished() const override; protected: - // Interface functions - void startLoadingFromDisk(LoadMode mode, const ModelConsolidationCallback &modelConsolidation, const QStringList &modelDirectories) override; + // Interface functions + void startLoadingFromDisk(LoadMode mode, const ModelConsolidationCallback &modelConsolidation, const QStringList &modelDirectories) override; - private: - std::string getModelString(std::string filePath,bool ai); - Simulation::CAircraftModelList parseFlyableAirplanes(const QString &rootDirectory, const QStringList &excludeDirectories); - Simulation::CAircraftModelList parseAIAirplanes(const QString &rootDirectory, const QStringList &excludeDirectories); - void addUniqueModel(const CAircraftModel &model, CAircraftModelList &models); - QPointer m_parserWorker; - CAircraftModelList performParsing(const QStringList &rootDirectories, const QStringList &excludeDirectories); + private: + std::string getModelString(std::string filePath, bool ai); + Simulation::CAircraftModelList parseFlyableAirplanes(const QString &rootDirectory, const QStringList &excludeDirectories); + Simulation::CAircraftModelList parseAIAirplanes(const QString &rootDirectory, const QStringList &excludeDirectories); + void addUniqueModel(const CAircraftModel &model, CAircraftModelList &models); + QPointer m_parserWorker; + CAircraftModelList performParsing(const QStringList &rootDirectories, const QStringList &excludeDirectories); - }; + }; } } -} \ No newline at end of file +} diff --git a/src/plugins/simulator/flightgear/fgswiftbusserviceproxy.cpp b/src/plugins/simulator/flightgear/fgswiftbusserviceproxy.cpp index ad8959110..5d3aba32b 100644 --- a/src/plugins/simulator/flightgear/fgswiftbusserviceproxy.cpp +++ b/src/plugins/simulator/flightgear/fgswiftbusserviceproxy.cpp @@ -40,7 +40,7 @@ namespace BlackSimPlugin QString CFGSwiftBusServiceProxy::getVersionNumber() { - return m_dbusInterface->callDBusRet(QLatin1String("getVersionNumber")); + return m_dbusInterface->callDBusRet(QLatin1String("getVersionNumber")); } void CFGSwiftBusServiceProxy::getOwnAircraftSituationData(FlightgearData *o_flightgearData) diff --git a/src/plugins/simulator/flightgear/flightgearmpaircraft.h b/src/plugins/simulator/flightgear/flightgearmpaircraft.h index 7fd50966a..eb050bb3e 100644 --- a/src/plugins/simulator/flightgear/flightgearmpaircraft.h +++ b/src/plugins/simulator/flightgear/flightgearmpaircraft.h @@ -30,8 +30,8 @@ namespace BlackSimPlugin //! Constructor providing initial situation/parts CFlightgearMPAircraft(const BlackMisc::Simulation::CSimulatedAircraft &aircraft, - BlackCore::ISimulator *simulator, - BlackMisc::Simulation::CInterpolationLogger *logger); + BlackCore::ISimulator *simulator, + BlackMisc::Simulation::CInterpolationLogger *logger); //! Destructor ~CFlightgearMPAircraft() {} diff --git a/src/plugins/simulator/flightgear/simulatorflightgear.cpp b/src/plugins/simulator/flightgear/simulatorflightgear.cpp index 58218e26b..b658bf6ab 100644 --- a/src/plugins/simulator/flightgear/simulatorflightgear.cpp +++ b/src/plugins/simulator/flightgear/simulatorflightgear.cpp @@ -87,11 +87,11 @@ namespace BlackSimPlugin namespace Flightgear { CSimulatorFlightgear::CSimulatorFlightgear(const CSimulatorPluginInfo &info, - IOwnAircraftProvider *ownAircraftProvider, - IRemoteAircraftProvider *remoteAircraftProvider, - IWeatherGridProvider *weatherGridProvider, - IClientProvider *clientProvider, - QObject *parent) : + IOwnAircraftProvider *ownAircraftProvider, + IRemoteAircraftProvider *remoteAircraftProvider, + IWeatherGridProvider *weatherGridProvider, + IClientProvider *clientProvider, + QObject *parent) : CSimulatorPluginCommon(info, ownAircraftProvider, remoteAircraftProvider, weatherGridProvider, clientProvider, parent) { m_watcher = new QDBusServiceWatcher(this); diff --git a/src/plugins/simulator/flightgear/simulatorflightgear.h b/src/plugins/simulator/flightgear/simulatorflightgear.h index a3166566c..be42b52ee 100644 --- a/src/plugins/simulator/flightgear/simulatorflightgear.h +++ b/src/plugins/simulator/flightgear/simulatorflightgear.h @@ -108,11 +108,11 @@ namespace BlackSimPlugin public: //! Constructor CSimulatorFlightgear(const BlackMisc::Simulation::CSimulatorPluginInfo &info, - BlackMisc::Simulation::IOwnAircraftProvider *ownAircraftProvider, - BlackMisc::Simulation::IRemoteAircraftProvider *remoteAircraftProvider, - BlackMisc::Weather::IWeatherGridProvider *weatherGridProvider, - BlackMisc::Network::IClientProvider *clientProvider, - QObject *parent = nullptr); + BlackMisc::Simulation::IOwnAircraftProvider *ownAircraftProvider, + BlackMisc::Simulation::IRemoteAircraftProvider *remoteAircraftProvider, + BlackMisc::Weather::IWeatherGridProvider *weatherGridProvider, + BlackMisc::Network::IClientProvider *clientProvider, + QObject *parent = nullptr); //! Dtor virtual ~CSimulatorFlightgear() override; @@ -236,8 +236,8 @@ namespace BlackSimPlugin void resetFlightgearData() { m_flightgearData = { "", "", 0, 0, 0, 0, 0, 0, 0, false, 122800, 122800, 122800, 122800, 2000, 0, false, false, false, false, - false, false, 0, 0, {}, 0.0, 0.0 - }; + false, false, 0, 0, {}, 0.0, 0.0 + }; } }; diff --git a/src/plugins/simulator/flightgearconfig/simulatorflightgearconfig.cpp b/src/plugins/simulator/flightgearconfig/simulatorflightgearconfig.cpp index 3aec73f3e..f8889a1bf 100644 --- a/src/plugins/simulator/flightgearconfig/simulatorflightgearconfig.cpp +++ b/src/plugins/simulator/flightgearconfig/simulatorflightgearconfig.cpp @@ -22,7 +22,7 @@ namespace BlackSimPlugin BlackGui::CPluginConfigWindow *CSimulatorFlightgearConfig::createConfigWindow(QWidget *parent) { - CSimulatorFlightgearConfigWindow* w = new CSimulatorFlightgearConfigWindow(parent); + CSimulatorFlightgearConfigWindow *w = new CSimulatorFlightgearConfigWindow(parent); return w; } }