mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-27 11:05:44 +08:00
Allow some long lasting validation functions to be stopped/interrupted from "outside"
This commit is contained in:
committed by
Mat Sutcliffe
parent
f3bfaa3179
commit
049ded16cc
@@ -1527,9 +1527,9 @@ namespace BlackMisc
|
|||||||
return msgs;
|
return msgs;
|
||||||
}
|
}
|
||||||
|
|
||||||
CStatusMessageList CAircraftModelList::validateFiles(CAircraftModelList &validModels, CAircraftModelList &invalidModels, bool ignoreEmptyFileNames, int stopAtFailedFiles, bool &stopped, const QString &simRootDirectory, bool alreadySortedByFn) const
|
CStatusMessageList CAircraftModelList::validateFiles(CAircraftModelList &validModels, CAircraftModelList &invalidModels, bool ignoreEmptyFileNames, int stopAtFailedFiles, bool &wasStopped, const QString &simRootDirectory, bool alreadySortedByFn) const
|
||||||
{
|
{
|
||||||
stopped = false;
|
wasStopped = false;
|
||||||
|
|
||||||
CStatusMessageList msgs;
|
CStatusMessageList msgs;
|
||||||
QSet<QString> failedFiles;
|
QSet<QString> failedFiles;
|
||||||
@@ -1549,6 +1549,7 @@ namespace BlackMisc
|
|||||||
|
|
||||||
for (const CAircraftModel &model : as_const(sorted))
|
for (const CAircraftModel &model : as_const(sorted))
|
||||||
{
|
{
|
||||||
|
if (wasStopped) { break; } // allow breaking from external
|
||||||
bool ok = false;
|
bool ok = false;
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
@@ -1600,7 +1601,7 @@ namespace BlackMisc
|
|||||||
CAircraftModelList::addAsValidOrInvalidModel(model, ok, validModels, invalidModels);
|
CAircraftModelList::addAsValidOrInvalidModel(model, ok, validModels, invalidModels);
|
||||||
if (stopAtFailedFiles > 0 && failedFilesCount >= stopAtFailedFiles)
|
if (stopAtFailedFiles > 0 && failedFilesCount >= stopAtFailedFiles)
|
||||||
{
|
{
|
||||||
stopped = true;
|
wasStopped = true;
|
||||||
msgs.push_back(CStatusMessage(this).validationWarning(u"Stopping after %1 failed files") << failedFilesCount);
|
msgs.push_back(CStatusMessage(this).validationWarning(u"Stopping after %1 failed files") << failedFilesCount);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -509,7 +509,7 @@ namespace BlackMisc
|
|||||||
CStatusMessageList validateDistributors(const CDistributorList &distributors, CAircraftModelList &validModels, CAircraftModelList &invalidModels) const;
|
CStatusMessageList validateDistributors(const CDistributorList &distributors, CAircraftModelList &validModels, CAircraftModelList &invalidModels) const;
|
||||||
|
|
||||||
//! Validate files (file exists etc.)
|
//! Validate files (file exists etc.)
|
||||||
CStatusMessageList validateFiles(CAircraftModelList &validModels, CAircraftModelList &invalidModels, bool ignoreEmptyFileNames, int stopAtFailedFiles, bool &stopped, const QString &simRootDirectory, bool alreadySortedByFn = false) const;
|
CStatusMessageList validateFiles(CAircraftModelList &validModels, CAircraftModelList &invalidModels, bool ignoreEmptyFileNames, int stopAtFailedFiles, bool &wasStopped, const QString &simRootDirectory, bool alreadySortedByFn = false) const;
|
||||||
|
|
||||||
//! To compact JSON format
|
//! To compact JSON format
|
||||||
QJsonObject toMemoizedJson() const;
|
QJsonObject toMemoizedJson() const;
|
||||||
|
|||||||
@@ -140,7 +140,7 @@ namespace BlackMisc
|
|||||||
return ok ? dir.absoluteFilePath(fn) : "";
|
return ok ? dir.absoluteFilePath(fn) : "";
|
||||||
}
|
}
|
||||||
|
|
||||||
CStatusMessageList CAircraftModelUtilities::validateModelFiles(const CSimulatorInfo &simulator, 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 &wasStopped, const QString &simulatorDir)
|
||||||
{
|
{
|
||||||
// some generic tests
|
// some generic tests
|
||||||
CStatusMessageList msgs;
|
CStatusMessageList msgs;
|
||||||
@@ -170,27 +170,27 @@ namespace BlackMisc
|
|||||||
CStatusMessageList specificTests;
|
CStatusMessageList specificTests;
|
||||||
if (simulator.isMicrosoftOrPrepare3DSimulator() || models.isLikelyFsFamilyModelList())
|
if (simulator.isMicrosoftOrPrepare3DSimulator() || models.isLikelyFsFamilyModelList())
|
||||||
{
|
{
|
||||||
const CStatusMessageList specificTests1 = FsCommon::CFsCommonUtil::validateAircraftConfigFiles(models, validModels, invalidModels, ignoreEmpty, stopAtFailedFiles, stopped);
|
const CStatusMessageList specificTests1 = FsCommon::CFsCommonUtil::validateAircraftConfigFiles(models, validModels, invalidModels, ignoreEmpty, stopAtFailedFiles, wasStopped);
|
||||||
specificTests.push_back(specificTests1);
|
specificTests.push_back(specificTests1);
|
||||||
|
|
||||||
if (simulator.isP3D())
|
if (simulator.isP3D())
|
||||||
{
|
{
|
||||||
const CStatusMessageList specificTests2 = FsCommon::CFsCommonUtil::validateP3DSimObjectsPath(models, validModels, invalidModels, ignoreEmpty, stopAtFailedFiles, stopped, simulatorDir);
|
const CStatusMessageList specificTests2 = FsCommon::CFsCommonUtil::validateP3DSimObjectsPath(models, validModels, invalidModels, ignoreEmpty, stopAtFailedFiles, wasStopped, simulatorDir);
|
||||||
specificTests.push_back(specificTests2);
|
specificTests.push_back(specificTests2);
|
||||||
}
|
}
|
||||||
else if (simulator.isFSX())
|
else if (simulator.isFSX())
|
||||||
{
|
{
|
||||||
const CStatusMessageList specificTests2 = FsCommon::CFsCommonUtil::validateFSXSimObjectsPath(models, validModels, invalidModels, ignoreEmpty, stopAtFailedFiles, stopped, simulatorDir);
|
const CStatusMessageList specificTests2 = FsCommon::CFsCommonUtil::validateFSXSimObjectsPath(models, validModels, invalidModels, ignoreEmpty, stopAtFailedFiles, wasStopped, simulatorDir);
|
||||||
specificTests.push_back(specificTests2);
|
specificTests.push_back(specificTests2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (simulator.isXPlane() || models.isLikelyXPlaneModelList())
|
else if (simulator.isXPlane() || models.isLikelyXPlaneModelList())
|
||||||
{
|
{
|
||||||
specificTests = models.validateFiles(validModels, invalidModels, ignoreEmpty, stopAtFailedFiles, stopped, simulatorDir);
|
specificTests = models.validateFiles(validModels, invalidModels, ignoreEmpty, stopAtFailedFiles, wasStopped, simulatorDir);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
specificTests = models.validateFiles(validModels, invalidModels, ignoreEmpty, stopAtFailedFiles, stopped, {});
|
specificTests = models.validateFiles(validModels, invalidModels, ignoreEmpty, stopAtFailedFiles, wasStopped, {});
|
||||||
}
|
}
|
||||||
|
|
||||||
msgs.push_back(specificTests);
|
msgs.push_back(specificTests);
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ namespace BlackMisc
|
|||||||
static QString createIcaoAirlineAircraftHtmlMatrixFile(const BlackMisc::Simulation::CAircraftModelList &models, const QString &tempDir);
|
static QString createIcaoAirlineAircraftHtmlMatrixFile(const BlackMisc::Simulation::CAircraftModelList &models, const QString &tempDir);
|
||||||
|
|
||||||
//! Validate aircraft.cfg entries
|
//! Validate aircraft.cfg entries
|
||||||
static CStatusMessageList validateModelFiles(const CSimulatorInfo &simulator, 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 &wasStopped, const QString &simulatorDir);
|
||||||
};
|
};
|
||||||
} //namespace
|
} //namespace
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|||||||
@@ -639,14 +639,14 @@ namespace BlackMisc
|
|||||||
return paths;
|
return paths;
|
||||||
}
|
}
|
||||||
|
|
||||||
CStatusMessageList CFsCommonUtil::validateAircraftConfigFiles(const CAircraftModelList &models, CAircraftModelList &validModels, CAircraftModelList &invalidModels, bool ignoreEmptyFileNames, int stopAtFailedFiles, bool &stopped)
|
CStatusMessageList CFsCommonUtil::validateAircraftConfigFiles(const CAircraftModelList &models, CAircraftModelList &validModels, CAircraftModelList &invalidModels, bool ignoreEmptyFileNames, int stopAtFailedFiles, bool &wasStopped)
|
||||||
{
|
{
|
||||||
CStatusMessage m;
|
CStatusMessage m;
|
||||||
CAircraftModelList sorted(models);
|
CAircraftModelList sorted(models);
|
||||||
sorted.sortByFileName();
|
sorted.sortByFileName();
|
||||||
stopped = false;
|
wasStopped = false;
|
||||||
CStatusMessageList msgs = sorted.validateFiles(validModels, invalidModels, ignoreEmptyFileNames, stopAtFailedFiles, stopped, QString(), true);
|
CStatusMessageList msgs = sorted.validateFiles(validModels, invalidModels, ignoreEmptyFileNames, stopAtFailedFiles, wasStopped, QString(), true);
|
||||||
if (stopped || validModels.isEmpty()) { return msgs; }
|
if (wasStopped || validModels.isEmpty()) { return msgs; }
|
||||||
|
|
||||||
const CAircraftModelList nonFsModels = validModels.findNonFsFamilyModels();
|
const CAircraftModelList nonFsModels = validModels.findNonFsFamilyModels();
|
||||||
if (!nonFsModels.isEmpty())
|
if (!nonFsModels.isEmpty())
|
||||||
@@ -655,6 +655,7 @@ namespace BlackMisc
|
|||||||
{
|
{
|
||||||
m = CStatusMessage(getLogCategories(), CStatusMessage::SeverityError, QStringLiteral("Removed '%1' non FS family model").arg(model.getModelStringAndDbKey()), true);
|
m = CStatusMessage(getLogCategories(), CStatusMessage::SeverityError, QStringLiteral("Removed '%1' non FS family model").arg(model.getModelStringAndDbKey()), true);
|
||||||
msgs.push_back(m);
|
msgs.push_back(m);
|
||||||
|
if (wasStopped) { break; } // allow to break from "outside"
|
||||||
}
|
}
|
||||||
|
|
||||||
const int d = validModels.removeIfNotFsFamily();
|
const int d = validModels.removeIfNotFsFamily();
|
||||||
@@ -668,6 +669,7 @@ namespace BlackMisc
|
|||||||
for (const QString &fileName : fileNames)
|
for (const QString &fileName : fileNames)
|
||||||
{
|
{
|
||||||
bool ok = false;
|
bool ok = false;
|
||||||
|
if (wasStopped) { break; } // allow to break from "outside"
|
||||||
const CAircraftCfgEntriesList entries = CAircraftCfgParser::performParsingOfSingleFile(fileName, ok, msgs);
|
const CAircraftCfgEntriesList entries = CAircraftCfgParser::performParsingOfSingleFile(fileName, ok, msgs);
|
||||||
const QSet<QString> removeModelStrings = entries.getTitleSetUpperCase();
|
const QSet<QString> removeModelStrings = entries.getTitleSetUpperCase();
|
||||||
const CAircraftModelList removedModels = validModels.removeIfFileButNotInSet(fileName, removeModelStrings);
|
const CAircraftModelList removedModels = validModels.removeIfFileButNotInSet(fileName, removeModelStrings);
|
||||||
@@ -701,16 +703,16 @@ namespace BlackMisc
|
|||||||
return msgs;
|
return msgs;
|
||||||
}
|
}
|
||||||
|
|
||||||
CStatusMessageList CFsCommonUtil::validateP3DSimObjectsPath(const CAircraftModelList &models, CAircraftModelList &validModels, CAircraftModelList &invalidModels, bool ignoreEmptyFileNames, int stopAtFailedFiles, bool &stopped, const QString &simulatorDir)
|
CStatusMessageList CFsCommonUtil::validateP3DSimObjectsPath(const CAircraftModelList &models, CAircraftModelList &validModels, CAircraftModelList &invalidModels, bool ignoreEmptyFileNames, int stopAtFailedFiles, bool &wasStopped, const QString &simulatorDir)
|
||||||
{
|
{
|
||||||
const QString simObjectsDir = simulatorDir.isEmpty() ? CFsCommonUtil::p3dSimObjectsDir() : CFsCommonUtil::p3dSimObjectsDirFromSimDir(simulatorDir);
|
const QString simObjectsDir = simulatorDir.isEmpty() ? CFsCommonUtil::p3dSimObjectsDir() : CFsCommonUtil::p3dSimObjectsDirFromSimDir(simulatorDir);
|
||||||
const QStringList simObjectPaths = CFsCommonUtil::p3dSimObjectsDirPlusAddOnXmlSimObjectsPaths(simObjectsDir, "v4");
|
const QStringList simObjectPaths = CFsCommonUtil::p3dSimObjectsDirPlusAddOnXmlSimObjectsPaths(simObjectsDir, "v4");
|
||||||
return CFsCommonUtil::validateSimObjectsPath(QSet<QString>(simObjectPaths.begin(), simObjectPaths.end()), models, validModels, invalidModels, ignoreEmptyFileNames, stopAtFailedFiles, stopped);
|
return CFsCommonUtil::validateSimObjectsPath(QSet<QString>(simObjectPaths.begin(), simObjectPaths.end()), models, validModels, invalidModels, ignoreEmptyFileNames, stopAtFailedFiles, wasStopped);
|
||||||
}
|
}
|
||||||
|
|
||||||
CStatusMessageList CFsCommonUtil::validateFSXSimObjectsPath(const CAircraftModelList &models, CAircraftModelList &validModels, CAircraftModelList &invalidModels, bool ignoreEmptyFileNames, int stopAtFailedFiles, bool &stopped, const QString &simulatorDir)
|
CStatusMessageList CFsCommonUtil::validateFSXSimObjectsPath(const CAircraftModelList &models, CAircraftModelList &validModels, CAircraftModelList &invalidModels, bool ignoreEmptyFileNames, int stopAtFailedFiles, bool &stopped, const QString &simulatorDir)
|
||||||
{
|
{
|
||||||
Q_UNUSED(simulatorDir);
|
Q_UNUSED(simulatorDir)
|
||||||
const QStringList simObjectPaths = CFsCommonUtil::fsxSimObjectsDirPlusAddOnXmlSimObjectsPaths();
|
const QStringList simObjectPaths = CFsCommonUtil::fsxSimObjectsDirPlusAddOnXmlSimObjectsPaths();
|
||||||
return CFsCommonUtil::validateSimObjectsPath(QSet<QString>(simObjectPaths.begin(), simObjectPaths.end()), models, validModels, invalidModels, ignoreEmptyFileNames, stopAtFailedFiles, stopped);
|
return CFsCommonUtil::validateSimObjectsPath(QSet<QString>(simObjectPaths.begin(), simObjectPaths.end()), models, validModels, invalidModels, ignoreEmptyFileNames, stopAtFailedFiles, stopped);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -139,15 +139,15 @@ namespace BlackMisc
|
|||||||
|
|
||||||
//! Validate aircraft.cfg entries (sometimes also sim.cfg)
|
//! Validate aircraft.cfg entries (sometimes also sim.cfg)
|
||||||
//! \remark only for FSX/P3D/FS9 models
|
//! \remark only for FSX/P3D/FS9 models
|
||||||
static CStatusMessageList validateAircraftConfigFiles(const CAircraftModelList &models, CAircraftModelList &validModels, CAircraftModelList &invalidModels, bool ignoreEmptyFileNames, int stopAtFailedFiles, bool &stopped);
|
static CStatusMessageList validateAircraftConfigFiles(const CAircraftModelList &models, CAircraftModelList &validModels, CAircraftModelList &invalidModels, bool ignoreEmptyFileNames, int stopAtFailedFiles, bool &wasStopped);
|
||||||
|
|
||||||
//! Validate if known SimObjects path are used
|
//! Validate if known SimObjects path are used
|
||||||
//! \remark only for P3D
|
//! \remark only for P3D
|
||||||
static CStatusMessageList validateP3DSimObjectsPath(const CAircraftModelList &models, CAircraftModelList &validModels, CAircraftModelList &invalidModels, bool ignoreEmptyFileNames, int stopAtFailedFiles, bool &stopped, const QString &simulatorDir);
|
static CStatusMessageList validateP3DSimObjectsPath(const CAircraftModelList &models, CAircraftModelList &validModels, CAircraftModelList &invalidModels, bool ignoreEmptyFileNames, int stopAtFailedFiles, bool &wasStopped, const QString &simulatorDir);
|
||||||
|
|
||||||
//! Validate if known SimObjects path are used
|
//! Validate if known SimObjects path are used
|
||||||
//! \remark only for FSX
|
//! \remark only for FSX
|
||||||
static CStatusMessageList validateFSXSimObjectsPath(const CAircraftModelList &models, CAircraftModelList &validModels, CAircraftModelList &invalidModels, bool ignoreEmptyFileNames, int stopAtFailedFiles, bool &stopped, const QString &simulatorDir);
|
static CStatusMessageList validateFSXSimObjectsPath(const CAircraftModelList &models, CAircraftModelList &validModels, CAircraftModelList &invalidModels, bool ignoreEmptyFileNames, int stopAtFailedFiles, bool &wasStopped, const QString &simulatorDir);
|
||||||
|
|
||||||
//! .air file filter
|
//! .air file filter
|
||||||
static const QString airFileFilter();
|
static const QString airFileFilter();
|
||||||
|
|||||||
Reference in New Issue
Block a user