Skip to content

Commit

Permalink
fix: search model directory adapted for Steam edition
Browse files Browse the repository at this point in the history
  • Loading branch information
tzobler authored and ltoenning committed Dec 17, 2024
1 parent 3c18558 commit 220cc2a
Showing 1 changed file with 47 additions and 5 deletions.
52 changes: 47 additions & 5 deletions src/misc/simulation/fscommon/fsdirectories.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
#include <QPair>
#include <QSettings>
#include <QStandardPaths>
#include <QStringBuilder>
#include <QStringList>
#include <QTextStream>
#include <QVariant>
Expand All @@ -20,6 +21,7 @@
#include "misc/fileutils.h"
#include "misc/logmessage.h"
#include "misc/stringutils.h"
#include "misc/swiftdirectories.h"

using namespace swift::config;

Expand Down Expand Up @@ -93,6 +95,7 @@ namespace swift::misc::simulation::fscommon

static QString msfsDirImpl()
{
// first we look for a standard installation
const QStringList locations = QStandardPaths::standardLocations(QStandardPaths::GenericDataLocation);
for (const QString &path : locations)
{
Expand All @@ -102,6 +105,17 @@ namespace swift::misc::simulation::fscommon
if (!d.exists()) { continue; }
return msfsPackage;
}
// then we look for Steam-Edition
for (QString path : locations)
{
path.replace("Local", "Roaming");
const QString msfsPackage =
CFileUtils::appendFilePaths(CFileUtils::appendFilePaths(path, "Microsoft Flight Simulator"), "");
const QString fileName = CFileUtils::appendFilePaths(msfsPackage, "UserCfg.opt");
const QFileInfo fi(fileName);
if (!fi.exists()) { continue; }
return msfsPackage;
}
return {};
}

Expand All @@ -113,10 +127,22 @@ namespace swift::misc::simulation::fscommon

QString msfsPackagesDirImpl()
{
QString userCfg = "";

QString msfsDirectory(CFsDirectories::msfsDir());
const QString userCfg =
CFileUtils::appendFilePaths(CFileUtils::appendFilePaths(msfsDirectory, "LocalCache"), "UserCfg.opt");
QFile file(userCfg);

// for Steam edition
if (msfsDirectory.contains("Roaming", Qt::CaseInsensitive))
{
userCfg = CFileUtils::appendFilePaths(msfsDirectory, "UserCfg.opt");
}
else
{
userCfg =
CFileUtils::appendFilePaths(CFileUtils::appendFilePaths(msfsDirectory, "LocalCache"), "UserCfg.opt");
}

QFile file(CFileUtils::normalizeFilePathToQtStandard(userCfg));
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { return {}; }

QTextStream in(&file);
Expand All @@ -125,8 +151,10 @@ namespace swift::misc::simulation::fscommon
QString line = in.readLine();
if (line.contains("InstalledPackagesPath"))
{
QStringList split = line.split(" ");
if (split.size() != 2) { return {}; }
// change the split separator because of path names with multiple spaces in Steamedition
QStringList split = line.split("\"");
// we have 2 quotation marks in the line so 3 parts
if (split.size() != 3) { return {}; }
QString packagePath = split[1].remove("\"");
const QDir dir(packagePath);
if (dir.exists()) { return packagePath; }
Expand All @@ -141,6 +169,20 @@ namespace swift::misc::simulation::fscommon
return dir;
}

static QString msfs2024DirImpl()
{
const QStringList locations = QStandardPaths::standardLocations(QStandardPaths::GenericDataLocation);
for (const QString &path : locations)
{
const QString msfs2024Package = CFileUtils::appendFilePaths(CFileUtils::appendFilePaths(path, "Packages"),
"Microsoft.Limitless_8wekyb3d8bbwe");
const QDir d(msfs2024Package);
if (!d.exists()) { continue; }
return msfs2024Package;
}
return {};
}

QString fsxSimObjectsDirFromRegistryImpl()
{
const QString fsxPath = CFileUtils::normalizeFilePathToQtStandard(CFsDirectories::fsxDirFromRegistry());
Expand Down

0 comments on commit 220cc2a

Please sign in to comment.