mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-02 06:35:52 +08:00
Ref T660, utility functions
* check if model is in path * addAsValidOrInvalidModel * set corresponding simulator for validation * display validation of empty model set
This commit is contained in:
committed by
Mat Sutcliffe
parent
d59e1c3332
commit
f3ec7a8a68
@@ -766,6 +766,19 @@ namespace BlackMisc
|
||||
return this->getFileDirectory().absolutePath();
|
||||
}
|
||||
|
||||
bool CAircraftModel::isInPath(const QString &path, Qt::CaseSensitivity cs) const
|
||||
{
|
||||
const QString p(this->getFileDirectoryPath());
|
||||
if (path.isEmpty() || p.isEmpty()) { return false; }
|
||||
if (path.startsWith('/'))
|
||||
{
|
||||
if (path.endsWith('/')) { return p.contains(path.mid(1, path.length() - 2), cs); }
|
||||
return p.contains(path.mid(1));
|
||||
}
|
||||
if (path.endsWith('/')) { return p.contains(path.left(path.length() - 1), cs); }
|
||||
return (p.contains(path, cs));
|
||||
}
|
||||
|
||||
bool CAircraftModel::hasExistingIconFile() const
|
||||
{
|
||||
if (m_iconFile.isEmpty()) { return false; }
|
||||
|
||||
@@ -457,6 +457,9 @@ namespace BlackMisc
|
||||
//! Directory path if any
|
||||
QString getFileDirectoryPath() const;
|
||||
|
||||
//! Is the file in the give path
|
||||
bool isInPath(const QString &path, Qt::CaseSensitivity cs) const;
|
||||
|
||||
//! File name
|
||||
void setFileName(const QString &fileName) { m_fileName = fileName; }
|
||||
|
||||
|
||||
@@ -1325,7 +1325,7 @@ namespace BlackMisc
|
||||
{
|
||||
CAircraftModelList invalidModels;
|
||||
CAircraftModelList validModels;
|
||||
return validateForPublishing(validModels, invalidModels);
|
||||
return this->validateForPublishing(validModels, invalidModels);
|
||||
}
|
||||
|
||||
CStatusMessageList CAircraftModelList::validateForPublishing(CAircraftModelList &validModels, CAircraftModelList &invalidModels) const
|
||||
@@ -1351,7 +1351,7 @@ namespace BlackMisc
|
||||
CStatusMessage singleMsg(CStatusMessageList({msgModel, msgDb}).toSingleMessage());
|
||||
if (!singleMsg.isWarningOrAbove())
|
||||
{
|
||||
validModels.push_back(model);
|
||||
CAircraftModelList::addAsValidOrInvalidModel(model, true, validModels, invalidModels);
|
||||
continue;
|
||||
}
|
||||
if (model.hasModelString())
|
||||
@@ -1359,7 +1359,7 @@ namespace BlackMisc
|
||||
singleMsg.prependMessage(model.getModelString() % u": ");
|
||||
}
|
||||
msgs.push_back(singleMsg);
|
||||
invalidModels.push_back(model);
|
||||
CAircraftModelList::addAsValidOrInvalidModel(model, false, validModels, invalidModels);
|
||||
}
|
||||
return msgs;
|
||||
}
|
||||
@@ -1375,21 +1375,18 @@ namespace BlackMisc
|
||||
{
|
||||
const CStatusMessage msg = CStatusMessage(this).validationError(u"No DB distributors for validation");
|
||||
msgs.push_back(msg);
|
||||
invalidModels.push_back(*this);
|
||||
CAircraftModelList::addAsValidOrInvalidModels(*this, false, validModels, invalidModels);
|
||||
return msgs;
|
||||
}
|
||||
|
||||
for (const CAircraftModel &model : *this)
|
||||
{
|
||||
if (model.hasDbDistributor() || model.matchesAnyDbDistributor(distributorsFromDb))
|
||||
{
|
||||
validModels.push_back(model);
|
||||
}
|
||||
else
|
||||
const bool valid = (model.hasDbDistributor() || model.matchesAnyDbDistributor(distributorsFromDb));
|
||||
CAircraftModelList::addAsValidOrInvalidModel(model, valid, validModels, invalidModels);
|
||||
if (!valid)
|
||||
{
|
||||
const CStatusMessage msg = CStatusMessage(this).validationError(u"No valid distributor for '%1', was '%2'") << model.getModelString() << model.getDistributor().getDbKey();
|
||||
msgs.push_back(msg);
|
||||
invalidModels.push_back(model);
|
||||
}
|
||||
}
|
||||
return msgs;
|
||||
@@ -1397,8 +1394,6 @@ namespace BlackMisc
|
||||
|
||||
CStatusMessageList CAircraftModelList::validateFiles(CAircraftModelList &validModels, CAircraftModelList &invalidModels, bool ignoreEmptyFileNames, int stopAtFailedFiles, bool &stopped, const QString &rootDirectory, bool alreadySortedByFn) const
|
||||
{
|
||||
invalidModels.clear();
|
||||
validModels.clear();
|
||||
stopped = false;
|
||||
|
||||
CStatusMessageList msgs;
|
||||
@@ -1466,15 +1461,7 @@ namespace BlackMisc
|
||||
}
|
||||
while (false);
|
||||
|
||||
if (ok)
|
||||
{
|
||||
validModels.push_back(model);
|
||||
}
|
||||
else
|
||||
{
|
||||
invalidModels.push_back(model);
|
||||
}
|
||||
|
||||
CAircraftModelList::addAsValidOrInvalidModel(model, ok, validModels, invalidModels);
|
||||
if (stopAtFailedFiles > 0 && failedFilesCount >= stopAtFailedFiles)
|
||||
{
|
||||
stopped = true;
|
||||
@@ -1717,5 +1704,26 @@ namespace BlackMisc
|
||||
return fi.exists();
|
||||
}
|
||||
|
||||
void CAircraftModelList::addAsValidOrInvalidModel(const CAircraftModel &model, bool valid, CAircraftModelList &validModels, CAircraftModelList &invalidModels)
|
||||
{
|
||||
if (valid)
|
||||
{
|
||||
validModels.push_back(model);
|
||||
invalidModels.removeModelWithString(model.getModelString(), Qt::CaseInsensitive);
|
||||
}
|
||||
else
|
||||
{
|
||||
invalidModels.push_back(model);
|
||||
validModels.removeModelWithString(model.getModelString(), Qt::CaseInsensitive);
|
||||
}
|
||||
}
|
||||
|
||||
void CAircraftModelList::addAsValidOrInvalidModels(const CAircraftModelList &models, bool valid, CAircraftModelList &validModels, CAircraftModelList &invalidModels)
|
||||
{
|
||||
for (const CAircraftModel &model : models)
|
||||
{
|
||||
CAircraftModelList::addAsValidOrInvalidModel(model, valid, validModels, invalidModels);
|
||||
}
|
||||
}
|
||||
} // namespace
|
||||
} // namespace
|
||||
|
||||
@@ -512,6 +512,11 @@ namespace BlackMisc
|
||||
static bool hasInvalidModelFile();
|
||||
//! @}
|
||||
|
||||
//! Add as valid or invalid model (mutual exclusive) @{
|
||||
static void addAsValidOrInvalidModel(const CAircraftModel &model, bool valid, CAircraftModelList &validModels, CAircraftModelList &invalidModels);
|
||||
static void addAsValidOrInvalidModels(const CAircraftModelList &models, bool valid, CAircraftModelList &validModels, CAircraftModelList &invalidModels);
|
||||
//! @}
|
||||
|
||||
//! Newer version
|
||||
static CAircraftModelList fromDatabaseJsonCaching(const QJsonArray &array,
|
||||
const Aviation::CAircraftIcaoCodeList &aircraftIcaos = {},
|
||||
|
||||
@@ -140,7 +140,7 @@ namespace BlackMisc
|
||||
return ok ? dir.absoluteFilePath(fn) : "";
|
||||
}
|
||||
|
||||
CStatusMessageList CAircraftModelUtilities::validateModelFiles(const CAircraftModelList &models, CAircraftModelList &validModels, CAircraftModelList &invalidModels, bool ignoreEmpty, int stopAtFailedFiles, bool &stopped, const QString &simulatorDir)
|
||||
CStatusMessageList CAircraftModelUtilities::validateModelFiles(const CSimulatorInfo &simulator, const CAircraftModelList &models, CAircraftModelList &validModels, CAircraftModelList &invalidModels, bool ignoreEmpty, int stopAtFailedFiles, bool &stopped, const QString &simulatorDir)
|
||||
{
|
||||
// some generic tests
|
||||
CStatusMessageList msgs;
|
||||
@@ -164,14 +164,23 @@ namespace BlackMisc
|
||||
|
||||
// specific checks for FSX/XPlane/FG
|
||||
CStatusMessageList specificTests;
|
||||
if (models.isLikelyFsFamilyModelList())
|
||||
if (simulator.isMicrosoftOrPrepare3DSimulator() || models.isLikelyFsFamilyModelList())
|
||||
{
|
||||
const CStatusMessageList specificTests1 = FsCommon::CFsCommonUtil::validateConfigFiles(models, validModels, invalidModels, ignoreEmpty, stopAtFailedFiles, stopped);
|
||||
const CStatusMessageList specificTests2 = FsCommon::CFsCommonUtil::validateP3DSimObjectsPath(models, validModels, invalidModels, ignoreEmpty, stopAtFailedFiles, stopped);
|
||||
specificTests.push_back(specificTests1);
|
||||
specificTests.push_back(specificTests2);
|
||||
|
||||
if (simulator.isP3D())
|
||||
{
|
||||
const CStatusMessageList specificTests2 = FsCommon::CFsCommonUtil::validateP3DSimObjectsPath(models, validModels, invalidModels, ignoreEmpty, stopAtFailedFiles, stopped, simulatorDir);
|
||||
specificTests.push_back(specificTests2);
|
||||
}
|
||||
else if (simulator.isFSX())
|
||||
{
|
||||
const CStatusMessageList specificTests2 = FsCommon::CFsCommonUtil::validateFSXSimObjectsPath(models, validModels, invalidModels, ignoreEmpty, stopAtFailedFiles, stopped);
|
||||
specificTests.push_back(specificTests2);
|
||||
}
|
||||
}
|
||||
else if (models.isLikelyXPlaneModelList())
|
||||
else if (simulator.isXPlane() || models.isLikelyXPlaneModelList())
|
||||
{
|
||||
specificTests = models.validateFiles(validModels, invalidModels, ignoreEmpty, stopAtFailedFiles, stopped, simulatorDir);
|
||||
}
|
||||
|
||||
@@ -36,7 +36,7 @@ namespace BlackMisc
|
||||
static QString createIcaoAirlineAircraftHtmlMatrixFile(const BlackMisc::Simulation::CAircraftModelList &models, const QString &tempDir);
|
||||
|
||||
//! Validate aircraft.cfg entries
|
||||
static CStatusMessageList validateModelFiles(const CAircraftModelList &models, CAircraftModelList &validModels, CAircraftModelList &invalidModels, bool ignoreEmpty, int stopAtFailedFiles, bool &stopped, const QString &simulatorDir);
|
||||
static CStatusMessageList validateModelFiles(const CSimulatorInfo &simulator, const CAircraftModelList &models, CAircraftModelList &validModels, CAircraftModelList &invalidModels, bool ignoreEmpty, int stopAtFailedFiles, bool &stopped, const QString &simulatorDir);
|
||||
};
|
||||
} //namespace
|
||||
} // namespace
|
||||
|
||||
@@ -130,19 +130,22 @@ namespace BlackMisc
|
||||
|
||||
onlyErrorsAndWarnings = setup.onlyShowVerificationWarningsAndErrors();
|
||||
const CAircraftModelList models = m_modelSets.getCachedModels(simulator);
|
||||
const qint64 now = QDateTime::currentMSecsSinceEpoch();
|
||||
validated = true;
|
||||
|
||||
if (models.isEmpty())
|
||||
{
|
||||
msgs.push_back(CStatusMessage(this, CStatusMessage::SeverityWarning, QStringLiteral("No models in set for '%1'").arg(simulator.toQString(true))));
|
||||
break;
|
||||
}
|
||||
msgs = CAircraftModelUtilities::validateModelFiles(models, valid, invalid, false, 25, wasStopped, m_simDirectory);
|
||||
else
|
||||
{
|
||||
msgs = CAircraftModelUtilities::validateModelFiles(simulator, models, valid, invalid, false, 25, wasStopped, m_simDirectory);
|
||||
}
|
||||
|
||||
const qint64 now = QDateTime::currentMSecsSinceEpoch();
|
||||
const qint64 deltaTimeMs = now - started;
|
||||
msgs.push_back(CStatusMessage(this, CStatusMessage::SeverityInfo, QStringLiteral("Validated in %1ms").arg(deltaTimeMs)));
|
||||
msgs.sortBySeverityHighestFirst();
|
||||
msgs.freezeOrder();
|
||||
validated = true;
|
||||
|
||||
QWriteLocker l(&m_lock);
|
||||
m_lastResultValid = valid;
|
||||
|
||||
Reference in New Issue
Block a user