mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-25 10:15:43 +08:00
refs #853, JSON exception handling adjustments for model reader
This commit is contained in:
committed by
Mathew Sutcliffe
parent
e956986bf4
commit
b0bef3264c
@@ -375,58 +375,107 @@ namespace BlackCore
|
|||||||
CLogMessage(this).info("Read '%1' '%2' from '%3'") << n << CEntityFlags::flagToString(CEntityFlags::ModelEntity) << urlString;
|
CLogMessage(this).info("Read '%1' '%2' from '%3'") << n << CEntityFlags::flagToString(CEntityFlags::ModelEntity) << urlString;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CModelDataReader::readFromJsonFiles(const QString &dir, CEntityFlags::Entity whatToRead)
|
CStatusMessageList CModelDataReader::readFromJsonFiles(const QString &dir, CEntityFlags::Entity whatToRead)
|
||||||
{
|
{
|
||||||
QDir directory(dir);
|
QDir directory(dir);
|
||||||
if (!directory.exists()) { return false; }
|
if (!directory.exists())
|
||||||
|
{
|
||||||
|
return CStatusMessage(this).error("Missing directory '%1'") << dir;
|
||||||
|
}
|
||||||
|
|
||||||
|
whatToRead &= CEntityFlags::DistributorLiveryModel; // supported
|
||||||
BlackMisc::Network::CEntityFlags::Entity reallyRead = CEntityFlags::NoEntity;
|
BlackMisc::Network::CEntityFlags::Entity reallyRead = CEntityFlags::NoEntity;
|
||||||
|
|
||||||
|
CStatusMessageList msgs;
|
||||||
if (whatToRead.testFlag(CEntityFlags::LiveryEntity))
|
if (whatToRead.testFlag(CEntityFlags::LiveryEntity))
|
||||||
{
|
{
|
||||||
QString liveriesJson(CFileUtils::readFileToString(CFileUtils::appendFilePaths(directory.absolutePath(), "liveries.json")));
|
const QString fileName = CFileUtils::appendFilePaths(directory.absolutePath(), "liveries.json");
|
||||||
if (!liveriesJson.isEmpty())
|
const QString liveriesJson(CFileUtils::readFileToString(fileName));
|
||||||
|
if (liveriesJson.isEmpty())
|
||||||
|
{
|
||||||
|
msgs.push_back(CStatusMessage(this).error("Failed to read from file/empty file '%1'") << fileName);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
try
|
||||||
{
|
{
|
||||||
CLiveryList liveries;
|
CLiveryList liveries;
|
||||||
liveries.convertFromJson(liveriesJson); //! \todo catch CJsonException or use convertFromJsonNoThrow
|
liveries.convertFromJson(liveriesJson);
|
||||||
const int c = liveries.size();
|
const int c = liveries.size();
|
||||||
this->m_liveryCache.set(liveries);
|
this->m_liveryCache.set(liveries);
|
||||||
|
|
||||||
emit dataRead(CEntityFlags::LiveryEntity, CEntityFlags::ReadFinished, c);
|
emit dataRead(CEntityFlags::LiveryEntity, CEntityFlags::ReadFinished, c);
|
||||||
reallyRead |= CEntityFlags::LiveryEntity;
|
reallyRead |= CEntityFlags::LiveryEntity;
|
||||||
}
|
}
|
||||||
|
catch (const CJsonException &ex)
|
||||||
|
{
|
||||||
|
emit dataRead(CEntityFlags::LiveryEntity, CEntityFlags::ReadFailed, 0);
|
||||||
|
msgs.push_back(ex.toStatusMessage(this, QString("Reading liveries from '%1'").arg(fileName)));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (whatToRead.testFlag(CEntityFlags::ModelEntity))
|
if (whatToRead.testFlag(CEntityFlags::ModelEntity))
|
||||||
{
|
{
|
||||||
QString modelsJson(CFileUtils::readFileToString(CFileUtils::appendFilePaths(directory.absolutePath(), "models.json")));
|
const QString fileName = CFileUtils::appendFilePaths(directory.absolutePath(), "models.json");
|
||||||
if (!modelsJson.isEmpty())
|
const QString modelsJson(CFileUtils::readFileToString(fileName));
|
||||||
|
if (modelsJson.isEmpty())
|
||||||
|
{
|
||||||
|
msgs.push_back(CStatusMessage(this).error("Failed to read from file/empty file '%1'") << fileName);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
try
|
||||||
{
|
{
|
||||||
CAircraftModelList models;
|
CAircraftModelList models;
|
||||||
models.convertFromJson(Json::jsonObjectFromString(modelsJson)); //! \todo catch CJsonException or use convertFromJsonNoThrow
|
models.convertFromJson(Json::jsonObjectFromString(modelsJson));
|
||||||
const int c = models.size();
|
const int c = models.size();
|
||||||
this->m_modelCache.set(models);
|
this->m_modelCache.set(models);
|
||||||
|
|
||||||
emit dataRead(CEntityFlags::ModelEntity, CEntityFlags::ReadFinished, c);
|
emit dataRead(CEntityFlags::ModelEntity, CEntityFlags::ReadFinished, c);
|
||||||
reallyRead |= CEntityFlags::ModelEntity;
|
reallyRead |= CEntityFlags::ModelEntity;
|
||||||
}
|
}
|
||||||
|
catch (const CJsonException &ex)
|
||||||
|
{
|
||||||
|
emit dataRead(CEntityFlags::ModelEntity, CEntityFlags::ReadFailed, 0);
|
||||||
|
msgs.push_back(ex.toStatusMessage(this, QString("Reading models from '%1'").arg(fileName)));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (whatToRead.testFlag(CEntityFlags::DistributorEntity))
|
if (whatToRead.testFlag(CEntityFlags::DistributorEntity))
|
||||||
{
|
{
|
||||||
QString distributorsJson(CFileUtils::readFileToString(CFileUtils::appendFilePaths(directory.absolutePath(), "distributors.json")));
|
const QString fileName = CFileUtils::appendFilePaths(directory.absolutePath(), "distributors.json");
|
||||||
if (!distributorsJson.isEmpty())
|
const QString distributorsJson(CFileUtils::readFileToString(fileName));
|
||||||
|
if (distributorsJson.isEmpty())
|
||||||
|
{
|
||||||
|
msgs.push_back(CStatusMessage(this).error("Failed to read from file/empty file '%1'") << fileName);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
try
|
||||||
{
|
{
|
||||||
CDistributorList distributors;
|
CDistributorList distributors;
|
||||||
distributors.convertFromJson(Json::jsonObjectFromString(distributorsJson)); //! \todo catch CJsonException or use convertFromJsonNoThrow
|
distributors.convertFromJson(Json::jsonObjectFromString(distributorsJson));
|
||||||
const int c = distributors.size();
|
const int c = distributors.size();
|
||||||
this->m_distributorCache.set(distributors);
|
this->m_distributorCache.set(distributors);
|
||||||
|
|
||||||
emit dataRead(CEntityFlags::DistributorEntity, CEntityFlags::ReadFinished, c);
|
emit dataRead(CEntityFlags::DistributorEntity, CEntityFlags::ReadFinished, c);
|
||||||
reallyRead |= CEntityFlags::DistributorEntity;
|
reallyRead |= CEntityFlags::DistributorEntity;
|
||||||
}
|
}
|
||||||
|
catch (const CJsonException &ex)
|
||||||
|
{
|
||||||
|
emit dataRead(CEntityFlags::DistributorEntity, CEntityFlags::ReadFailed, 0);
|
||||||
|
msgs.push_back(ex.toStatusMessage(this, QString("Reading distributors from '%1'").arg(fileName)));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return (reallyRead & CEntityFlags::DistributorLiveryModel) == whatToRead;
|
if (msgs.isSuccess() && (reallyRead & CEntityFlags::DistributorLiveryModel) == whatToRead)
|
||||||
|
{
|
||||||
|
return CStatusMessage(this).info("Updated caches for '%1' from '%2'") << CEntityFlags::flagToString(reallyRead) << dir;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return msgs;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CModelDataReader::readFromJsonFilesInBackground(const QString &dir, CEntityFlags::Entity whatToRead)
|
bool CModelDataReader::readFromJsonFilesInBackground(const QString &dir, CEntityFlags::Entity whatToRead)
|
||||||
@@ -434,8 +483,11 @@ namespace BlackCore
|
|||||||
if (dir.isEmpty() || whatToRead == CEntityFlags::NoEntity) { return false; }
|
if (dir.isEmpty() || whatToRead == CEntityFlags::NoEntity) { return false; }
|
||||||
QTimer::singleShot(0, this, [this, dir, whatToRead]()
|
QTimer::singleShot(0, this, [this, dir, whatToRead]()
|
||||||
{
|
{
|
||||||
bool s = this->readFromJsonFiles(dir, whatToRead);
|
const CStatusMessageList msgs = this->readFromJsonFiles(dir, whatToRead);
|
||||||
Q_UNUSED(s);
|
if (msgs.isFailure())
|
||||||
|
{
|
||||||
|
CLogMessage::preformatted(msgs);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -116,7 +116,7 @@ namespace BlackCore
|
|||||||
bool areAllDataRead() const;
|
bool areAllDataRead() const;
|
||||||
|
|
||||||
//! Read to JSON file
|
//! Read to JSON file
|
||||||
bool readFromJsonFiles(const QString &dir, BlackMisc::Network::CEntityFlags::Entity whatToRead = BlackMisc::Network::CEntityFlags::DistributorLiveryModel);
|
BlackMisc::CStatusMessageList readFromJsonFiles(const QString &dir, BlackMisc::Network::CEntityFlags::Entity whatToRead = BlackMisc::Network::CEntityFlags::DistributorLiveryModel);
|
||||||
|
|
||||||
//! Read from static DB data file
|
//! Read from static DB data file
|
||||||
bool readFromJsonFilesInBackground(const QString &dir, BlackMisc::Network::CEntityFlags::Entity whatToRead = BlackMisc::Network::CEntityFlags::DistributorLiveryModel);
|
bool readFromJsonFilesInBackground(const QString &dir, BlackMisc::Network::CEntityFlags::Entity whatToRead = BlackMisc::Network::CEntityFlags::DistributorLiveryModel);
|
||||||
|
|||||||
@@ -1203,9 +1203,10 @@ namespace BlackCore
|
|||||||
}
|
}
|
||||||
if (s && this->m_modelDataReader)
|
if (s && this->m_modelDataReader)
|
||||||
{
|
{
|
||||||
s = inBackground ?
|
if(inBackground) { return this->m_modelDataReader->readFromJsonFilesInBackground(dir); }
|
||||||
this->m_modelDataReader->readFromJsonFilesInBackground(dir) :
|
const CStatusMessageList msgs = this->m_modelDataReader->readFromJsonFiles(dir);
|
||||||
this->m_modelDataReader->readFromJsonFiles(dir);
|
if (msgs.isFailure()) { CLogMessage::preformatted(msgs); }
|
||||||
|
return msgs.isSuccess();
|
||||||
}
|
}
|
||||||
if (s && this->m_airportDataReader)
|
if (s && this->m_airportDataReader)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user