Ref T660, make sure all file paths (for FSX/P3D) are Qt standard (not Windows native)

This commit is contained in:
Klaus Basan
2019-07-14 16:26:15 +02:00
committed by Mat Sutcliffe
parent 18778ed97e
commit b76d89bf27
2 changed files with 16 additions and 16 deletions

View File

@@ -62,7 +62,7 @@ namespace BlackMisc
if (fileNameAndPath.isEmpty()) { return false; } if (fileNameAndPath.isEmpty()) { return false; }
QFile file(fileNameAndPath); QFile file(fileNameAndPath);
if (!file.open(QIODevice::WriteOnly)) { return false; } if (!file.open(QIODevice::WriteOnly)) { return false; }
qint64 c = file.write(data); const qint64 c = file.write(data);
file.close(); file.close();
return c == data.count(); return c == data.count();
} }
@@ -79,7 +79,7 @@ namespace BlackMisc
QFile file(fileNameAndPath); QFile file(fileNameAndPath);
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { return {}; } if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { return {}; }
QTextStream stream(&file); QTextStream stream(&file);
QString content(stream.readAll()); const QString content(stream.readAll());
file.close(); file.close();
return content; return content;
} }
@@ -205,8 +205,8 @@ namespace BlackMisc
QString CFileUtils::normalizeFilePathToQtStandard(const QString &filePath) QString CFileUtils::normalizeFilePathToQtStandard(const QString &filePath)
{ {
if (filePath.isEmpty()) { return {}; } if (filePath.isEmpty()) { return {}; }
QString n(filePath); QString n = QDir::cleanPath(filePath);
n = n.replace('\\', '/').replace("//", "/"); n = n.replace('\\', '/').replace("//", "/"); // should be done alreay by cleanPath, paranoia
return n; return n;
} }

View File

@@ -49,7 +49,7 @@ namespace BlackMisc
QString fsxPath; QString fsxPath;
if (CBuildConfig::isCompiledWithFsxSupport()) if (CBuildConfig::isCompiledWithFsxSupport())
{ {
FsRegistryPathPair fsxRegistryPathPairs = const FsRegistryPathPair fsxRegistryPathPairs =
{ {
{ QStringLiteral("HKEY_CURRENT_USER\\Software\\Microsoft\\Microsoft Games\\Flight Simulator\\10.0"), QStringLiteral("AppPath") }, { QStringLiteral("HKEY_CURRENT_USER\\Software\\Microsoft\\Microsoft Games\\Flight Simulator\\10.0"), QStringLiteral("AppPath") },
{ QStringLiteral("HKEY_CURRENT_USER\\Software\\Microsoft\\Microsoft Games\\Flight Simulator - Steam Edition\\10.0"), QStringLiteral("AppPath") }, { QStringLiteral("HKEY_CURRENT_USER\\Software\\Microsoft\\Microsoft Games\\Flight Simulator - Steam Edition\\10.0"), QStringLiteral("AppPath") },
@@ -59,13 +59,13 @@ namespace BlackMisc
for (const auto &registryPair : fsxRegistryPathPairs) for (const auto &registryPair : fsxRegistryPathPairs)
{ {
QSettings fsxRegistry(registryPair.first, QSettings::NativeFormat); const QSettings fsxRegistry(registryPair.first, QSettings::NativeFormat);
fsxPath = fsxRegistry.value(registryPair.second).toString().trimmed(); fsxPath = fsxRegistry.value(registryPair.second).toString().trimmed();
if (!fsxPath.isEmpty()) break; if (!fsxPath.isEmpty()) break;
} }
} }
return fsxPath; return CFileUtils::normalizeFilePathToQtStandard(fsxPath);
} }
const QString &CFsCommonUtil::fsxDirFromRegistry() const QString &CFsCommonUtil::fsxDirFromRegistry()
@@ -76,7 +76,7 @@ namespace BlackMisc
QString fsxDirImpl() QString fsxDirImpl()
{ {
QString dir(CFsCommonUtil::fsxDirFromRegistry()); const QString dir(CFsCommonUtil::fsxDirFromRegistry());
if (!dir.isEmpty()) { return dir; } if (!dir.isEmpty()) { return dir; }
QStringList someDefaultDirs( QStringList someDefaultDirs(
{ {
@@ -99,7 +99,7 @@ namespace BlackMisc
QString fsxSimObjectsDirFromRegistryImpl() QString fsxSimObjectsDirFromRegistryImpl()
{ {
const QString fsxPath = CFsCommonUtil::fsxDirFromRegistry(); const QString fsxPath = CFileUtils::normalizeFilePathToQtStandard(CFsCommonUtil::fsxDirFromRegistry());
if (fsxPath.isEmpty()) { return {}; } if (fsxPath.isEmpty()) { return {}; }
return CFsCommonUtil::fsxSimObjectsDirFromSimDir(fsxPath); return CFsCommonUtil::fsxSimObjectsDirFromSimDir(fsxPath);
} }
@@ -126,7 +126,7 @@ namespace BlackMisc
QString CFsCommonUtil::fsxSimObjectsDirFromSimDir(const QString &simDir) QString CFsCommonUtil::fsxSimObjectsDirFromSimDir(const QString &simDir)
{ {
if (simDir.isEmpty()) { return {}; } if (simDir.isEmpty()) { return {}; }
return CFileUtils::appendFilePaths(simDir, "SimObjects"); return CFileUtils::appendFilePaths(CFileUtils::normalizeFilePathToQtStandard(simDir), "SimObjects");
} }
const QStringList &CFsCommonUtil::fsxSimObjectsExcludeDirectoryPatterns() const QStringList &CFsCommonUtil::fsxSimObjectsExcludeDirectoryPatterns()
@@ -155,7 +155,7 @@ namespace BlackMisc
}; };
for (const auto &registryPair : p3dRegistryPathPairs) for (const auto &registryPair : p3dRegistryPathPairs)
{ {
QSettings p3dRegistry(registryPair.first, QSettings::NativeFormat); const QSettings p3dRegistry(registryPair.first, QSettings::NativeFormat);
p3dPath = p3dRegistry.value(registryPair.second).toString().trimmed(); p3dPath = p3dRegistry.value(registryPair.second).toString().trimmed();
if (!p3dPath.isEmpty()) break; if (!p3dPath.isEmpty()) break;
@@ -166,7 +166,7 @@ namespace BlackMisc
const QString &CFsCommonUtil::p3dDirFromRegistry() const QString &CFsCommonUtil::p3dDirFromRegistry()
{ {
static const QString p3dPath(p3dDirFromRegistryImpl()); static const QString p3dPath = CFileUtils::normalizeFilePathToQtStandard(p3dDirFromRegistryImpl());
return p3dPath; return p3dPath;
} }
@@ -220,7 +220,7 @@ namespace BlackMisc
{ {
// finding the user settings only works on P3D machine // finding the user settings only works on P3D machine
QStringList allPaths = CFsCommonUtil::allFsxSimObjectPaths().toList(); QStringList allPaths = CFsCommonUtil::allFsxSimObjectPaths().toList();
const QString sod = simObjectsDir.isEmpty() ? CFsCommonUtil::fsxSimObjectsDir() : simObjectsDir; const QString sod = CFileUtils::normalizeFilePathToQtStandard(simObjectsDir.isEmpty() ? CFsCommonUtil::fsxSimObjectsDir() : simObjectsDir);
if (!sod.isEmpty() && !allPaths.contains(sod, Qt::CaseInsensitive)) if (!sod.isEmpty() && !allPaths.contains(sod, Qt::CaseInsensitive))
{ {
// case insensitive is important here // case insensitive is important here
@@ -237,7 +237,7 @@ namespace BlackMisc
{ {
// finding the user settings only works on P3D machine // finding the user settings only works on P3D machine
QStringList allPaths = CFsCommonUtil::allP3dAddOnXmlSimObjectPaths(versionHint).toList(); QStringList allPaths = CFsCommonUtil::allP3dAddOnXmlSimObjectPaths(versionHint).toList();
const QString sod = simObjectsDir.isEmpty() ? CFsCommonUtil::p3dSimObjectsDir() : simObjectsDir; const QString sod = CFileUtils::normalizeFilePathToQtStandard(simObjectsDir.isEmpty() ? CFsCommonUtil::p3dSimObjectsDir() : simObjectsDir);
if (!sod.isEmpty() && !allPaths.contains(sod, Qt::CaseInsensitive)) if (!sod.isEmpty() && !allPaths.contains(sod, Qt::CaseInsensitive))
{ {
// case insensitive is important here // case insensitive is important here
@@ -253,7 +253,7 @@ namespace BlackMisc
QString CFsCommonUtil::p3dSimObjectsDirFromSimDir(const QString &simDir) QString CFsCommonUtil::p3dSimObjectsDirFromSimDir(const QString &simDir)
{ {
if (simDir.isEmpty()) { return {}; } if (simDir.isEmpty()) { return {}; }
return CFileUtils::appendFilePaths(simDir, "SimObjects"); return CFileUtils::normalizeFilePathToQtStandard(CFileUtils::appendFilePaths(simDir, "SimObjects"));
} }
const QStringList &CFsCommonUtil::p3dSimObjectsExcludeDirectoryPatterns() const QStringList &CFsCommonUtil::p3dSimObjectsExcludeDirectoryPatterns()
@@ -407,7 +407,7 @@ namespace BlackMisc
} }
QString targetDir = CFileUtils::appendFilePathsAndFixUnc(simObjectDir, "Misc"); QString targetDir = CFileUtils::appendFilePathsAndFixUnc(simObjectDir, "Misc");
QDir td(targetDir); const QDir td(targetDir);
if (!td.exists()) if (!td.exists())
{ {
messages.push_back(CStatusMessage(getLogCategories(), CStatusMessage::SeverityError, u"Cannot access target directory '%1'") << targetDir); messages.push_back(CStatusMessage(getLogCategories(), CStatusMessage::SeverityError, u"Cannot access target directory '%1'") << targetDir);