mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-17 02:45:33 +08:00
Ref T348, util function to correct FSX/P3D model path
Related: Ref T317 Ref T247 Ref T335
This commit is contained in:
@@ -129,6 +129,14 @@ namespace BlackMisc
|
|||||||
return path.left(path.lastIndexOf('/'));
|
return path.left(path.lastIndexOf('/'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString CFileUtils::lastPathSegment(const QString &path)
|
||||||
|
{
|
||||||
|
if (path.isEmpty()) { return QStringLiteral(""); }
|
||||||
|
if (path.endsWith('/')) { return CFileUtils::lastPathSegment(path.left(path.length() - 1)); }
|
||||||
|
if (!path.contains('/')) { return path; }
|
||||||
|
return path.mid(path.lastIndexOf('/') + 1);
|
||||||
|
}
|
||||||
|
|
||||||
QString CFileUtils::appendFilePaths(const QString &path1, const QString &path2, const QString &path3)
|
QString CFileUtils::appendFilePaths(const QString &path1, const QString &path2, const QString &path3)
|
||||||
{
|
{
|
||||||
return CFileUtils::appendFilePaths(CFileUtils::appendFilePaths(path1, path2), path3);
|
return CFileUtils::appendFilePaths(CFileUtils::appendFilePaths(path1, path2), path3);
|
||||||
|
|||||||
@@ -79,9 +79,12 @@ namespace BlackMisc
|
|||||||
//! \sa CNetworkUtils::buildUrl for URLs
|
//! \sa CNetworkUtils::buildUrl for URLs
|
||||||
static QString appendFilePathsAndFixUnc(const QString &path1, const QString &path2, const QString &path3);
|
static QString appendFilePathsAndFixUnc(const QString &path1, const QString &path2, const QString &path3);
|
||||||
|
|
||||||
//! Strip file from path a/b/c.json a/b
|
//! Strip file from path a/b/c.json a/b, return path
|
||||||
static QString stripFileFromPath(const QString &path);
|
static QString stripFileFromPath(const QString &path);
|
||||||
|
|
||||||
|
//! Last path segment a/b/c => c
|
||||||
|
static QString lastPathSegment(const QString &path);
|
||||||
|
|
||||||
//! Normalize file path to Qt standard, e.g by turning \ to /
|
//! Normalize file path to Qt standard, e.g by turning \ to /
|
||||||
static QString normalizeFilePathToQtStandard(const QString &filePath);
|
static QString normalizeFilePathToQtStandard(const QString &filePath);
|
||||||
|
|
||||||
|
|||||||
@@ -17,6 +17,8 @@
|
|||||||
#include <QSettings>
|
#include <QSettings>
|
||||||
#include <QStringList>
|
#include <QStringList>
|
||||||
#include <QVariant>
|
#include <QVariant>
|
||||||
|
#include <QFileInfo>
|
||||||
|
#include <QStringBuilder>
|
||||||
|
|
||||||
using namespace BlackConfig;
|
using namespace BlackConfig;
|
||||||
using namespace BlackMisc;
|
using namespace BlackMisc;
|
||||||
@@ -313,6 +315,38 @@ namespace BlackMisc
|
|||||||
static const QStringList exclude;
|
static const QStringList exclude;
|
||||||
return exclude;
|
return exclude;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool CFsCommonUtil::adjustFileDirectory(CAircraftModel &model, const QString &simObjectsDirectory)
|
||||||
|
{
|
||||||
|
if (model.hasExistingCorrespondingFile()) { return true; }
|
||||||
|
if (simObjectsDirectory.isEmpty()) { return false; }
|
||||||
|
if (!model.hasFileName()) { return false; } // we can do nothing here
|
||||||
|
|
||||||
|
const QString simObjectsDirectoryFix = CFileUtils::fixWindowsUncPath(simObjectsDirectory);
|
||||||
|
const QDir dir(simObjectsDirectoryFix);
|
||||||
|
if (!dir.exists()) { return false; }
|
||||||
|
|
||||||
|
const QString lastSegment = QStringLiteral("/") % CFileUtils::lastPathSegment(simObjectsDirectoryFix) % QStringLiteral("/");
|
||||||
|
const int index = model.getFileName().lastIndexOf(lastSegment);
|
||||||
|
if (index < 0) { return false; }
|
||||||
|
const QString relPart = model.getFileName().mid(index + lastSegment.length());
|
||||||
|
if (relPart.isEmpty()) { return false; }
|
||||||
|
const QString newFile = CFileUtils::appendFilePathsAndFixUnc(simObjectsDirectory, relPart);
|
||||||
|
const QFileInfo nf(newFile);
|
||||||
|
if (!nf.exists()) { return false; }
|
||||||
|
|
||||||
|
model.setFileName(newFile);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CFsCommonUtil::adjustFileDirectory(CAircraftModel &model, const QStringList &simObjectsDirectories)
|
||||||
|
{
|
||||||
|
for (const QString &simObjectDir : simObjectsDirectories)
|
||||||
|
{
|
||||||
|
if (CFsCommonUtil::adjustFileDirectory(model, simObjectDir)) { return true; }
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
} // namespace
|
} // namespace
|
||||||
} // namespace
|
} // namespace
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|||||||
@@ -12,8 +12,8 @@
|
|||||||
#ifndef BLACKMISC_SIMULATION_FSCOMMONUTIL_H
|
#ifndef BLACKMISC_SIMULATION_FSCOMMONUTIL_H
|
||||||
#define BLACKMISC_SIMULATION_FSCOMMONUTIL_H
|
#define BLACKMISC_SIMULATION_FSCOMMONUTIL_H
|
||||||
|
|
||||||
|
#include "blackmisc/simulation/aircraftmodel.h"
|
||||||
#include "blackmisc/blackmiscexport.h"
|
#include "blackmisc/blackmiscexport.h"
|
||||||
|
|
||||||
#include <QString>
|
#include <QString>
|
||||||
|
|
||||||
class QStringList;
|
class QStringList;
|
||||||
@@ -84,6 +84,12 @@ namespace BlackMisc
|
|||||||
|
|
||||||
//! Exclude directories for aircraft objects
|
//! Exclude directories for aircraft objects
|
||||||
static const QStringList &fs9AircraftObjectsExcludeDirectoryPatterns();
|
static const QStringList &fs9AircraftObjectsExcludeDirectoryPatterns();
|
||||||
|
|
||||||
|
//! Adjust file directory
|
||||||
|
static bool adjustFileDirectory(CAircraftModel &model, const QString &simObjectsDirectory);
|
||||||
|
|
||||||
|
//! Adjust file directory
|
||||||
|
static bool adjustFileDirectory(CAircraftModel &model, const QStringList &simObjectsDirectories);
|
||||||
};
|
};
|
||||||
} // namespace
|
} // namespace
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|||||||
Reference in New Issue
Block a user