Ref T292, adjusted the specific model loaders

* no longer using "std::unique_ptr"
* QObject parent
* Style
This commit is contained in:
Klaus Basan
2018-07-22 18:05:23 +02:00
parent 5953bbe4c6
commit 40c0c6ae35
4 changed files with 28 additions and 28 deletions

View File

@@ -46,13 +46,12 @@ namespace BlackMisc
// response for async. loading // response for async. loading
using LoaderResponse = std::tuple<CAircraftCfgEntriesList, CAircraftModelList, BlackMisc::CStatusMessageList, bool>; using LoaderResponse = std::tuple<CAircraftCfgEntriesList, CAircraftModelList, BlackMisc::CStatusMessageList, bool>;
CAircraftCfgParser::CAircraftCfgParser(const CSimulatorInfo &simInfo) : CAircraftCfgParser::CAircraftCfgParser(const CSimulatorInfo &simInfo, QObject *parent) : IAircraftModelLoader(simInfo, parent)
IAircraftModelLoader(simInfo)
{ } { }
std::unique_ptr<CAircraftCfgParser> CAircraftCfgParser::createModelLoader(const CSimulatorInfo &simInfo) CAircraftCfgParser *CAircraftCfgParser::createModelLoader(const CSimulatorInfo &simInfo, QObject *parent)
{ {
return std::make_unique<CAircraftCfgParser>(simInfo); return new CAircraftCfgParser(simInfo, parent);
} }
CAircraftCfgParser::~CAircraftCfgParser() CAircraftCfgParser::~CAircraftCfgParser()
@@ -98,7 +97,7 @@ namespace BlackMisc
const bool hasData = !models.isEmpty(); const bool hasData = !models.isEmpty();
if (hasData) if (hasData)
{ {
this->setCachedModels(models, simulator); // not thread safe this->setModelsForSimulator(models, this->getSimulator());
} }
// currently I treat no data as error // currently I treat no data as error
emit this->loadingFinished(hasData ? statusLoadingOk : statusLoadingError, simulator, ParsedData); emit this->loadingFinished(hasData ? statusLoadingOk : statusLoadingError, simulator, ParsedData);
@@ -119,7 +118,7 @@ namespace BlackMisc
const bool hasData = !models.isEmpty(); const bool hasData = !models.isEmpty();
if (hasData) if (hasData)
{ {
this->setCachedModels(models); this->setCachedModels(models, this->getSimulator());
} }
// currently I treat no data as error // currently I treat no data as error
emit this->loadingFinished(hasData ? statusLoadingOk : statusLoadingError, simulator, ParsedData); emit this->loadingFinished(hasData ? statusLoadingOk : statusLoadingError, simulator, ParsedData);
@@ -392,8 +391,8 @@ namespace BlackMisc
QString content(line.midRef(index + 1).trimmed().toString()); QString content(line.midRef(index + 1).trimmed().toString());
// fix "" strings, some are malformed and just contain " at beginning, not at the end // 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.endsWith('"')) { content.remove(content.size() - 1, 1); }
if (content.startsWith('"')) { content.remove(0 , 1); } if (content.startsWith('"')) { content.remove(0, 1); }
// fix C style linebreaks // fix C style linebreaks
content.replace("\\n", " "); content.replace("\\n", " ");

View File

@@ -41,7 +41,7 @@ namespace BlackMisc
public: public:
//! Constructor //! Constructor
CAircraftCfgParser(const BlackMisc::Simulation::CSimulatorInfo &simInfo); CAircraftCfgParser(const CSimulatorInfo &simInfo, QObject *parent = nullptr);
//! Virtual destructor //! Virtual destructor
virtual ~CAircraftCfgParser(); virtual ~CAircraftCfgParser();
@@ -55,7 +55,7 @@ namespace BlackMisc
//! @} //! @}
//! Create an parser object for given simulator //! Create an parser object for given simulator
static std::unique_ptr<CAircraftCfgParser> createModelLoader(const BlackMisc::Simulation::CSimulatorInfo &simInfo); static CAircraftCfgParser *createModelLoader(const CSimulatorInfo &simInfo, QObject *parent = nullptr);
protected: protected:
//! \name Interface functions //! \name Interface functions

View File

@@ -114,7 +114,7 @@ namespace BlackMisc
return QStringLiteral("[ACF]"); return QStringLiteral("[ACF]");
} }
CAircraftModelLoaderXPlane::CAircraftModelLoaderXPlane() : IAircraftModelLoader(CSimulatorInfo::XPLANE) CAircraftModelLoaderXPlane::CAircraftModelLoaderXPlane(QObject *parent) : IAircraftModelLoader(CSimulatorInfo::xplane(), parent)
{ } { }
CAircraftModelLoaderXPlane::~CAircraftModelLoaderXPlane() CAircraftModelLoaderXPlane::~CAircraftModelLoaderXPlane()
@@ -125,13 +125,13 @@ namespace BlackMisc
void CAircraftModelLoaderXPlane::startLoadingFromDisk(LoadMode mode, const ModelConsolidationCallback &modelConsolidation, const QStringList &modelDirectories) 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 modelDirs = this->getInitializedModelDirectories(modelDirectories, simulator);
const QStringList excludedDirectoryPatterns(m_settings.getModelExcludeDirectoryPatternsOrDefault(simulator)); // copy const QStringList excludedDirectoryPatterns(m_settings.getModelExcludeDirectoryPatternsOrDefault(simulator)); // copy
if (modelDirs.isEmpty()) 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); emit this->loadingFinished(CStatusMessage(this, CStatusMessage::SeverityError, "Model directories '%1' are empty") << modelDirectories.join(", "), simulator, ParsedData);
return; return;
} }
@@ -169,8 +169,8 @@ namespace BlackMisc
void CAircraftModelLoaderXPlane::updateInstalledModels(const CAircraftModelList &models) void CAircraftModelLoaderXPlane::updateInstalledModels(const CAircraftModelList &models)
{ {
this->setCachedModels(models); this->setModelsForSimulator(models, CSimulatorInfo::xplane());
emit this->loadingFinished(CStatusMessage(this, CStatusMessage::SeverityInfo, "Updated '%1' models") << models.size(), this->getSimulator(), ParsedData); emit this->loadingFinished(CStatusMessage(this, CStatusMessage::SeverityInfo, "XPlane updated '%1' models") << models.size(), CSimulatorInfo::xplane(), ParsedData);
} }
QString CAircraftModelLoaderXPlane::CSLPlane::getModelName() const QString CAircraftModelLoaderXPlane::CSLPlane::getModelName() const
@@ -217,7 +217,7 @@ namespace BlackMisc
CAircraftModel model = extractAcfProperties(aircraftIt.filePath(), aircraftIt.fileInfo()); CAircraftModel model = extractAcfProperties(aircraftIt.filePath(), aircraftIt.fileInfo());
model.setModelType(CAircraftModel::TypeOwnSimulatorModel); model.setModelType(CAircraftModel::TypeOwnSimulatorModel);
model.setSimulator(this->getSimulator()); model.setSimulator(CSimulatorInfo::xplane());
model.setFileName(aircraftIt.filePath()); model.setFileName(aircraftIt.filePath());
const QDateTime lastModifiedTs(aircraftIt.fileInfo().lastModified()); const QDateTime lastModifiedTs(aircraftIt.fileInfo().lastModified());
model.setUtcTimestamp(lastModifiedTs); model.setUtcTimestamp(lastModifiedTs);
@@ -358,7 +358,7 @@ namespace BlackMisc
CDistributor distributor(package.name); CDistributor distributor(package.name);
model.setDistributor(distributor); model.setDistributor(distributor);
model.setSimulator(this->getSimulator()); model.setSimulator(CSimulatorInfo::xplane());
model.setDescription("[CSL]"); model.setDescription("[CSL]");
installedModels.push_back(model); installedModels.push_back(model);
} }

View File

@@ -41,7 +41,7 @@ namespace BlackMisc
public: public:
//! Constructor //! Constructor
CAircraftModelLoaderXPlane(); CAircraftModelLoaderXPlane(QObject *parent = nullptr);
//! Virtual destructor //! Virtual destructor
virtual ~CAircraftModelLoaderXPlane(); virtual ~CAircraftModelLoaderXPlane();
@@ -51,12 +51,11 @@ namespace BlackMisc
virtual bool isLoadingFinished() const override; 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 //! 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: protected:
//! \name Interface functions //! \name Interface functions
@@ -65,6 +64,7 @@ namespace BlackMisc
//! @} //! @}
private: private:
//! CSL Plane data
struct CSLPlane struct CSLPlane
{ {
QString getModelName() const; QString getModelName() const;
@@ -80,6 +80,7 @@ namespace BlackMisc
QString livery; //!< Livery identifier. Can be empty. QString livery; //!< Livery identifier. Can be empty.
}; };
//! CSL package
struct CSLPackage struct CSLPackage
{ {
bool hasValidHeader() const bool hasValidHeader() const
@@ -92,9 +93,9 @@ namespace BlackMisc
QVector<CSLPlane> planes; QVector<CSLPlane> planes;
}; };
BlackMisc::Simulation::CAircraftModelList performParsing(const QString &rootDirectory, const QStringList &excludeDirectories); CAircraftModelList performParsing(const QString &rootDirectory, const QStringList &excludeDirectories);
BlackMisc::Simulation::CAircraftModelList parseFlyableAirplanes(const QString &rootDirectory, const QStringList &excludeDirectories); CAircraftModelList parseFlyableAirplanes(const QString &rootDirectory, const QStringList &excludeDirectories);
BlackMisc::Simulation::CAircraftModelList parseCslPackages(const QString &rootDirectory, const QStringList &excludeDirectories); CAircraftModelList parseCslPackages(const QString &rootDirectory, const QStringList &excludeDirectories);
bool doPackageSub(QString &ioPath); bool doPackageSub(QString &ioPath);
@@ -114,8 +115,8 @@ namespace BlackMisc
CSLPackage parsePackageHeader(const QString &path, const QString &content); CSLPackage parsePackageHeader(const QString &path, const QString &content);
void parseFullPackage(const QString &content, CSLPackage &package); void parseFullPackage(const QString &content, CSLPackage &package);
QPointer<BlackMisc::CWorker> m_parserWorker; //!< worker will destroy itself, so weak pointer QPointer<CWorker> m_parserWorker; //!< worker will destroy itself, so weak pointer
QVector<CSLPackage> m_cslPackages; //!< Parsed Packages. No lock required since accessed only from one thread QVector<CSLPackage> m_cslPackages; //!< Parsed Packages. No lock required since accessed only from one thread
static const QString &fileFilterFlyable(); static const QString &fileFilterFlyable();
static const QString &fileFilterCsl(); static const QString &fileFilterCsl();