mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-06 01:45:38 +08:00
Ref T103, moved directory functions from CBuildConfig to CDirectoryUtils
getApplicationDir renamed to getBinDir() as it works different on MacOs see https://dev.swift-project.org/w/dev/swiftpc/dirstructure/
This commit is contained in:
committed by
Mathew Sutcliffe
parent
eaac4dacd6
commit
debd9c802f
@@ -9,7 +9,6 @@
|
||||
|
||||
#include "airlineicaocode.h"
|
||||
#include "callsign.h"
|
||||
#include "blackconfig/buildconfig.h"
|
||||
#include "blackmisc/db/datastoreutility.h"
|
||||
#include "blackmisc/comparefunctions.h"
|
||||
#include "blackmisc/icons.h"
|
||||
@@ -18,6 +17,7 @@
|
||||
#include "blackmisc/propertyindex.h"
|
||||
#include "blackmisc/statusmessage.h"
|
||||
#include "blackmisc/stringutils.h"
|
||||
#include "blackmisc/directoryutils.h"
|
||||
#include "blackmisc/variant.h"
|
||||
#include "blackmisc/verify.h"
|
||||
|
||||
@@ -30,7 +30,6 @@
|
||||
#include <Qt>
|
||||
#include <QtGlobal>
|
||||
|
||||
using namespace BlackConfig;
|
||||
using namespace BlackMisc;
|
||||
using namespace BlackMisc::Db;
|
||||
|
||||
@@ -481,7 +480,7 @@ namespace BlackMisc
|
||||
//! \private
|
||||
QSet<int> iconIdsImpl()
|
||||
{
|
||||
QDir dir(CBuildConfig::getImagesAirlinesDir());
|
||||
QDir dir(CDirectoryUtils::getImagesAirlinesDir());
|
||||
Q_ASSERT_X(dir.exists(), Q_FUNC_INFO, "image directory missing");
|
||||
|
||||
QSet<int> ids;
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
#include "blackmisc/directoryutils.h"
|
||||
#include "blackmisc/fileutils.h"
|
||||
#include "blackmisc/range.h"
|
||||
#include "blackconfig/buildconfig.h"
|
||||
#include <QCoreApplication>
|
||||
#include <QDir>
|
||||
#include <QUrl>
|
||||
@@ -20,9 +21,11 @@
|
||||
#include <QRegularExpression>
|
||||
#include <QStandardPaths>
|
||||
|
||||
using namespace BlackConfig;
|
||||
|
||||
namespace BlackMisc
|
||||
{
|
||||
QString applicationDirectoryPathImpl()
|
||||
QString binDirectoryImpl()
|
||||
{
|
||||
QString appDirectoryString(qApp->applicationDirPath());
|
||||
if (appDirectoryString.endsWith("Contents/MacOS")) { appDirectoryString += "/../../.."; }
|
||||
@@ -30,15 +33,15 @@ namespace BlackMisc
|
||||
return appDirectory.absolutePath();
|
||||
}
|
||||
|
||||
QString CDirectoryUtils::applicationDirectoryPath()
|
||||
const QString &CDirectoryUtils::getBinDir()
|
||||
{
|
||||
static const QString appDirectory(applicationDirectoryPathImpl());
|
||||
return appDirectory;
|
||||
static const QString binDir(binDirectoryImpl());
|
||||
return binDir;
|
||||
}
|
||||
|
||||
QString normalizedApplicationDirectoryImpl()
|
||||
{
|
||||
QString appDir = CDirectoryUtils::applicationDirectoryPath();
|
||||
QString appDir = CDirectoryUtils::getBinDir();
|
||||
Q_ASSERT(appDir.size() > 0);
|
||||
// Remove leading '/' on Unix
|
||||
if (appDir.at(0) == '/') { appDir.remove(0, 1); }
|
||||
@@ -90,6 +93,198 @@ namespace BlackMisc
|
||||
return p;
|
||||
}
|
||||
|
||||
bool isAppBundleImpl()
|
||||
{
|
||||
QDir bundleDir(CDirectoryUtils::getBinDir());
|
||||
bundleDir.cd("../..");
|
||||
const bool isBundled = QFileInfo(bundleDir.absolutePath()).isBundle();
|
||||
return isBundled;
|
||||
}
|
||||
|
||||
QString getSwiftShareDirImpl()
|
||||
{
|
||||
QDir dir(CDirectoryUtils::getBinDir());
|
||||
bool success = true;
|
||||
|
||||
static const bool appBundle = isAppBundleImpl();
|
||||
if (CBuildConfig::isRunningOnMacOSXPlatform() && appBundle)
|
||||
{
|
||||
success = dir.cd("../../../../share");
|
||||
}
|
||||
else { success = dir.cd("../share"); }
|
||||
|
||||
if (success)
|
||||
{
|
||||
Q_ASSERT_X(dir.exists(), Q_FUNC_INFO, "missing dir");
|
||||
return dir.absolutePath();
|
||||
}
|
||||
Q_ASSERT_X(false, Q_FUNC_INFO, "missing dir");
|
||||
return "";
|
||||
}
|
||||
|
||||
const QString &CDirectoryUtils::getSwiftShareDir()
|
||||
{
|
||||
static const QString s(getSwiftShareDirImpl());
|
||||
return s;
|
||||
}
|
||||
|
||||
const QString getBootstrapResourceFileImpl()
|
||||
{
|
||||
const QString d(CDirectoryUtils::getSwiftShareDir());
|
||||
if (d.isEmpty()) { return ""; }
|
||||
const QFile file(QDir::cleanPath(d + QDir::separator() + "shared/boostrap/boostrap.json"));
|
||||
Q_ASSERT_X(file.exists(), Q_FUNC_INFO, "missing dir");
|
||||
return QFileInfo(file).absoluteFilePath();
|
||||
}
|
||||
|
||||
const QString &CDirectoryUtils::getBootstrapResourceFile()
|
||||
{
|
||||
static const QString s(getBootstrapResourceFileImpl());
|
||||
return s;
|
||||
}
|
||||
|
||||
QString getSwiftStaticDbFilesDirImpl()
|
||||
{
|
||||
const QString d(CDirectoryUtils::getSwiftShareDir());
|
||||
if (d.isEmpty()) { return ""; }
|
||||
const QDir dir(QDir::cleanPath(d + QDir::separator() + "shared/dbdata"));
|
||||
Q_ASSERT_X(dir.exists(), Q_FUNC_INFO, "missing dir");
|
||||
return dir.absolutePath();
|
||||
}
|
||||
|
||||
const QString &CDirectoryUtils::getSwiftStaticDbFilesDir()
|
||||
{
|
||||
static QString s(getSwiftStaticDbFilesDirImpl());
|
||||
return s;
|
||||
}
|
||||
|
||||
QString getSoundFilesDirImpl()
|
||||
{
|
||||
const QString d(CDirectoryUtils::getSwiftShareDir());
|
||||
if (d.isEmpty()) { return ""; }
|
||||
const QDir dir(QDir::cleanPath(d + QDir::separator() + "sounds"));
|
||||
Q_ASSERT_X(dir.exists(), Q_FUNC_INFO, "missing dir");
|
||||
return dir.absolutePath();
|
||||
}
|
||||
|
||||
const QString &CDirectoryUtils::getSoundFilesDir()
|
||||
{
|
||||
static QString s(getSoundFilesDirImpl());
|
||||
return s;
|
||||
}
|
||||
|
||||
QString getStylesheetsDirImpl()
|
||||
{
|
||||
const QString d(CDirectoryUtils::getSwiftShareDir());
|
||||
if (d.isEmpty()) { return ""; }
|
||||
const QDir dir(QDir::cleanPath(d + QDir::separator() + "qss"));
|
||||
Q_ASSERT_X(dir.exists(), Q_FUNC_INFO, "missing dir");
|
||||
return dir.absolutePath();
|
||||
}
|
||||
|
||||
const QString &CDirectoryUtils::getStylesheetsDir()
|
||||
{
|
||||
static QString s(getStylesheetsDirImpl());
|
||||
return s;
|
||||
}
|
||||
|
||||
QString getImagesDirImpl()
|
||||
{
|
||||
const QString d(CDirectoryUtils::getSwiftShareDir());
|
||||
const QDir dir(QDir::cleanPath(d + QDir::separator() + "images"));
|
||||
Q_ASSERT_X(dir.exists(), Q_FUNC_INFO, "missing dir");
|
||||
return dir.absolutePath();
|
||||
}
|
||||
|
||||
const QString &CDirectoryUtils::getImagesDir()
|
||||
{
|
||||
static const QString s(getImagesDirImpl());
|
||||
return s;
|
||||
}
|
||||
|
||||
const QString &CDirectoryUtils::getImagesAirlinesDir()
|
||||
{
|
||||
static const QString s(QDir::cleanPath(getImagesDir() + QDir::separator() + "airlines"));
|
||||
return s;
|
||||
}
|
||||
|
||||
const QString &CDirectoryUtils::getImagesFlagsDir()
|
||||
{
|
||||
static const QString s(QDir::cleanPath(getImagesDir() + QDir::separator() + "flags"));
|
||||
return s;
|
||||
}
|
||||
|
||||
QString getHtmlDirImpl()
|
||||
{
|
||||
const QString d(CDirectoryUtils::getSwiftShareDir());
|
||||
const QDir dir(QDir::cleanPath(d + QDir::separator() + "html"));
|
||||
Q_ASSERT_X(dir.exists(), Q_FUNC_INFO, "missing dir");
|
||||
return dir.absolutePath();
|
||||
}
|
||||
|
||||
const QString &CDirectoryUtils::getHtmlDir()
|
||||
{
|
||||
static const QString s(getHtmlDirImpl());
|
||||
return s;
|
||||
}
|
||||
|
||||
QString getLegalDirImpl()
|
||||
{
|
||||
const QString d(CDirectoryUtils::getSwiftShareDir());
|
||||
const QDir dir(QDir::cleanPath(d + QDir::separator() + "legal"));
|
||||
Q_ASSERT_X(dir.exists(), Q_FUNC_INFO, "missing dir");
|
||||
return dir.absolutePath();
|
||||
}
|
||||
|
||||
const QString &CDirectoryUtils::getLegalDir()
|
||||
{
|
||||
static const QString s(getLegalDirImpl());
|
||||
return s;
|
||||
}
|
||||
|
||||
const QString &CDirectoryUtils::getAboutFileLocation()
|
||||
{
|
||||
static const QString about = QDir::cleanPath(CDirectoryUtils::getLegalDir() + QDir::separator() + "about.html");
|
||||
return about;
|
||||
}
|
||||
|
||||
QString getTestFilesDirImpl()
|
||||
{
|
||||
const QString d(CDirectoryUtils::getSwiftShareDir());
|
||||
if (d.isEmpty()) { return ""; }
|
||||
const QDir dir(QDir::cleanPath(d + QDir::separator() + "test"));
|
||||
Q_ASSERT_X(dir.exists(), Q_FUNC_INFO, "missing dir");
|
||||
return dir.absolutePath();
|
||||
}
|
||||
|
||||
const QString &CDirectoryUtils::getTestFilesDir()
|
||||
{
|
||||
static QString s(getTestFilesDirImpl());
|
||||
return s;
|
||||
}
|
||||
|
||||
const QString &CDirectoryUtils::getHtmlTemplateFileName()
|
||||
{
|
||||
static const QString s(getHtmlDir() + QDir::separator() + "swifttemplate.html");
|
||||
return s;
|
||||
}
|
||||
|
||||
QString getDocumentationDirectoryImpl()
|
||||
{
|
||||
QStringList pathes(QStandardPaths::standardLocations(QStandardPaths::DocumentsLocation));
|
||||
QString d = pathes.first();
|
||||
d = QDir::cleanPath(d + QDir::separator() + "swift");
|
||||
QDir dir(d);
|
||||
if (dir.exists()) { return dir.absolutePath(); }
|
||||
return pathes.first();
|
||||
}
|
||||
|
||||
const QString &CDirectoryUtils::getDocumentationDirectory()
|
||||
{
|
||||
static const QString d(getDocumentationDirectoryImpl());
|
||||
return d;
|
||||
}
|
||||
|
||||
const QString &CDirectoryUtils::getCrashpadDirectory()
|
||||
{
|
||||
static const QString p = CFileUtils::appendFilePaths(swiftNormalizedApplicationDataDirectory(), "/crashpad");
|
||||
|
||||
@@ -25,9 +25,11 @@ namespace BlackMisc
|
||||
class BLACKMISC_EXPORT CDirectoryUtils
|
||||
{
|
||||
public:
|
||||
//! Returns the directory of the application. In contrast to QCoreApplication::applicationDirPath()
|
||||
//! it takes Mac OS X app bundles into account and returns the directory of the bundle.
|
||||
static QString applicationDirectoryPath();
|
||||
//! Returns the bin directory. On Windows/Linux this is the same directory as
|
||||
//! QCoreApplication::applicationDirPath(), but on MacOS the exceutable is
|
||||
//! located deeper in the hierarchy of the bundles
|
||||
//! \see https://dev.swift-project.org/w/dev/swiftpc/dirstructure/
|
||||
static const QString &getBinDir();
|
||||
|
||||
//! swift application data directory, contains 0..n swift installation directories
|
||||
static const QString &swiftApplicationDataDirectory();
|
||||
@@ -41,6 +43,49 @@ namespace BlackMisc
|
||||
//! swift application data directory for one specific installation (a version)
|
||||
static const QString &swiftNormalizedApplicationDataDirectory();
|
||||
|
||||
//! Where resource files (static DB files, ...) etc are located
|
||||
//! \remark share not shared (do no mix)
|
||||
static const QString &getSwiftShareDir();
|
||||
|
||||
//! Bootstrap resource directory
|
||||
static const QString &getBootstrapResourceFile();
|
||||
|
||||
//! Where static DB files are located
|
||||
static const QString &getSwiftStaticDbFilesDir();
|
||||
|
||||
//! Where sound files are located
|
||||
static const QString &getSoundFilesDir();
|
||||
|
||||
//! Where qss files are located
|
||||
static const QString &getStylesheetsDir();
|
||||
|
||||
//! Where images are located
|
||||
static const QString &getImagesDir();
|
||||
|
||||
//! Where airline images are located
|
||||
static const QString &getImagesAirlinesDir();
|
||||
|
||||
//! Where flags images are located
|
||||
static const QString &getImagesFlagsDir();
|
||||
|
||||
//! Where HTML files are located
|
||||
static const QString &getHtmlDir();
|
||||
|
||||
//! Where Legal files are located
|
||||
static const QString &getLegalDir();
|
||||
|
||||
//! The about document file location
|
||||
static const QString &getAboutFileLocation();
|
||||
|
||||
//! Where test files are located
|
||||
static const QString &getTestFilesDir();
|
||||
|
||||
//! Where HTML files are located
|
||||
static const QString &getHtmlTemplateFileName();
|
||||
|
||||
//! Directory where data can be stored
|
||||
static const QString &getDocumentationDirectory();
|
||||
|
||||
//! Directory for log files
|
||||
//! \remark In BlackMisc so it can also be used from BlackMisc classes
|
||||
static const QString &getLogDirectory();
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
|
||||
//! \cond PRIVATE
|
||||
|
||||
#include "blackconfig/buildconfig.h"
|
||||
#include "blackmisc/directoryutils.h"
|
||||
#include "blackmisc/fileutils.h"
|
||||
#include "blackmisc/icons.h"
|
||||
#include "blackmisc/threadutils.h"
|
||||
@@ -22,8 +22,6 @@
|
||||
#include <QSize>
|
||||
#include <QtGlobal>
|
||||
|
||||
using namespace BlackConfig;
|
||||
|
||||
namespace BlackMisc
|
||||
{
|
||||
const QPixmap &CIcons::info16()
|
||||
@@ -1157,7 +1155,7 @@ namespace BlackMisc
|
||||
|
||||
if (!getResourceFileCache().contains(fileName))
|
||||
{
|
||||
const QString path = CFileUtils::appendFilePaths(CBuildConfig::getImagesDir(), fileName);
|
||||
const QString path = CFileUtils::appendFilePaths(CDirectoryUtils::getImagesDir(), fileName);
|
||||
QPixmap pm;
|
||||
const bool s = pm.load(path);
|
||||
getResourceFileCache().insert(fileName, s ? pm : CIcons::empty());
|
||||
|
||||
@@ -7,12 +7,11 @@
|
||||
* contained in the LICENSE file.
|
||||
*/
|
||||
|
||||
#include "blackconfig/buildconfig.h"
|
||||
#include "blackmisc/simulation/aircraftmodellist.h"
|
||||
#include "blackmisc/simulation/aircraftmodelutils.h"
|
||||
#include "blackmisc/directoryutils.h"
|
||||
#include "blackmisc/verify.h"
|
||||
|
||||
using namespace BlackConfig;
|
||||
namespace BlackMisc
|
||||
{
|
||||
namespace Simulation
|
||||
@@ -133,7 +132,7 @@ namespace BlackMisc
|
||||
BLACK_VERIFY_X(dir.exists(), Q_FUNC_INFO, "Directory does not exist");
|
||||
if (!dir.exists()) { return ""; }
|
||||
|
||||
const QString htmlTemplate = CFileUtils::readFileToString(CBuildConfig::getHtmlTemplateFileName());
|
||||
const QString htmlTemplate = CFileUtils::readFileToString(CDirectoryUtils::getHtmlTemplateFileName());
|
||||
const QString fn("airlineAircraftMatrix.html");
|
||||
const bool ok = CFileUtils::writeStringToFile(htmlTemplate.arg(html), dir.absoluteFilePath(fn));
|
||||
return ok ? dir.absoluteFilePath(fn) : "";
|
||||
|
||||
@@ -81,7 +81,7 @@ namespace BlackMisc
|
||||
{
|
||||
if (parts.isEmpty() && interpolation.isEmpty()) { return CStatusMessage(static_cast<CInterpolationLogger *>(nullptr)).warning("No data for log"); }
|
||||
static const QString html = QStringLiteral("Entries: %1\n\n%2");
|
||||
const QString htmlTemplate = CFileUtils::readFileToString(CBuildConfig::getHtmlTemplateFileName());
|
||||
const QString htmlTemplate = CFileUtils::readFileToString(CDirectoryUtils::getHtmlTemplateFileName());
|
||||
|
||||
CStatusMessageList msgs;
|
||||
const QString ts = QDateTime::currentDateTimeUtc().toString("yyyyMMddhhmmss");
|
||||
|
||||
@@ -8,16 +8,15 @@
|
||||
*/
|
||||
|
||||
#include "testdata.h"
|
||||
#include "blackconfig/buildconfig.h"
|
||||
#include "blackmisc/simulation/simulatedaircraft.h"
|
||||
#include "blackmisc/aviation/atcstationlist.h"
|
||||
#include "blackmisc/aviation/flightplan.h"
|
||||
#include "blackmisc/network/userlist.h"
|
||||
#include "blackmisc/network/server.h"
|
||||
#include "blackmisc/fileutils.h"
|
||||
#include "blackmisc/directoryutils.h"
|
||||
#include "blackmisc/variantlist.h"
|
||||
|
||||
using namespace BlackConfig;
|
||||
using namespace BlackMisc::Aviation;
|
||||
using namespace BlackMisc::Geo;
|
||||
using namespace BlackMisc::Network;
|
||||
@@ -240,7 +239,7 @@ namespace BlackMisc
|
||||
|
||||
const CAircraftIcaoCode &CTestData::getDBAircraftIcaoB737()
|
||||
{
|
||||
static const QString json = CFileUtils::readFileToString(CBuildConfig::getTestFilesDir(), "DBAircraftIcaoB737Boeing.json");
|
||||
static const QString json = CFileUtils::readFileToString(CDirectoryUtils::getTestFilesDir(), "DBAircraftIcaoB737Boeing.json");
|
||||
static const CAircraftIcaoCode icao(CAircraftIcaoCode::fromJson(json));
|
||||
Q_ASSERT(icao.hasValidDbKey());
|
||||
return icao;
|
||||
@@ -248,7 +247,7 @@ namespace BlackMisc
|
||||
|
||||
const CAircraftIcaoCode &CTestData::getDBAircraftIcaoC172()
|
||||
{
|
||||
static const QString json = CFileUtils::readFileToString(CBuildConfig::getTestFilesDir(), "DBAircraftIcaoC172Cessna.json");
|
||||
static const QString json = CFileUtils::readFileToString(CDirectoryUtils::getTestFilesDir(), "DBAircraftIcaoC172Cessna.json");
|
||||
static const CAircraftIcaoCode icao(CAircraftIcaoCode::fromJson(json));
|
||||
Q_ASSERT(icao.hasValidDbKey());
|
||||
return icao;
|
||||
@@ -256,7 +255,7 @@ namespace BlackMisc
|
||||
|
||||
const CAirlineIcaoCode &CTestData::getDbAirlineIcaoDLH()
|
||||
{
|
||||
static const QString json = CFileUtils::readFileToString(CBuildConfig::getTestFilesDir(), "DBAirlineIcaoDLH.json");
|
||||
static const QString json = CFileUtils::readFileToString(CDirectoryUtils::getTestFilesDir(), "DBAirlineIcaoDLH.json");
|
||||
static const CAirlineIcaoCode icao(CAirlineIcaoCode::fromJson(json));
|
||||
Q_ASSERT(icao.hasValidDbKey());
|
||||
return icao;
|
||||
@@ -264,7 +263,7 @@ namespace BlackMisc
|
||||
|
||||
const CAirlineIcaoCode &CTestData::getDbAirlineIcaoBAW()
|
||||
{
|
||||
static const QString json = CFileUtils::readFileToString(CBuildConfig::getTestFilesDir(), "DBAirlineIcaoBAW.json");
|
||||
static const QString json = CFileUtils::readFileToString(CDirectoryUtils::getTestFilesDir(), "DBAirlineIcaoBAW.json");
|
||||
static const CAirlineIcaoCode icao(CAirlineIcaoCode::fromJson(json));
|
||||
Q_ASSERT(icao.hasValidDbKey());
|
||||
return icao;
|
||||
@@ -272,7 +271,7 @@ namespace BlackMisc
|
||||
|
||||
const CLivery &CTestData::getDbLiveryDLHStarAlliance()
|
||||
{
|
||||
static const QString json = CFileUtils::readFileToString(CBuildConfig::getTestFilesDir(), "DBLiveryDLHStarAlliance.json");
|
||||
static const QString json = CFileUtils::readFileToString(CDirectoryUtils::getTestFilesDir(), "DBLiveryDLHStarAlliance.json");
|
||||
static const CLivery livery(CLivery::fromJson(json));
|
||||
Q_ASSERT(livery.hasValidDbKey());
|
||||
return livery;
|
||||
@@ -280,7 +279,7 @@ namespace BlackMisc
|
||||
|
||||
const CAircraftModel &CTestData::getDbAircraftModelFsxA2AC172Skyhawk()
|
||||
{
|
||||
static const QString json = CFileUtils::readFileToString(CBuildConfig::getTestFilesDir(), "DBModelFSXA2ACessnaC172.json");
|
||||
static const QString json = CFileUtils::readFileToString(CDirectoryUtils::getTestFilesDir(), "DBModelFSXA2ACessnaC172.json");
|
||||
static const CAircraftModel model(CAircraftModel::fromDatabaseJson(Json::jsonObjectFromString(json)));
|
||||
Q_ASSERT(model.hasValidDbKey());
|
||||
Q_ASSERT(!model.getModelString().isEmpty());
|
||||
@@ -289,7 +288,7 @@ namespace BlackMisc
|
||||
|
||||
const CAircraftModel &CTestData::getDbAircraftModelFsxAerosoftA320()
|
||||
{
|
||||
static const QString json = CFileUtils::readFileToString(CBuildConfig::getTestFilesDir(), "DBModelFSXAerosoftA320.json");
|
||||
static const QString json = CFileUtils::readFileToString(CDirectoryUtils::getTestFilesDir(), "DBModelFSXAerosoftA320.json");
|
||||
static const CAircraftModel model(CAircraftModel::fromDatabaseJson(Json::jsonObjectFromString(json)));
|
||||
Q_ASSERT(model.hasValidDbKey());
|
||||
Q_ASSERT(!model.getModelString().isEmpty());
|
||||
|
||||
Reference in New Issue
Block a user