mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-26 02:35:38 +08:00
Ref T292, adjusted the specific model loaders
* no longer using "std::unique_ptr" * QObject parent * Style
This commit is contained in:
@@ -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", " ");
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
Reference in New Issue
Block a user