fix: Correct path for MSFS2020 model validation

This commit is contained in:
tzobler
2024-11-30 18:43:41 +01:00
committed by Lars Toenning
parent 59021f9a0a
commit 937c2aa959
7 changed files with 29 additions and 68 deletions

View File

@@ -93,14 +93,17 @@ namespace swift::core::context
m_validator->startUpdating(60);
}
// For validation we need simulator directory and model directory
// this function is called at start (simulator=0) and when there is an active connection to a simulator
void CContextSimulator::setValidator(const CSimulatorInfo &simulator)
{
if (simulator.isSingleSimulator())
{
const QString simDir = m_multiSimulatorSettings.getSimulatorDirectoryOrDefault(simulator);
m_validator->setCurrentSimulator(simulator, simDir);
const QStringList modelDirList = m_multiSimulatorSettings.getModelDirectoriesOrDefault(simulator);
m_validator->setCurrentSimulator(simulator, simDir, modelDirList);
}
else { m_validator->setCurrentSimulator(CSimulatorInfo::None, {}); }
else { m_validator->setCurrentSimulator(CSimulatorInfo::None, {}, {}); }
}
CContextSimulator *CContextSimulator::registerWithDBus(CDBusServer *server)

View File

@@ -28,11 +28,13 @@ namespace swift::misc::simulation
m_updateTimer.setInterval(60 * 1000);
}
void CBackgroundValidation::setCurrentSimulator(const CSimulatorInfo &simulator, const QString &simDirectory)
void CBackgroundValidation::setCurrentSimulator(const CSimulatorInfo &simulator, const QString &simDirectory,
const QStringList &modelDirList)
{
QWriteLocker l(&m_lock);
m_simulator = simulator;
m_simDirectory = simDirectory;
m_modelDirList = modelDirList;
}
bool CBackgroundValidation::wasAlreadyChecked(const CSimulatorInfo &simulator) const

View File

@@ -35,7 +35,8 @@ namespace swift::misc::simulation
//! Corresponding simulator
//! \threadsafe
void setCurrentSimulator(const CSimulatorInfo &simulator, const QString &simDirectory);
void setCurrentSimulator(const CSimulatorInfo &simulator, const QString &simDirectory,
const QStringList &modelDirList);
//! Was already checked for simulator?
//! \threadsafe
@@ -80,7 +81,7 @@ namespace swift::misc::simulation
std::atomic_bool m_wasStopped { false }; //!< has been stopped or should be stopped
CSimulatorInfo m_simulator; //!< simulator
QString m_simDirectory; //!< corresponding sim directory
QStringList m_modelDirList; //!< corresponding modeldirectory
// last result values, mostly needed when running in the distributed swift system and we want to get the values
CAircraftModelList m_lastResultValid;
CAircraftModelList m_lastResultInvalid;

View File

@@ -224,7 +224,7 @@ namespace swift::misc::simulation::fscommon
std::atomic_bool &stopped, const QString &simulatorDir)
{
Q_UNUSED(simulatorDir)
const QStringList simObjectPaths = CFsDirectories::msfsSimObjectsDirPlusAddOnXmlSimObjectsPaths();
const QStringList simObjectPaths = CFsDirectories::msfsSimObjectsDirPath();
return CFsCommonUtil::validateSimObjectsPath(QSet<QString>(simObjectPaths.begin(), simObjectPaths.end()),
models, validModels, invalidModels, ignoreEmptyFileNames,
stopAtFailedFiles, stopped);

View File

@@ -91,7 +91,7 @@ namespace swift::misc::simulation::fscommon
return dir;
}
QString msfsDirImpl()
static QString msfsDirImpl()
{
const QStringList locations = QStandardPaths::standardLocations(QStandardPaths::GenericDataLocation);
for (const QString &path : locations)
@@ -165,7 +165,7 @@ namespace swift::misc::simulation::fscommon
{
QString dir(CFsDirectories::msfsDir());
if (dir.isEmpty()) { return {}; }
return CFsDirectories::msfsSimObjectsDirFromSimDir(dir);
return CFileUtils::normalizeFilePathToQtStandard(msfsPackagesDirImpl());
}
const QString &CFsDirectories::fsxSimObjectsDir()
@@ -186,12 +186,6 @@ namespace swift::misc::simulation::fscommon
return CFileUtils::appendFilePaths(CFileUtils::normalizeFilePathToQtStandard(simDir), "SimObjects");
}
QString CFsDirectories::msfsSimObjectsDirFromSimDir(const QString &simDir)
{
if (simDir.isEmpty()) { return {}; }
return CFileUtils::appendFilePaths(CFileUtils::normalizeFilePathToQtStandard(simDir), "SimObjects");
}
const QStringList &CFsDirectories::fsxSimObjectsExcludeDirectoryPatterns()
{
static const QStringList exclude { "SimObjects/Animals", "SimObjects/Misc", "SimObjects/GroundVehicles",
@@ -321,22 +315,11 @@ namespace swift::misc::simulation::fscommon
return allPaths;
}
QStringList CFsDirectories::msfsSimObjectsDirPlusAddOnXmlSimObjectsPaths(const QString &simObjectsDir)
QStringList CFsDirectories::msfsSimObjectsDirPath(const QString &simObjectsDir)
{
// finding the user settings only works on P3D machine
QStringList allPaths = CFsDirectories::allMsfsSimObjectPaths().values();
const QString sod = CFileUtils::normalizeFilePathToQtStandard(
simObjectsDir.isEmpty() ? CFsDirectories::msfsSimObjectsDir() : simObjectsDir);
if (!sod.isEmpty() && !allPaths.contains(sod, Qt::CaseInsensitive))
{
// case insensitive is important here
allPaths.push_front(sod);
}
allPaths.removeAll({}); // remove all empty
allPaths.removeDuplicates();
allPaths.sort(Qt::CaseInsensitive);
return allPaths;
Q_UNUSED(simObjectsDir);
static const QStringList Path { CFsDirectories::msfsSimObjectsDir() };
return Path;
}
QStringList CFsDirectories::p3dSimObjectsDirPlusAddOnXmlSimObjectsPaths(const QString &simObjectsDir,
@@ -628,11 +611,6 @@ namespace swift::misc::simulation::fscommon
return CFsDirectories::fsxSimObjectsPaths(CFsDirectories::findFsxConfigFiles(), true);
}
QSet<QString> CFsDirectories::allMsfsSimObjectPaths()
{
return CFsDirectories::msfsSimObjectsPaths(CFsDirectories::findMsfsConfigFiles(), true);
}
QStringList CFsDirectories::findFsxConfigFiles()
{
const QStringList locations = QStandardPaths::standardLocations(QStandardPaths::AppDataLocation);
@@ -654,28 +632,6 @@ namespace swift::misc::simulation::fscommon
return files;
}
QStringList CFsDirectories::findMsfsConfigFiles()
{
const QStringList locations = QStandardPaths::standardLocations(QStandardPaths::AppDataLocation);
QStringList files;
for (const QString &path : locations)
{
// TODO this acts as a placeholder. the file msfs.cfg doesn't exist
const QString file = CFileUtils::appendFilePaths(CFileUtils::pathUp(path), "Microsoft/MSFS/msfs.cfg");
const QFileInfo fi(file);
if (fi.exists())
{
files.push_back(fi.absoluteFilePath());
if (logConfigPathReading())
{
CLogMessage(static_cast<CFsDirectories *>(nullptr)).info(u"MSFS config file: '%1'")
<< fi.absoluteFilePath();
}
}
}
return files;
}
QSet<QString> CFsDirectories::fsxSimObjectsPaths(const QStringList &fsxFiles, bool checked)
{
QSet<QString> paths;

View File

@@ -41,9 +41,6 @@ namespace swift::misc::simulation::fscommon
//! FSX aircraft dir, relative to simulator directory
static QString fsxSimObjectsDirFromSimDir(const QString &simDir);
//! MSFS aircraft dir, relative to simulator directory
static QString msfsSimObjectsDirFromSimDir(const QString &simDir);
//! Exclude directories for simObjects
static const QStringList &fsxSimObjectsExcludeDirectoryPatterns();
@@ -54,7 +51,7 @@ namespace swift::misc::simulation::fscommon
static QStringList fsxSimObjectsDirPlusAddOnXmlSimObjectsPaths(const QString &simObjectsDir = "");
//! MSFS's simObject dir and the add on dirs
static QStringList msfsSimObjectsDirPlusAddOnXmlSimObjectsPaths(const QString &simObjectsDir = "");
static QStringList msfsSimObjectsDirPath(const QString &simObjectsDir = "");
//! P3D's simObject dir and the add on dirs
static QStringList p3dSimObjectsDirPlusAddOnXmlSimObjectsPaths(const QString &simObjectsDir,
@@ -129,16 +126,18 @@ namespace swift::misc::simulation::fscommon
//! Get all the SimObjects paths from all config files
static QSet<QString> allFsxSimObjectPaths();
// TODO TZ
//! Get all the SimObjects paths from all config files
static QSet<QString> allMsfsSimObjectPaths();
// static QSet<QString> allMsfsSimObjectPaths();
//! Find the config files (fsx.cfg)
// C:/Users/Joe Doe/AppData/Roaming/Microsoft/FSX/fsx.cfg
static QStringList findFsxConfigFiles();
// TODO TZ
//! Find the config files (fsx.cfg)
// C:/Users/Joe Doe/AppData/Roaming/Microsoft/FSX/fsx.cfg
static QStringList findMsfsConfigFiles();
// static QStringList findMsfsConfigFiles();
//! Get all the SimObjects paths from fsx.cfg
// SimObjectPaths.0=SimObjects\Airplanes

View File

@@ -322,18 +322,18 @@ namespace swift::misc::simulation::settings
return s.getSimulatorDirectoryOrDefault();
}
QStringList CMultiSimulatorSettings::getModelDirectoriesIfNotDefault(const CSimulatorInfo &simulator) const
{
const CSpecializedSimulatorSettings s = this->getSpecializedSettings(simulator);
return s.getModelDirectoriesIfNotDefault();
}
QStringList CMultiSimulatorSettings::getModelDirectoriesOrDefault(const CSimulatorInfo &simulator) const
{
const CSpecializedSimulatorSettings s = this->getSpecializedSettings(simulator);
return s.getModelDirectoriesOrDefault();
}
QStringList CMultiSimulatorSettings::getModelDirectoriesIfNotDefault(const CSimulatorInfo &simulator) const
{
const CSpecializedSimulatorSettings s = this->getSpecializedSettings(simulator);
return s.getModelDirectoriesIfNotDefault();
}
QString CMultiSimulatorSettings::getFirstModelDirectoryOrDefault(const CSimulatorInfo &simulator) const
{
const CSpecializedSimulatorSettings s = this->getSpecializedSettings(simulator);