mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-20 20:40:29 +08:00
refs #585, adjusted loaders
* use paths from settings * no longer pass model directory and exclude directories
This commit is contained in:
@@ -18,6 +18,7 @@
|
|||||||
#include <QtGlobal>
|
#include <QtGlobal>
|
||||||
|
|
||||||
using namespace BlackMisc::Simulation::Data;
|
using namespace BlackMisc::Simulation::Data;
|
||||||
|
using namespace BlackMisc::Simulation::Settings;
|
||||||
using namespace BlackMisc::Simulation::FsCommon;
|
using namespace BlackMisc::Simulation::FsCommon;
|
||||||
using namespace BlackMisc::Simulation::XPlane;
|
using namespace BlackMisc::Simulation::XPlane;
|
||||||
|
|
||||||
@@ -25,8 +26,7 @@ namespace BlackMisc
|
|||||||
{
|
{
|
||||||
namespace Simulation
|
namespace Simulation
|
||||||
{
|
{
|
||||||
IAircraftModelLoader::IAircraftModelLoader(const CSimulatorInfo &simulator, const QString &rootDirectory, const QStringList &excludeDirs) :
|
IAircraftModelLoader::IAircraftModelLoader(const CSimulatorInfo &simulator)
|
||||||
m_rootDirectory(rootDirectory), m_excludedDirectories(excludeDirs)
|
|
||||||
{
|
{
|
||||||
Q_ASSERT_X(simulator.isSingleSimulator(), Q_FUNC_INFO, "Only one simulator per loader");
|
Q_ASSERT_X(simulator.isSingleSimulator(), Q_FUNC_INFO, "Only one simulator per loader");
|
||||||
this->m_caches.setCurrentSimulator(simulator);
|
this->m_caches.setCurrentSimulator(simulator);
|
||||||
@@ -42,6 +42,7 @@ namespace BlackMisc
|
|||||||
{
|
{
|
||||||
if (directory.isEmpty()) { return false; }
|
if (directory.isEmpty()) { return false; }
|
||||||
QDir dir(directory);
|
QDir dir(directory);
|
||||||
|
|
||||||
//! \todo not available network dir can make this hang here, however there is no obvious solution to that
|
//! \todo not available network dir can make this hang here, however there is no obvious solution to that
|
||||||
return dir.exists();
|
return dir.exists();
|
||||||
}
|
}
|
||||||
@@ -76,13 +77,14 @@ namespace BlackMisc
|
|||||||
this->m_loadingInProgress = false;
|
this->m_loadingInProgress = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool IAircraftModelLoader::changeRootDirectory(const QString &directory)
|
QString IAircraftModelLoader::getModelDirectory() const
|
||||||
{
|
{
|
||||||
if (m_rootDirectory == directory) { return false; }
|
return this->m_settings.getModelDirectoryOrDefault(this->getSimulator());
|
||||||
if (directory.isEmpty() || !existsDir(directory)) { return false; }
|
}
|
||||||
|
|
||||||
m_rootDirectory = directory;
|
QStringList IAircraftModelLoader::getModelExcludeDirectories(bool relative) const
|
||||||
return true;
|
{
|
||||||
|
return this->m_settings.getModelExcludeDirectoryPatternsOrDefault(this->getSimulator(), relative);
|
||||||
}
|
}
|
||||||
|
|
||||||
CAircraftModelList IAircraftModelLoader::getAircraftModels() const
|
CAircraftModelList IAircraftModelLoader::getAircraftModels() const
|
||||||
@@ -165,9 +167,7 @@ namespace BlackMisc
|
|||||||
std::unique_ptr<IAircraftModelLoader> loader;
|
std::unique_ptr<IAircraftModelLoader> loader;
|
||||||
if (simulator.xplane())
|
if (simulator.xplane())
|
||||||
{
|
{
|
||||||
loader = std::make_unique<CAircraftModelLoaderXPlane>(
|
loader = std::make_unique<CAircraftModelLoaderXPlane>();
|
||||||
CSimulatorInfo(CSimulatorInfo::XPLANE),
|
|
||||||
CXPlaneUtil::xplaneRootDir());
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -16,6 +16,7 @@
|
|||||||
#include "blackmisc/simulation/aircraftmodelinterfaces.h"
|
#include "blackmisc/simulation/aircraftmodelinterfaces.h"
|
||||||
#include "blackmisc/simulation/aircraftmodellist.h"
|
#include "blackmisc/simulation/aircraftmodellist.h"
|
||||||
#include "blackmisc/simulation/data/modelcaches.h"
|
#include "blackmisc/simulation/data/modelcaches.h"
|
||||||
|
#include "blackmisc/simulation/settings/settingssimulator.h"
|
||||||
#include "blackmisc/simulation/simulatorinfo.h"
|
#include "blackmisc/simulation/simulatorinfo.h"
|
||||||
#include "blackmisc/statusmessage.h"
|
#include "blackmisc/statusmessage.h"
|
||||||
|
|
||||||
@@ -71,12 +72,6 @@ namespace BlackMisc
|
|||||||
//! Optional DB models can be passed and used for data consolidation.
|
//! Optional DB models can be passed and used for data consolidation.
|
||||||
void startLoading(LoadMode mode = InBackgroundWithCache, const CAircraftModelList &dbModels = {});
|
void startLoading(LoadMode mode = InBackgroundWithCache, const CAircraftModelList &dbModels = {});
|
||||||
|
|
||||||
//! Change the directory
|
|
||||||
bool changeRootDirectory(const QString &directory);
|
|
||||||
|
|
||||||
//! Current root directory
|
|
||||||
QString getRootDirectory() const { return this->m_rootDirectory; }
|
|
||||||
|
|
||||||
//! Loading finished?
|
//! Loading finished?
|
||||||
virtual bool isLoadingFinished() const = 0;
|
virtual bool isLoadingFinished() const = 0;
|
||||||
|
|
||||||
@@ -99,6 +94,12 @@ namespace BlackMisc
|
|||||||
//! Is the given simulator supported?
|
//! Is the given simulator supported?
|
||||||
bool supportsSimulator(const BlackMisc::Simulation::CSimulatorInfo &info);
|
bool supportsSimulator(const BlackMisc::Simulation::CSimulatorInfo &info);
|
||||||
|
|
||||||
|
//! Current root directory
|
||||||
|
QString getModelDirectory() const;
|
||||||
|
|
||||||
|
//! Exclude directories
|
||||||
|
QStringList getModelExcludeDirectories(bool relative) const;
|
||||||
|
|
||||||
//! Cancel read
|
//! Cancel read
|
||||||
void cancelLoading();
|
void cancelLoading();
|
||||||
|
|
||||||
@@ -131,7 +132,7 @@ namespace BlackMisc
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
//! Constructor
|
//! Constructor
|
||||||
IAircraftModelLoader(const CSimulatorInfo &simulator, const QString &rootDirectory, const QStringList &excludeDirs = {});
|
IAircraftModelLoader(const CSimulatorInfo &simulator);
|
||||||
|
|
||||||
//! Cache timestamp
|
//! Cache timestamp
|
||||||
QDateTime getCacheTimestamp() const;
|
QDateTime getCacheTimestamp() const;
|
||||||
@@ -150,9 +151,8 @@ namespace BlackMisc
|
|||||||
|
|
||||||
std::atomic<bool> m_cancelLoading { false }; //!< flag
|
std::atomic<bool> m_cancelLoading { false }; //!< flag
|
||||||
std::atomic<bool> m_loadingInProgress { false }; //!< Loading in progress
|
std::atomic<bool> m_loadingInProgress { false }; //!< Loading in progress
|
||||||
QString m_rootDirectory; //!< root directory parsing aircraft.cfg files
|
|
||||||
QStringList m_excludedDirectories; //!< directories not to be parsed
|
|
||||||
BlackMisc::Simulation::Data::CModelCaches m_caches { this }; //!< caches
|
BlackMisc::Simulation::Data::CModelCaches m_caches { this }; //!< caches
|
||||||
|
BlackMisc::Simulation::Settings::CMultiSimulatorSimulatorSettings m_settings { this }; //!< settings
|
||||||
|
|
||||||
protected slots:
|
protected slots:
|
||||||
//! Loading finished
|
//! Loading finished
|
||||||
|
|||||||
@@ -35,6 +35,7 @@
|
|||||||
using namespace BlackMisc;
|
using namespace BlackMisc;
|
||||||
using namespace BlackMisc::Simulation;
|
using namespace BlackMisc::Simulation;
|
||||||
using namespace BlackMisc::Simulation::FsCommon;
|
using namespace BlackMisc::Simulation::FsCommon;
|
||||||
|
using namespace BlackMisc::Simulation::Settings;
|
||||||
using namespace BlackMisc::Network;
|
using namespace BlackMisc::Network;
|
||||||
|
|
||||||
namespace BlackMisc
|
namespace BlackMisc
|
||||||
@@ -46,35 +47,13 @@ namespace BlackMisc
|
|||||||
// response for async. loading
|
// response for async. loading
|
||||||
using LoaderResponse = std::tuple<CAircraftCfgEntriesList, CAircraftModelList, bool>;
|
using LoaderResponse = std::tuple<CAircraftCfgEntriesList, CAircraftModelList, bool>;
|
||||||
|
|
||||||
CAircraftCfgParser::CAircraftCfgParser(const CSimulatorInfo &simInfo, const QString &rootDirectory, const QStringList &excludeDirs) :
|
CAircraftCfgParser::CAircraftCfgParser(const CSimulatorInfo &simInfo) :
|
||||||
IAircraftModelLoader(simInfo, rootDirectory, excludeDirs)
|
IAircraftModelLoader(simInfo)
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
std::unique_ptr<CAircraftCfgParser> CAircraftCfgParser::createModelLoader(const CSimulatorInfo &simInfo)
|
std::unique_ptr<CAircraftCfgParser> CAircraftCfgParser::createModelLoader(const CSimulatorInfo &simInfo)
|
||||||
{
|
{
|
||||||
if (simInfo.fsx())
|
return std::make_unique<CAircraftCfgParser>(simInfo);
|
||||||
{
|
|
||||||
return std::make_unique<CAircraftCfgParser>(
|
|
||||||
CSimulatorInfo(CSimulatorInfo::FSX),
|
|
||||||
CFsCommonUtil::fsxSimObjectsDir(),
|
|
||||||
CFsCommonUtil::fsxSimObjectsExcludeDirectories());
|
|
||||||
}
|
|
||||||
else if (simInfo.fs9())
|
|
||||||
{
|
|
||||||
return std::make_unique<CAircraftCfgParser>(
|
|
||||||
CSimulatorInfo(CSimulatorInfo::FS9),
|
|
||||||
CFsCommonUtil::fs9AircraftDir(),
|
|
||||||
CFsCommonUtil::fs9AircraftObjectsExcludeDirectories());
|
|
||||||
}
|
|
||||||
else if (simInfo.p3d())
|
|
||||||
{
|
|
||||||
return std::make_unique<CAircraftCfgParser>(
|
|
||||||
CSimulatorInfo(CSimulatorInfo::P3D),
|
|
||||||
CFsCommonUtil::p3dSimObjectsDir(),
|
|
||||||
CFsCommonUtil::p3dSimObjectsExcludeDirectories());
|
|
||||||
}
|
|
||||||
Q_ASSERT_X(false, Q_FUNC_INFO, "Illegal simulator info");
|
|
||||||
return {};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
CAircraftCfgParser::~CAircraftCfgParser()
|
CAircraftCfgParser::~CAircraftCfgParser()
|
||||||
@@ -85,25 +64,27 @@ namespace BlackMisc
|
|||||||
|
|
||||||
void CAircraftCfgParser::startLoadingFromDisk(LoadMode mode, const CAircraftModelList &dbModels)
|
void CAircraftCfgParser::startLoadingFromDisk(LoadMode mode, const CAircraftModelList &dbModels)
|
||||||
{
|
{
|
||||||
|
const CSimulatorInfo simulator = this->getSimulator();
|
||||||
|
const QString modelDirectory(this->m_settings.getModelDirectoryOrDefault(simulator)); // copy
|
||||||
|
const QStringList excludedDirectories(this->m_settings.getModelExcludeDirectoryPatternsOrDefault(simulator, true)); // copy
|
||||||
|
|
||||||
if (mode.testFlag(LoadInBackground))
|
if (mode.testFlag(LoadInBackground))
|
||||||
{
|
{
|
||||||
if (m_parserWorker && !m_parserWorker->isFinished()) { return; }
|
if (m_parserWorker && !m_parserWorker->isFinished()) { return; }
|
||||||
const QString rootDirectory(m_rootDirectory); // copy
|
|
||||||
const QStringList excludedDirectories(m_excludedDirectories); // copy
|
|
||||||
m_parserWorker = BlackMisc::CWorker::fromTask(this, "CAircraftCfgParser::changeDirectory",
|
m_parserWorker = BlackMisc::CWorker::fromTask(this, "CAircraftCfgParser::changeDirectory",
|
||||||
[this, rootDirectory, excludedDirectories, dbModels]()
|
[this, modelDirectory, excludedDirectories, simulator, dbModels]()
|
||||||
{
|
{
|
||||||
bool ok = false;
|
bool ok = false;
|
||||||
const auto aircraftCfgEntriesList = this->performParsing(rootDirectory, excludedDirectories, &ok);
|
const auto aircraftCfgEntriesList = this->performParsing(modelDirectory, excludedDirectories, &ok);
|
||||||
CAircraftModelList models;
|
CAircraftModelList models;
|
||||||
if (ok)
|
if (ok)
|
||||||
{
|
{
|
||||||
models = (aircraftCfgEntriesList.toAircraftModelList(this->getSimulator()));
|
models = aircraftCfgEntriesList.toAircraftModelList(simulator);
|
||||||
CAircraftModelUtilities::mergeWithDbData(models, dbModels);
|
CAircraftModelUtilities::mergeWithDbData(models, dbModels);
|
||||||
}
|
}
|
||||||
return std::make_tuple(aircraftCfgEntriesList, models, ok);
|
return std::make_tuple(aircraftCfgEntriesList, models, ok);
|
||||||
});
|
});
|
||||||
m_parserWorker->thenWithResult<LoaderResponse>(this, [this](const LoaderResponse & tuple)
|
m_parserWorker->thenWithResult<LoaderResponse>(this, [this, simulator](const LoaderResponse & tuple)
|
||||||
{
|
{
|
||||||
const bool ok = std::get<2>(tuple);
|
const bool ok = std::get<2>(tuple);
|
||||||
if (ok)
|
if (ok)
|
||||||
@@ -116,19 +97,19 @@ namespace BlackMisc
|
|||||||
this->setCachedModels(models); // not thread safe
|
this->setCachedModels(models); // not thread safe
|
||||||
}
|
}
|
||||||
// currently I treat no data as error
|
// currently I treat no data as error
|
||||||
emit this->loadingFinished(hasData, this->getSimulator());
|
emit this->loadingFinished(hasData, simulator);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
emit this->loadingFinished(false, this->getSimulator());
|
emit this->loadingFinished(false, simulator);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
else if (mode == LoadDirectly)
|
else if (mode == LoadDirectly)
|
||||||
{
|
{
|
||||||
bool ok;
|
bool ok;
|
||||||
this->m_parsedCfgEntriesList = performParsing(m_rootDirectory, m_excludedDirectories, &ok);
|
this->m_parsedCfgEntriesList = performParsing(modelDirectory, excludedDirectories, &ok);
|
||||||
CAircraftModelList models(this->m_parsedCfgEntriesList.toAircraftModelList(this->getSimulator()));
|
CAircraftModelList models(this->m_parsedCfgEntriesList.toAircraftModelList(simulator));
|
||||||
CAircraftModelUtilities::mergeWithDbData(models, dbModels);
|
CAircraftModelUtilities::mergeWithDbData(models, dbModels);
|
||||||
const bool hasData = !models.isEmpty();
|
const bool hasData = !models.isEmpty();
|
||||||
if (hasData)
|
if (hasData)
|
||||||
@@ -136,7 +117,7 @@ namespace BlackMisc
|
|||||||
this->setCachedModels(models); // not thread safe
|
this->setCachedModels(models); // not thread safe
|
||||||
}
|
}
|
||||||
// currently I treat no data as error
|
// currently I treat no data as error
|
||||||
emit this->loadingFinished(hasData, this->getSimulator());
|
emit this->loadingFinished(hasData, simulator);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -156,8 +137,9 @@ namespace BlackMisc
|
|||||||
bool CAircraftCfgParser::areModelFilesUpdated() const
|
bool CAircraftCfgParser::areModelFilesUpdated() const
|
||||||
{
|
{
|
||||||
const QDateTime cacheTs(getCacheTimestamp());
|
const QDateTime cacheTs(getCacheTimestamp());
|
||||||
|
|
||||||
if (!cacheTs.isValid()) { return true; }
|
if (!cacheTs.isValid()) { return true; }
|
||||||
return CFileUtils::containsFileNewerThan(cacheTs, this->getRootDirectory(), true, { fileFilter() }, this->m_excludedDirectories);
|
return CFileUtils::containsFileNewerThan(cacheTs, this->getModelDirectory(), true, { fileFilter() }, this->getModelExcludeDirectories(true));
|
||||||
}
|
}
|
||||||
|
|
||||||
CAircraftCfgEntriesList CAircraftCfgParser::performParsing(const QString &directory, const QStringList &excludeDirectories, bool *ok)
|
CAircraftCfgEntriesList CAircraftCfgParser::performParsing(const QString &directory, const QStringList &excludeDirectories, bool *ok)
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ namespace BlackMisc
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
//! Constructor
|
//! Constructor
|
||||||
CAircraftCfgParser(const BlackMisc::Simulation::CSimulatorInfo &simInfo, const QString &rootDirectory, const QStringList &exludes = {});
|
CAircraftCfgParser(const BlackMisc::Simulation::CSimulatorInfo &simInfo);
|
||||||
|
|
||||||
//! Virtual destructor
|
//! Virtual destructor
|
||||||
virtual ~CAircraftCfgParser();
|
virtual ~CAircraftCfgParser();
|
||||||
@@ -91,11 +91,11 @@ namespace BlackMisc
|
|||||||
//! Content after "="
|
//! Content after "="
|
||||||
static QString getFixedIniLineContent(const QString &line);
|
static QString getFixedIniLineContent(const QString &line);
|
||||||
|
|
||||||
CAircraftCfgEntriesList m_parsedCfgEntriesList; //!< parsed entries
|
|
||||||
QPointer<BlackMisc::CWorker> m_parserWorker; //!< worker will destroy itself, so weak pointer
|
|
||||||
|
|
||||||
//! Files to be used
|
//! Files to be used
|
||||||
static const QString &fileFilter();
|
static const QString &fileFilter();
|
||||||
|
|
||||||
|
CAircraftCfgEntriesList m_parsedCfgEntriesList; //!< parsed entries
|
||||||
|
QPointer<BlackMisc::CWorker> m_parserWorker; //!< worker will destroy itself, so weak pointer
|
||||||
};
|
};
|
||||||
} // namespace
|
} // namespace
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|||||||
@@ -47,9 +47,9 @@ namespace BlackMisc
|
|||||||
{
|
{
|
||||||
namespace XPlane
|
namespace XPlane
|
||||||
{
|
{
|
||||||
|
//! Normalizes CSL model "designators" e.g. __XPFW_Jets:A320_a:A320_a_Austrian_Airlines.obj
|
||||||
static void normalizePath(QString &path)
|
static void normalizePath(QString &path)
|
||||||
{
|
{
|
||||||
//! \todo KB consider CFileUtil::normalizeFilePathToQtStandard ??
|
|
||||||
for (auto &e : path)
|
for (auto &e : path)
|
||||||
{
|
{
|
||||||
if (e == '/' || e == ':' || e == '\\')
|
if (e == '/' || e == ':' || e == '\\')
|
||||||
@@ -59,8 +59,7 @@ namespace BlackMisc
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
CAircraftModelLoaderXPlane::CAircraftModelLoaderXPlane(const CSimulatorInfo &simInfo, const QString &rootDirectory, const QStringList &excludeDirs) :
|
CAircraftModelLoaderXPlane::CAircraftModelLoaderXPlane() : IAircraftModelLoader(CSimulatorInfo::XPLANE)
|
||||||
IAircraftModelLoader(simInfo, rootDirectory, excludeDirs)
|
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
CAircraftModelLoaderXPlane::~CAircraftModelLoaderXPlane()
|
CAircraftModelLoaderXPlane::~CAircraftModelLoaderXPlane()
|
||||||
@@ -71,22 +70,24 @@ namespace BlackMisc
|
|||||||
|
|
||||||
void CAircraftModelLoaderXPlane::startLoadingFromDisk(LoadMode mode, const CAircraftModelList &dbModels)
|
void CAircraftModelLoaderXPlane::startLoadingFromDisk(LoadMode mode, const CAircraftModelList &dbModels)
|
||||||
{
|
{
|
||||||
if (m_rootDirectory.isEmpty())
|
const CSimulatorInfo simulator = this->getSimulator();
|
||||||
|
const QString modelDirectory(this->m_settings.getModelDirectoryOrDefault(simulator)); // copy
|
||||||
|
const QStringList excludedDirectories(this->m_settings.getModelExcludeDirectoryPatternsOrDefault(simulator, true)); // copy
|
||||||
|
|
||||||
|
if (modelDirectory.isEmpty())
|
||||||
{
|
{
|
||||||
this->clearCache();
|
this->clearCache();
|
||||||
emit loadingFinished(false, this->getSimulator());
|
emit loadingFinished(false, simulator);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mode.testFlag(LoadInBackground))
|
if (mode.testFlag(LoadInBackground))
|
||||||
{
|
{
|
||||||
if (m_parserWorker && !m_parserWorker->isFinished()) { return; }
|
if (m_parserWorker && !m_parserWorker->isFinished()) { return; }
|
||||||
auto rootDirectory = m_rootDirectory;
|
|
||||||
auto excludedDirectories = m_excludedDirectories;
|
|
||||||
m_parserWorker = BlackMisc::CWorker::fromTask(this, "CAircraftModelLoaderXPlane::performParsing",
|
m_parserWorker = BlackMisc::CWorker::fromTask(this, "CAircraftModelLoaderXPlane::performParsing",
|
||||||
[this, rootDirectory, excludedDirectories, dbModels]()
|
[this, modelDirectory, excludedDirectories, dbModels]()
|
||||||
{
|
{
|
||||||
auto models = performParsing(rootDirectory, excludedDirectories);
|
auto models = performParsing(modelDirectory, excludedDirectories);
|
||||||
CAircraftModelUtilities::mergeWithDbData(models, dbModels);
|
CAircraftModelUtilities::mergeWithDbData(models, dbModels);
|
||||||
return models;
|
return models;
|
||||||
});
|
});
|
||||||
@@ -97,7 +98,7 @@ namespace BlackMisc
|
|||||||
}
|
}
|
||||||
else if (mode.testFlag(LoadDirectly))
|
else if (mode.testFlag(LoadDirectly))
|
||||||
{
|
{
|
||||||
CAircraftModelList models(performParsing(m_rootDirectory, m_excludedDirectories));
|
CAircraftModelList models(performParsing(this->getModelDirectory(), excludedDirectories));
|
||||||
CAircraftModelUtilities::mergeWithDbData(models, dbModels);
|
CAircraftModelUtilities::mergeWithDbData(models, dbModels);
|
||||||
updateInstalledModels(models);
|
updateInstalledModels(models);
|
||||||
}
|
}
|
||||||
@@ -112,7 +113,7 @@ namespace BlackMisc
|
|||||||
{
|
{
|
||||||
const QDateTime cacheTs(getCacheTimestamp());
|
const QDateTime cacheTs(getCacheTimestamp());
|
||||||
if (!cacheTs.isValid()) { return true; }
|
if (!cacheTs.isValid()) { return true; }
|
||||||
return CFileUtils::containsFileNewerThan(cacheTs, this->getRootDirectory(), true, {fileFilterCsl(), fileFilterFlyable()}, this->m_excludedDirectories);
|
return CFileUtils::containsFileNewerThan(cacheTs, this->getModelDirectory(), true, {fileFilterCsl(), fileFilterFlyable()}, this->getModelExcludeDirectories(false));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ namespace BlackMisc
|
|||||||
namespace XPlane
|
namespace XPlane
|
||||||
{
|
{
|
||||||
/*!
|
/*!
|
||||||
* \brief XPlane aircraft model loader
|
* XPlane aircraft model loader
|
||||||
* \todo Obj8Aircraft and Obj8 parsers are not yet implemented
|
* \todo Obj8Aircraft and Obj8 parsers are not yet implemented
|
||||||
*/
|
*/
|
||||||
class BLACKMISC_EXPORT CAircraftModelLoaderXPlane : public BlackMisc::Simulation::IAircraftModelLoader
|
class BLACKMISC_EXPORT CAircraftModelLoaderXPlane : public BlackMisc::Simulation::IAircraftModelLoader
|
||||||
@@ -42,7 +42,7 @@ namespace BlackMisc
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
//! Constructor
|
//! Constructor
|
||||||
CAircraftModelLoaderXPlane(const BlackMisc::Simulation::CSimulatorInfo &simInfo, const QString &rootDirectory, const QStringList &exludes = {});
|
CAircraftModelLoaderXPlane();
|
||||||
|
|
||||||
//! Virtual destructor
|
//! Virtual destructor
|
||||||
virtual ~CAircraftModelLoaderXPlane();
|
virtual ~CAircraftModelLoaderXPlane();
|
||||||
|
|||||||
Reference in New Issue
Block a user