Issue #77 Factor out parts of CDirectoryUtils into CSwiftDirectories

CDirectoryUtils is utilities for manipulating directories.
CSwiftDirectories is getters that return directories used by swift.
This commit is contained in:
Mat Sutcliffe
2020-08-24 22:04:10 +01:00
parent 802576eda9
commit 8e065a8fef
61 changed files with 880 additions and 803 deletions

View File

@@ -22,6 +22,7 @@
#include "blackmisc/logcategorylist.h"
#include "blackmisc/logmessage.h"
#include "blackmisc/statusmessagelist.h"
#include "blackmisc/swiftdirectories.h"
#include "blackmisc/directoryutils.h"
#include "aircraftmatcher.h"
@@ -538,8 +539,8 @@ namespace BlackCore
// matching script
const bool msReverse = (script == ReverseLookup);
const QString lf = msReverse ? setup.getMsReverseLookupFile() : setup.getMsMatchingStageFile();
static const QString logFileR = CFileUtils::appendFilePaths(CDirectoryUtils::logDirectory(), "logMatchingScriptReverseLookup.log");
static const QString logFileM = CFileUtils::appendFilePaths(CDirectoryUtils::logDirectory(), "logMatchingScriptMatchingStage.log");
static const QString logFileR = CFileUtils::appendFilePaths(CSwiftDirectories::logDirectory(), "logMatchingScriptReverseLookup.log");
static const QString logFileM = CFileUtils::appendFilePaths(CSwiftDirectories::logDirectory(), "logMatchingScriptMatchingStage.log");
if (log)
{
@@ -1390,7 +1391,7 @@ namespace BlackCore
// log the models
const QString ts = QDateTime::currentDateTimeUtc().toString("yyyyMMddHHmmss");
const QString json = m_disabledModels.toJsonString();
return CFileUtils::writeStringToFile(json, CFileUtils::appendFilePathsAndFixUnc(CDirectoryUtils::logDirectory(), QStringLiteral("removed models %1.json").arg(ts)));
return CFileUtils::writeStringToFile(json, CFileUtils::appendFilePathsAndFixUnc(CSwiftDirectories::logDirectory(), QStringLiteral("removed models %1.json").arg(ts)));
}
CAircraftModelList CAircraftMatcher::getClosestMatchStepwiseReduceImplementation(const CAircraftModelList &modelSet, const CAircraftMatcherSetup &setup, const CCategoryMatcher &categoryMatcher, const CSimulatedAircraft &remoteAircraft, MatchingLog whatToLog, CStatusMessageList *log)

View File

@@ -24,6 +24,7 @@
#include "blackmisc/crashhandler.h"
#include "blackmisc/datacache.h"
#include "blackmisc/dbusserver.h"
#include "blackmisc/swiftdirectories.h"
#include "blackmisc/directoryutils.h"
#include "blackmisc/eventloop.h"
#include "blackmisc/filelogger.h"
@@ -107,7 +108,7 @@ namespace BlackCore
Q_ASSERT_X(!sApp, Q_FUNC_INFO, "already initialized");
Q_ASSERT_X(QCoreApplication::instance(), Q_FUNC_INFO, "no application object");
m_applicationInfo.setApplicationDataDirectory(CDirectoryUtils::normalizedApplicationDataDirectory());
m_applicationInfo.setApplicationDataDirectory(CSwiftDirectories::normalizedApplicationDataDirectory());
QCoreApplication::setApplicationName(m_applicationName);
QCoreApplication::setApplicationVersion(CBuildConfig::getVersionString());
this->setObjectName(m_applicationName);
@@ -1437,7 +1438,7 @@ namespace BlackCore
"You'll need to update swift in order to use it thereafter.");
}
const QStringList verifyErrors = CDirectoryUtils::verifyRuntimeDirectoriesAndFiles();
const QStringList verifyErrors = CSwiftDirectories::verifyRuntimeDirectoriesAndFiles();
if (!verifyErrors.isEmpty() && !m_applicationInfo.isUnitTest())
{
this->cmdLineErrorMessage("Missing runtime directories/files:", verifyErrors.join(", "));
@@ -1862,7 +1863,7 @@ namespace BlackCore
void CApplication::tagApplicationDataDirectory()
{
const QString d = CDirectoryUtils::normalizedApplicationDataDirectory();
const QString d = CSwiftDirectories::normalizedApplicationDataDirectory();
const QDir dir(d);
if (!dir.exists() || !dir.isReadable()) { return; }
const QString aiStr(this->getApplicationInfo().toJsonString());

View File

@@ -10,6 +10,7 @@
#include "blackcore/data/globalsetup.h"
#include "blackcore/application.h"
#include "blackmisc/json.h"
#include "blackmisc/swiftdirectories.h"
#include "blackmisc/directoryutils.h"
#include "blackmisc/network/server.h"
#include "blackmisc/network/user.h"
@@ -110,7 +111,7 @@ namespace BlackCore
CUrlList CGlobalSetup::getSwiftBootstrapFileUrls() const
{
return getSwiftSharedUrls().withAppendedPath(CGlobalSetup::schemaVersionString() + "/bootstrap/" + CDirectoryUtils::bootstrapFileName());
return getSwiftSharedUrls().withAppendedPath(CGlobalSetup::schemaVersionString() + "/bootstrap/" + CSwiftDirectories::bootstrapFileName());
}
CUrlList CGlobalSetup::getSwiftUpdateInfoFileUrls() const
@@ -217,23 +218,23 @@ namespace BlackCore
{
if (candidate.isEmpty()) return {}; // not possible
static const QString version(QString(CGlobalSetup::schemaVersionString()).append("/"));
if (candidate.endsWith(CDirectoryUtils::bootstrapFileName())) { return candidate; }
if (candidate.endsWith(CSwiftDirectories::bootstrapFileName())) { return candidate; }
CUrl url(candidate);
if (candidate.contains("/bootstrap"))
{
url.appendPath(CDirectoryUtils::bootstrapFileName());
url.appendPath(CSwiftDirectories::bootstrapFileName());
}
else if (candidate.endsWith(CGlobalSetup::schemaVersionString()) || candidate.endsWith(version))
{
url.appendPath("/bootstrap/" + CDirectoryUtils::bootstrapFileName());
url.appendPath("/bootstrap/" + CSwiftDirectories::bootstrapFileName());
}
else if (candidate.endsWith("shared") || candidate.endsWith("shared/"))
{
url.appendPath(CGlobalSetup::schemaVersionString() + "/bootstrap/" + CDirectoryUtils::bootstrapFileName());
url.appendPath(CGlobalSetup::schemaVersionString() + "/bootstrap/" + CSwiftDirectories::bootstrapFileName());
}
else
{
url.appendPath("shared/" + CGlobalSetup::schemaVersionString() + "/bootstrap/" + CDirectoryUtils::bootstrapFileName());
url.appendPath("shared/" + CGlobalSetup::schemaVersionString() + "/bootstrap/" + CSwiftDirectories::bootstrapFileName());
}
return url.getFullUrl();
}

View File

@@ -15,6 +15,7 @@
#include "blackmisc/db/datastoreutility.h"
#include "blackmisc/network/networkutils.h"
#include "blackmisc/network/entityflags.h"
#include "blackmisc/swiftdirectories.h"
#include "blackmisc/directoryutils.h"
#include "blackmisc/logcategory.h"
#include "blackmisc/logcategorylist.h"
@@ -621,14 +622,14 @@ namespace BlackCore
if (inBackground || !CThreadUtils::isInThisThread(this))
{
const bool s = this->readFromJsonFilesInBackground(CDirectoryUtils::staticDbFilesDirectory(), entities, overrideNewerOnly);
const bool s = this->readFromJsonFilesInBackground(CSwiftDirectories::staticDbFilesDirectory(), entities, overrideNewerOnly);
return s ?
CStatusMessage(this).info(u"Started reading in background from '%1' of entities: '%2'") << CDirectoryUtils::staticDbFilesDirectory() << CEntityFlags::flagToString(entities) :
CStatusMessage(this).error(u"Starting reading in background from '%1' of entities: '%2' failed") << CDirectoryUtils::staticDbFilesDirectory() << CEntityFlags::flagToString(entities);
CStatusMessage(this).info(u"Started reading in background from '%1' of entities: '%2'") << CSwiftDirectories::staticDbFilesDirectory() << CEntityFlags::flagToString(entities) :
CStatusMessage(this).error(u"Starting reading in background from '%1' of entities: '%2' failed") << CSwiftDirectories::staticDbFilesDirectory() << CEntityFlags::flagToString(entities);
}
else
{
return this->readFromJsonFiles(CDirectoryUtils::staticDbFilesDirectory(), entities, overrideNewerOnly);
return this->readFromJsonFiles(CSwiftDirectories::staticDbFilesDirectory(), entities, overrideNewerOnly);
}
}
//! \endcond

View File

@@ -687,38 +687,42 @@ namespace BlackCore
return true;
}
bool CIcaoDataReader::writeToJsonFiles(const QString &dir) const
bool CIcaoDataReader::writeToJsonFiles(const QString &dir)
{
QDir directory(dir);
if (!directory.exists()) { return false; }
QList<QPair<CEntityFlags::EntityFlag, QString>> fileContents;
if (this->getCountriesCount() > 0)
{
const QString json(QJsonDocument(this->getCountries().toJson()).toJson());
const bool s = CFileUtils::writeStringToFileInBackground(json, CFileUtils::appendFilePaths(directory.absolutePath(), CDbInfo::entityToSharedName(CEntityFlags::CountryEntity)));
if (!s) { return false; }
fileContents.push_back({ CEntityFlags::CountryEntity, json });
}
if (this->getAircraftIcaoCodesCount() > 0)
{
const QString json(QJsonDocument(this->getAircraftIcaoCodes().toJson()).toJson());
const bool s = CFileUtils::writeStringToFileInBackground(json, CFileUtils::appendFilePaths(directory.absolutePath(), CDbInfo::entityToSharedName(CEntityFlags::AircraftIcaoEntity)));
if (!s) { return false; }
fileContents.push_back({ CEntityFlags::AircraftIcaoEntity, json });
}
if (this->getAirlineIcaoCodesCount() > 0)
{
const QString json(QJsonDocument(this->getAirlineIcaoCodes().toJson()).toJson());
const bool s = CFileUtils::writeStringToFileInBackground(json, CFileUtils::appendFilePaths(directory.absolutePath(), CDbInfo::entityToSharedName(CEntityFlags::AirlineIcaoEntity)));
if (!s) { return false; }
fileContents.push_back({ CEntityFlags::AirlineIcaoEntity, json });
}
if (this->getAircraftCategoryCount() > 0)
{
const QString json(QJsonDocument(this->getAirlineIcaoCodes().toJson()).toJson());
const bool s = CFileUtils::writeStringToFileInBackground(json, CFileUtils::appendFilePaths(directory.absolutePath(), CDbInfo::entityToSharedName(CEntityFlags::AircraftCategoryEntity)));
if (!s) { return false; }
fileContents.push_back({ CEntityFlags::AircraftCategoryEntity, json });
}
for (const auto &pair : fileContents)
{
CWorker::fromTask(this, Q_FUNC_INFO, [pair, directory]
{
CFileUtils::writeStringToFile(CFileUtils::appendFilePaths(directory.absolutePath(), CDbInfo::entityToSharedName(pair.first)), pair.second);
});
}
return true;
}

View File

@@ -140,7 +140,7 @@ namespace BlackCore
bool areAllDataRead() const;
//! Write to static DB data file
bool writeToJsonFiles(const QString &dir) const;
bool writeToJsonFiles(const QString &dir);
// data read from local data
virtual BlackMisc::CStatusMessageList readFromJsonFiles(const QString &dir, BlackMisc::Network::CEntityFlags::Entity whatToRead, bool overrideNewerOnly) override;

View File

@@ -599,29 +599,35 @@ namespace BlackCore
return true;
}
bool CModelDataReader::writeToJsonFiles(const QString &dir) const
bool CModelDataReader::writeToJsonFiles(const QString &dir)
{
QDir directory(dir);
if (!directory.exists()) { return false; }
QList<QPair<QString, QString>> fileContents;
if (this->getLiveriesCount() > 0)
{
const QString json(QJsonDocument(this->getLiveries().toJson()).toJson());
const bool s = CFileUtils::writeStringToFileInBackground(json, CFileUtils::appendFilePaths(directory.absolutePath(), "liveries.json"));
if (!s) { return false; }
fileContents.push_back({ "liveries.json", json });
}
if (this->getModelsCount() > 0)
{
const QString json(QJsonDocument(this->getModels().toJson()).toJson());
const bool s = CFileUtils::writeStringToFileInBackground(json, CFileUtils::appendFilePaths(directory.absolutePath(), "models.json"));
if (!s) { return false; }
fileContents.push_back({ "models.json", json });
}
if (this->getDistributorsCount() > 0)
{
const QString json(QJsonDocument(this->getDistributors().toJson()).toJson());
const bool s = CFileUtils::writeStringToFileInBackground(json, CFileUtils::appendFilePaths(directory.absolutePath(), "distributors.json"));
if (!s) { return false; }
fileContents.push_back({ "distributors.json", json });
}
for (const auto &pair : fileContents)
{
CWorker::fromTask(this, Q_FUNC_INFO, [pair, directory]
{
CFileUtils::writeStringToFile(CFileUtils::appendFilePaths(directory.absolutePath(), pair.first), pair.second);
});
}
return true;
}

View File

@@ -134,7 +134,7 @@ namespace BlackCore
bool areAllDataRead() const;
//! Write to JSON file
bool writeToJsonFiles(const QString &dir) const;
bool writeToJsonFiles(const QString &dir);
// Data read from local data
virtual BlackMisc::CStatusMessageList readFromJsonFiles(const QString &dir, BlackMisc::Network::CEntityFlags::Entity whatToRead, bool overrideNewerOnly) override;

View File

@@ -38,6 +38,7 @@
#include "blackmisc/aviation/flightplan.h"
#include "blackmisc/network/rawfsdmessage.h"
#include "blackmisc/swiftdirectories.h"
#include "blackmisc/threadutils.h"
#include "blackmisc/logmessage.h"
#include "blackmisc/range.h"
@@ -2080,7 +2081,7 @@ namespace BlackCore
const QString s = this->getNetworkStatisticsAsText(false, "\n");
if (s.isEmpty()) { return false; }
const QString fn = QStringLiteral("networkstatistics_%1_%2.log").arg(QDateTime::currentDateTimeUtc().toString("yyMMddhhmmss"), server);
const QString fp = CFileUtils::appendFilePaths(CDirectoryUtils::logDirectory(), fn);
const QString fp = CFileUtils::appendFilePaths(CSwiftDirectories::logDirectory(), fn);
return CFileUtils::writeStringToFile(s, fp);
}

View File

@@ -8,6 +8,7 @@
#include "blackcore/pluginmanager.h"
#include "blackcore/application.h"
#include "blackmisc/swiftdirectories.h"
#include "blackmisc/directoryutils.h"
#include "blackmisc/logmessage.h"
#include "blackmisc/statusmessage.h"
@@ -51,7 +52,7 @@ namespace BlackCore
const QString &IPluginManager::pluginDirectory() const
{
return CDirectoryUtils::pluginsDirectory();
return CSwiftDirectories::pluginsDirectory();
}
bool IPluginManager::isValid(const QJsonObject &metadata) const

View File

@@ -9,6 +9,7 @@
#include "blackcore/application.h"
#include "blackcore/pluginmanagersimulator.h"
#include "blackcore/simulator.h"
#include "blackmisc/swiftdirectories.h"
#include "blackmisc/directoryutils.h"
#include "blackmisc/logmessage.h"
@@ -112,7 +113,7 @@ namespace BlackCore
const QString &CPluginManagerSimulator::pluginDirectory() const
{
static const QString d(CFileUtils::appendFilePaths(CDirectoryUtils::pluginsDirectory(), "simulator"));
static const QString d(CFileUtils::appendFilePaths(CSwiftDirectories::pluginsDirectory(), "simulator"));
return d;
}
}

View File

@@ -9,6 +9,7 @@
#include "blackcore/application.h"
#include "blackcore/pluginmanagerweatherdata.h"
#include "blackcore/weatherdata.h"
#include "blackmisc/swiftdirectories.h"
#include "blackmisc/directoryutils.h"
#include <QJsonObject>
@@ -65,7 +66,7 @@ namespace BlackCore
const QString &CPluginManagerWeatherData::pluginDirectory() const
{
static const QString d(CFileUtils::appendFilePaths(CDirectoryUtils::pluginsDirectory(), "weatherdata"));
static const QString d(CFileUtils::appendFilePaths(CSwiftDirectories::pluginsDirectory(), "weatherdata"));
return d;
}
}

View File

@@ -11,6 +11,7 @@
#include "blackmisc/verify.h"
#include "blackmisc/compare.h"
#include "blackmisc/fileutils.h"
#include "blackmisc/swiftdirectories.h"
#include "blackmisc/directoryutils.h"
#include "blackmisc/logcategory.h"
#include "blackmisc/logcategorylist.h"
@@ -115,7 +116,7 @@ namespace BlackCore
if (m_bootstrapUrls.isEmpty())
{
// after all still empty
msgs.push_back(CStatusMessage(this, CStatusMessage::SeverityInfo, u"Your log files are here: " % CDirectoryUtils::logDirectory()));
msgs.push_back(CStatusMessage(this, CStatusMessage::SeverityInfo, u"Your log files are here: " % CSwiftDirectories::logDirectory()));
msgs.push_back(CStatusMessage(this, CStatusMessage::SeverityError, u"No bootstrap URLs, cannot load setup"));
}
else
@@ -307,7 +308,7 @@ namespace BlackCore
if (dir.isEmpty()) { return CStatusMessage(this).error(u"Empty shared directory '%1' for bootstrap file") << dir; }
// no version for local files, as those come with the current code
fn = CFileUtils::appendFilePaths(dir, "bootstrap/" + CDirectoryUtils::bootstrapFileName());
fn = CFileUtils::appendFilePaths(dir, "bootstrap/" + CSwiftDirectories::bootstrapFileName());
}
else
{
@@ -482,7 +483,7 @@ namespace BlackCore
CLogMessage(this).info(u"Setup cache prefill (bootstrap already cached, no prefill needed");
return false;
}
const QString fn = CDirectoryUtils::bootstrapResourceFilePath();
const QString fn = CSwiftDirectories::bootstrapResourceFilePath();
const CStatusMessageList msgs = this->readLocalBootstrapFile(fn);
CLogMessage::preformatted(msgs);
return true;

View File

@@ -16,6 +16,7 @@
#include "blackmisc/valueobject.h"
#include "blackmisc/pq/time.h"
#include "blackmisc/network/serverlist.h"
#include "blackmisc/swiftdirectories.h"
#include "blackmisc/directoryutils.h"
#include "blackmisc/fileutils.h"
@@ -211,7 +212,7 @@ namespace BlackCore
//! \copydoc BlackMisc::TSettingTrait::defaultValue
static const CRawFsdMessageSettings &defaultValue()
{
static const CRawFsdMessageSettings setting { false, BlackMisc::CDirectoryUtils::logDirectory() };
static const CRawFsdMessageSettings setting { false, BlackMisc::CSwiftDirectories::logDirectory() };
return setting;
}
};

View File

@@ -1538,7 +1538,7 @@ namespace BlackCore
CLogMessage(this).info(u"Changed data service ecosystem to '%1'") << es.toQString(true);
}
bool CWebDataServices::writeDbDataToDisk(const QString &dir) const
bool CWebDataServices::writeDbDataToDisk(const QString &dir)
{
if (dir.isEmpty()) { return false; }
const QDir directory(dir);
@@ -1547,28 +1547,33 @@ namespace BlackCore
const bool s = directory.mkpath(dir);
if (!s) { return false; }
}
QList<QPair<QString, QString>> fileContents;
if (this->getModelsCount() > 0)
{
const QString json(QJsonDocument(this->getModels().toJson()).toJson());
const bool s = CFileUtils::writeStringToFileInBackground(json, CFileUtils::appendFilePaths(directory.absolutePath(), "models.json"));
if (!s) { return false; }
fileContents.push_back({ "models.json", json });
}
if (this->getLiveriesCount() > 0)
{
const QString json(QJsonDocument(this->getLiveries().toJson()).toJson());
const bool s = CFileUtils::writeStringToFileInBackground(json, CFileUtils::appendFilePaths(directory.absolutePath(), "liveries.json"));
if (!s) { return false; }
fileContents.push_back({ "liveries.json", json });
}
if (this->getAirportsCount() > 0)
{
const QString json(QJsonDocument(this->getAirports().toJson()).toJson());
const bool s = CFileUtils::writeStringToFileInBackground(json, CFileUtils::appendFilePaths(directory.absolutePath(), "airports.json"));
if (!s) { return false; }
fileContents.push_back({ "airports.json", json });
}
for (const auto &pair : fileContents)
{
CWorker::fromTask(this, Q_FUNC_INFO, [pair, directory]
{
CFileUtils::writeStringToFile(CFileUtils::appendFilePaths(directory.absolutePath(), pair.first), pair.second);
});
}
return true;
}

View File

@@ -499,7 +499,7 @@ namespace BlackCore
void synchronizeDbCaches(BlackMisc::Network::CEntityFlags::Entity entities);
//! Write data to disk (mainly for testing scenarios)
bool writeDbDataToDisk(const QString &dir) const;
bool writeDbDataToDisk(const QString &dir);
//! Load DB data from disk (mainly for initial data load and testing scenarios)
//! \remark if the DB readers are alred in aother thread reads in background