diff --git a/src/blackmisc/simulation/fscommon/aircraftcfgparser.cpp b/src/blackmisc/simulation/fscommon/aircraftcfgparser.cpp index 8ea2e2b2a..4a3c8fbeb 100644 --- a/src/blackmisc/simulation/fscommon/aircraftcfgparser.cpp +++ b/src/blackmisc/simulation/fscommon/aircraftcfgparser.cpp @@ -46,13 +46,12 @@ namespace BlackMisc // response for async. loading using LoaderResponse = std::tuple; - CAircraftCfgParser::CAircraftCfgParser(const CSimulatorInfo &simInfo) : - IAircraftModelLoader(simInfo) + CAircraftCfgParser::CAircraftCfgParser(const CSimulatorInfo &simInfo, QObject *parent) : IAircraftModelLoader(simInfo, parent) { } - std::unique_ptr CAircraftCfgParser::createModelLoader(const CSimulatorInfo &simInfo) + CAircraftCfgParser *CAircraftCfgParser::createModelLoader(const CSimulatorInfo &simInfo, QObject *parent) { - return std::make_unique(simInfo); + return new CAircraftCfgParser(simInfo, parent); } CAircraftCfgParser::~CAircraftCfgParser() @@ -98,7 +97,7 @@ namespace BlackMisc const bool hasData = !models.isEmpty(); if (hasData) { - this->setCachedModels(models, simulator); // not thread safe + this->setModelsForSimulator(models, this->getSimulator()); } // currently I treat no data as error emit this->loadingFinished(hasData ? statusLoadingOk : statusLoadingError, simulator, ParsedData); @@ -119,7 +118,7 @@ namespace BlackMisc const bool hasData = !models.isEmpty(); if (hasData) { - this->setCachedModels(models); + this->setCachedModels(models, this->getSimulator()); } // currently I treat no data as error emit this->loadingFinished(hasData ? statusLoadingOk : statusLoadingError, simulator, ParsedData); @@ -392,8 +391,8 @@ namespace BlackMisc QString content(line.midRef(index + 1).trimmed().toString()); // fix "" strings, some are malformed and just contain " at beginning, not at the end - if (content.endsWith('"')) { content.remove(content.size() - 1 , 1); } - if (content.startsWith('"')) { content.remove(0 , 1); } + if (content.endsWith('"')) { content.remove(content.size() - 1, 1); } + if (content.startsWith('"')) { content.remove(0, 1); } // fix C style linebreaks content.replace("\\n", " "); diff --git a/src/blackmisc/simulation/fscommon/aircraftcfgparser.h b/src/blackmisc/simulation/fscommon/aircraftcfgparser.h index 0fdc41d76..8022cb243 100644 --- a/src/blackmisc/simulation/fscommon/aircraftcfgparser.h +++ b/src/blackmisc/simulation/fscommon/aircraftcfgparser.h @@ -41,7 +41,7 @@ namespace BlackMisc public: //! Constructor - CAircraftCfgParser(const BlackMisc::Simulation::CSimulatorInfo &simInfo); + CAircraftCfgParser(const CSimulatorInfo &simInfo, QObject *parent = nullptr); //! Virtual destructor virtual ~CAircraftCfgParser(); @@ -55,7 +55,7 @@ namespace BlackMisc //! @} //! Create an parser object for given simulator - static std::unique_ptr createModelLoader(const BlackMisc::Simulation::CSimulatorInfo &simInfo); + static CAircraftCfgParser *createModelLoader(const CSimulatorInfo &simInfo, QObject *parent = nullptr); protected: //! \name Interface functions diff --git a/src/blackmisc/simulation/xplane/aircraftmodelloaderxplane.cpp b/src/blackmisc/simulation/xplane/aircraftmodelloaderxplane.cpp index baae6848d..6a26e5d7e 100644 --- a/src/blackmisc/simulation/xplane/aircraftmodelloaderxplane.cpp +++ b/src/blackmisc/simulation/xplane/aircraftmodelloaderxplane.cpp @@ -114,7 +114,7 @@ namespace BlackMisc return QStringLiteral("[ACF]"); } - CAircraftModelLoaderXPlane::CAircraftModelLoaderXPlane() : IAircraftModelLoader(CSimulatorInfo::XPLANE) + CAircraftModelLoaderXPlane::CAircraftModelLoaderXPlane(QObject *parent) : IAircraftModelLoader(CSimulatorInfo::xplane(), parent) { } CAircraftModelLoaderXPlane::~CAircraftModelLoaderXPlane() @@ -125,13 +125,13 @@ namespace BlackMisc void CAircraftModelLoaderXPlane::startLoadingFromDisk(LoadMode mode, const ModelConsolidationCallback &modelConsolidation, const QStringList &modelDirectories) { - const CSimulatorInfo simulator = this->getSimulator(); + const CSimulatorInfo simulator = CSimulatorInfo::xplane(); const QStringList modelDirs = this->getInitializedModelDirectories(modelDirectories, simulator); const QStringList excludedDirectoryPatterns(m_settings.getModelExcludeDirectoryPatternsOrDefault(simulator)); // copy if (modelDirs.isEmpty()) { - this->clearCache(); + this->clearCachedModels(CSimulatorInfo::xplane()); emit this->loadingFinished(CStatusMessage(this, CStatusMessage::SeverityError, "Model directories '%1' are empty") << modelDirectories.join(", "), simulator, ParsedData); return; } @@ -169,8 +169,8 @@ namespace BlackMisc void CAircraftModelLoaderXPlane::updateInstalledModels(const CAircraftModelList &models) { - this->setCachedModels(models); - emit this->loadingFinished(CStatusMessage(this, CStatusMessage::SeverityInfo, "Updated '%1' models") << models.size(), this->getSimulator(), ParsedData); + this->setModelsForSimulator(models, CSimulatorInfo::xplane()); + emit this->loadingFinished(CStatusMessage(this, CStatusMessage::SeverityInfo, "XPlane updated '%1' models") << models.size(), CSimulatorInfo::xplane(), ParsedData); } QString CAircraftModelLoaderXPlane::CSLPlane::getModelName() const @@ -217,7 +217,7 @@ namespace BlackMisc CAircraftModel model = extractAcfProperties(aircraftIt.filePath(), aircraftIt.fileInfo()); model.setModelType(CAircraftModel::TypeOwnSimulatorModel); - model.setSimulator(this->getSimulator()); + model.setSimulator(CSimulatorInfo::xplane()); model.setFileName(aircraftIt.filePath()); const QDateTime lastModifiedTs(aircraftIt.fileInfo().lastModified()); model.setUtcTimestamp(lastModifiedTs); @@ -358,7 +358,7 @@ namespace BlackMisc CDistributor distributor(package.name); model.setDistributor(distributor); - model.setSimulator(this->getSimulator()); + model.setSimulator(CSimulatorInfo::xplane()); model.setDescription("[CSL]"); installedModels.push_back(model); } diff --git a/src/blackmisc/simulation/xplane/aircraftmodelloaderxplane.h b/src/blackmisc/simulation/xplane/aircraftmodelloaderxplane.h index 009022ede..54490d21e 100644 --- a/src/blackmisc/simulation/xplane/aircraftmodelloaderxplane.h +++ b/src/blackmisc/simulation/xplane/aircraftmodelloaderxplane.h @@ -41,7 +41,7 @@ namespace BlackMisc public: //! Constructor - CAircraftModelLoaderXPlane(); + CAircraftModelLoaderXPlane(QObject *parent = nullptr); //! Virtual destructor virtual ~CAircraftModelLoaderXPlane(); @@ -51,12 +51,11 @@ namespace BlackMisc virtual bool isLoadingFinished() const override; //! @} - //! Extract from an acf file (flyable plane) the properties needed to generate model string. - static BlackMisc::Simulation::CAircraftModel extractAcfProperties(const QString &filePath, const QFileInfo &fileInfo); - - public slots: //! Parsed or injected models - void updateInstalledModels(const BlackMisc::Simulation::CAircraftModelList &models); + void updateInstalledModels(const CAircraftModelList &models); + + //! Extract from an acf file (flyable plane) the properties needed to generate model string. + static CAircraftModel extractAcfProperties(const QString &filePath, const QFileInfo &fileInfo); protected: //! \name Interface functions @@ -65,6 +64,7 @@ namespace BlackMisc //! @} private: + //! CSL Plane data struct CSLPlane { QString getModelName() const; @@ -80,6 +80,7 @@ namespace BlackMisc QString livery; //!< Livery identifier. Can be empty. }; + //! CSL package struct CSLPackage { bool hasValidHeader() const @@ -92,9 +93,9 @@ namespace BlackMisc QVector planes; }; - BlackMisc::Simulation::CAircraftModelList performParsing(const QString &rootDirectory, const QStringList &excludeDirectories); - BlackMisc::Simulation::CAircraftModelList parseFlyableAirplanes(const QString &rootDirectory, const QStringList &excludeDirectories); - BlackMisc::Simulation::CAircraftModelList parseCslPackages(const QString &rootDirectory, const QStringList &excludeDirectories); + CAircraftModelList performParsing(const QString &rootDirectory, const QStringList &excludeDirectories); + CAircraftModelList parseFlyableAirplanes(const QString &rootDirectory, const QStringList &excludeDirectories); + CAircraftModelList parseCslPackages(const QString &rootDirectory, const QStringList &excludeDirectories); bool doPackageSub(QString &ioPath); @@ -114,8 +115,8 @@ namespace BlackMisc CSLPackage parsePackageHeader(const QString &path, const QString &content); void parseFullPackage(const QString &content, CSLPackage &package); - QPointer m_parserWorker; //!< worker will destroy itself, so weak pointer - QVector m_cslPackages; //!< Parsed Packages. No lock required since accessed only from one thread + QPointer m_parserWorker; //!< worker will destroy itself, so weak pointer + QVector m_cslPackages; //!< Parsed Packages. No lock required since accessed only from one thread static const QString &fileFilterFlyable(); static const QString &fileFilterCsl();