Ref T631, Adding FG default directories

Only works on windows so far
This commit is contained in:
Lars Toenning
2019-05-12 10:05:38 +02:00
committed by Klaus Basan
parent 60401e92d9
commit 8b69b7a637
4 changed files with 137 additions and 8 deletions

View File

@@ -51,7 +51,7 @@ namespace BlackMisc
{ {
aircraftIt.next(); aircraftIt.next();
if (CFileUtils::isExcludedDirectory(aircraftIt.fileInfo(), excludeDirectories, Qt::CaseInsensitive)) { continue; } if (CFileUtils::isExcludedDirectory(aircraftIt.fileInfo(), excludeDirectories, Qt::CaseInsensitive)) { continue; }
if (aircraftIt.filePath().toStdString().find("/AI/Aircraft") != std::string::npos) { continue; } if (aircraftIt.filePath().contains("/AI/Aircraft")) { continue; }
CAircraftModel model; CAircraftModel model;
QString modelName = aircraftIt.fileName(); QString modelName = aircraftIt.fileName();
modelName = modelName.remove("-set.xml"); modelName = modelName.remove("-set.xml");
@@ -108,11 +108,14 @@ namespace BlackMisc
CAircraftModelList allModels; CAircraftModelList allModels;
for (const QString &rootDirectory : rootDirectories) for (const QString &rootDirectory : rootDirectories)
{ {
if (QDir(rootDirectory + "/AI/Aircraft").exists()) QString dir = rootDirectory;
dir.replace('\\','/');
if (dir.contains("/AI/Aircraft"))
{ {
allModels.push_back(parseAIAirplanes(rootDirectory + "/AI/Aircraft", excludeDirectories)); allModels.push_back(parseAIAirplanes(dir, excludeDirectories));
} else {
allModels.push_back(parseFlyableAirplanes(dir, excludeDirectories));
} }
allModels.push_back(parseFlyableAirplanes(rootDirectory, excludeDirectories));
} }
return allModels; return allModels;

View File

@@ -0,0 +1,73 @@
/* Copyright (C) 2019
* swift Project Community / Contributors
*
* This file is part of swift project. It is subject to the license terms in the LICENSE file found in the top-level
* directory of this distribution. No part of swift project, including this file, may be copied, modified, propagated,
* or distributed except according to the terms contained in the LICENSE file.
*/
#include "flightgearutil.h"
#include "blackmisc/fileutils.h"
#include "blackmisc/directoryutils.h"
#include "blackconfig/buildconfig.h"
#include "qsystemdetection.h"
#include <QDir>
#include <QFile>
#include <QFileInfo>
#include <QIODevice>
#include <QTextStream>
#include <QSettings>
#include <QStandardPaths>
using namespace BlackConfig;
namespace BlackMisc
{
namespace Simulation
{
namespace Flightgear
{
const QString &CFlightgearUtil::flightgearRootDir()
{
static QString flightgearRootDir;
if (CBuildConfig::isRunningOnWindowsNtPlatform()){
QSettings flightgearRegistry("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\FlightGear_is1", QSettings::NativeFormat);
flightgearRootDir = flightgearRegistry.value("InstallLocation").toString().trimmed();
}
return flightgearRootDir;
}
bool CFlightgearUtil::isFlightgearRootDirExisting()
{
static const bool exists = QDir(flightgearRootDir()).exists();
return exists;
}
QStringList CFlightgearUtil::modelDirectoriesFromSimDir(const QString &simulatorDir)
{
QStringList dirs;
if (CBuildConfig::isRunningOnWindowsNtPlatform() && !simulatorDir.isEmpty()){
QString terraSyncFolder = QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation) + "/Flightgear/Aircraft";
if(QDir(terraSyncFolder).exists()){ dirs.append(terraSyncFolder); }
QString fgdataAIFolder = simulatorDir + "data/AI/Aircraft";
if (QDir(fgdataAIFolder).exists()) { dirs.append(fgdataAIFolder); }
}
return dirs;
}
const QStringList &CFlightgearUtil::flightgearModelDirectories()
{
static const QStringList dirs = flightgearRootDir().isEmpty() ? QStringList() : modelDirectoriesFromSimDir(flightgearRootDir());
return dirs;
}
const QStringList &CFlightgearUtil::flightgearModelExcludeDirectoryPatterns()
{
static const QStringList empty;
return empty;
}
} // namespace
} // namespace
} // namespace

View File

@@ -0,0 +1,51 @@
/* Copyright (C) 2019
* swift Project Community / Contributors
*
* This file is part of swift project. It is subject to the license terms in the LICENSE file found in the top-level
* directory of this distribution. No part of swift project, including this file, may be copied, modified, propagated,
* or distributed except according to the terms contained in the LICENSE file.
*/
//! \file
#ifndef BLACKMISC_SIMULATION_FLIGHTGEAR_FLIGHTGEARUTIL_H
#define BLACKMISC_SIMULATION_FLIGHTGEAR_FLIGHTGEARUTIL_H
#include "blackmisc/blackmiscexport.h"
#include <QStringList>
namespace BlackMisc
{
namespace Simulation
{
namespace Flightgear
{
//! Flightgear utils
class BLACKMISC_EXPORT CFlightgearUtil
{
public:
//! Constructor
CFlightgearUtil() = delete;
//! Flightgear root directory
//! Currently only available for windows and if Flightgear is installed through installer.
static const QString &flightgearRootDir();
//! Is the flightgearRootDir existing?
static bool isFlightgearRootDirExisting();
//! Model directories from simulator directory
static QStringList modelDirectoriesFromSimDir(const QString &simulatorDir);
//! Directories with models
static const QStringList &flightgearModelDirectories();
//! Exclude directories for models
static const QStringList &flightgearModelExcludeDirectoryPatterns();
};
} // namespace
} // namespace
} // namespace
#endif // guard

View File

@@ -10,6 +10,7 @@
#include "blackmisc/simulation/simulatedaircraft.h" #include "blackmisc/simulation/simulatedaircraft.h"
#include "blackmisc/simulation/fscommon/fscommonutil.h" #include "blackmisc/simulation/fscommon/fscommonutil.h"
#include "blackmisc/simulation/xplane/xplaneutil.h" #include "blackmisc/simulation/xplane/xplaneutil.h"
#include "blackmisc/simulation/flightgear/flightgearutil.h"
#include "blackmisc/stringutils.h" #include "blackmisc/stringutils.h"
#include "blackconfig/buildconfig.h" #include "blackconfig/buildconfig.h"
#include <QStringBuilder> #include <QStringBuilder>
@@ -18,6 +19,7 @@ using namespace BlackConfig;
using namespace BlackMisc::PhysicalQuantities; using namespace BlackMisc::PhysicalQuantities;
using namespace BlackMisc::Simulation::FsCommon; using namespace BlackMisc::Simulation::FsCommon;
using namespace BlackMisc::Simulation::XPlane; using namespace BlackMisc::Simulation::XPlane;
using namespace BlackMisc::Simulation::Flightgear;
namespace BlackMisc namespace BlackMisc
{ {
@@ -497,7 +499,7 @@ namespace BlackMisc
QStringList dirs; QStringList dirs;
switch (m_simulator.getSimulator()) switch (m_simulator.getSimulator())
{ {
case CSimulatorInfo::FG: break; case CSimulatorInfo::FG: dirs = QStringList(CFlightgearUtil::modelDirectoriesFromSimDir(s)); break;
case CSimulatorInfo::FS9: dirs = QStringList({CFsCommonUtil::fs9AircraftDirFromSimDir(s)}); break; case CSimulatorInfo::FS9: dirs = QStringList({CFsCommonUtil::fs9AircraftDirFromSimDir(s)}); break;
case CSimulatorInfo::FSX: dirs = QStringList({CFsCommonUtil::fsxSimObjectsDirFromSimDir(s)}); break; case CSimulatorInfo::FSX: dirs = QStringList({CFsCommonUtil::fsxSimObjectsDirFromSimDir(s)}); break;
case CSimulatorInfo::P3D: case CSimulatorInfo::P3D:
@@ -570,7 +572,7 @@ namespace BlackMisc
{ {
case CSimulatorInfo::FG: case CSimulatorInfo::FG:
{ {
return e; return CFlightgearUtil::flightgearModelDirectories();
} }
case CSimulatorInfo::FS9: case CSimulatorInfo::FS9:
{ {
@@ -607,7 +609,7 @@ namespace BlackMisc
static const QString empty; static const QString empty;
switch (simulator.getSimulator()) switch (simulator.getSimulator())
{ {
case CSimulatorInfo::FG: return empty; case CSimulatorInfo::FG: return CFlightgearUtil::flightgearRootDir();
case CSimulatorInfo::FS9: return CFsCommonUtil::fs9Dir(); case CSimulatorInfo::FS9: return CFsCommonUtil::fs9Dir();
case CSimulatorInfo::FSX: return CFsCommonUtil::fsxDir(); case CSimulatorInfo::FSX: return CFsCommonUtil::fsxDir();
case CSimulatorInfo::P3D: return CFsCommonUtil::p3dDir(); case CSimulatorInfo::P3D: return CFsCommonUtil::p3dDir();
@@ -625,7 +627,7 @@ namespace BlackMisc
static const QStringList empty; static const QStringList empty;
switch (simulator.getSimulator()) switch (simulator.getSimulator())
{ {
case CSimulatorInfo::FG: return empty; case CSimulatorInfo::FG: return CFlightgearUtil::flightgearModelExcludeDirectoryPatterns();
case CSimulatorInfo::FS9: return CFsCommonUtil::fs9AircraftObjectsExcludeDirectoryPatterns(); case CSimulatorInfo::FS9: return CFsCommonUtil::fs9AircraftObjectsExcludeDirectoryPatterns();
case CSimulatorInfo::FSX: return CFsCommonUtil::fsxSimObjectsExcludeDirectoryPatterns(); case CSimulatorInfo::FSX: return CFsCommonUtil::fsxSimObjectsExcludeDirectoryPatterns();
case CSimulatorInfo::P3D: return CFsCommonUtil::p3dSimObjectsExcludeDirectoryPatterns(); case CSimulatorInfo::P3D: return CFsCommonUtil::p3dSimObjectsExcludeDirectoryPatterns();