mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-17 19:05:31 +08:00
refs #748, fixed airport JSON bugs and removed workaround
* removed workaround in web data services * removed convertFromDatabaseJson functions, not needed * changed to use the correct static fromDatabaseJson functions * fixed prefixes * load correct Country object by loading it as nested object * key and timestamp was missing in CAirport tuple metadata
This commit is contained in:
@@ -65,7 +65,7 @@ namespace BlackCore
|
|||||||
|
|
||||||
void CAirportDataReader::ps_parseAirportData(QNetworkReply *nwReply)
|
void CAirportDataReader::ps_parseAirportData(QNetworkReply *nwReply)
|
||||||
{
|
{
|
||||||
CDatabaseReader::JsonDatastoreResponse res = this->setStatusAndTransformReplyIntoDatastoreResponse(nwReply);
|
const CDatabaseReader::JsonDatastoreResponse res = this->setStatusAndTransformReplyIntoDatastoreResponse(nwReply);
|
||||||
if (res.hasErrorMessage())
|
if (res.hasErrorMessage())
|
||||||
{
|
{
|
||||||
CLogMessage::preformatted(res.lastWarningOrAbove());
|
CLogMessage::preformatted(res.lastWarningOrAbove());
|
||||||
@@ -74,29 +74,26 @@ namespace BlackCore
|
|||||||
}
|
}
|
||||||
|
|
||||||
CAirportList airports;
|
CAirportList airports;
|
||||||
|
|
||||||
if (res.isRestricted())
|
if (res.isRestricted())
|
||||||
{
|
{
|
||||||
airports = this->getAirports();
|
airports = this->getAirports();
|
||||||
CAirportList updates;
|
CAirportList updates(CAirportList::fromDatabaseJson(res));
|
||||||
updates.convertFromDatabaseJson(res);
|
|
||||||
airports.replaceOrAddObjectsByKey(updates);
|
airports.replaceOrAddObjectsByKey(updates);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
airports.convertFromDatabaseJson(res);
|
airports = CAirportList::fromDatabaseJson(res);
|
||||||
}
|
}
|
||||||
|
|
||||||
int size = airports.size();
|
const int size = airports.size();
|
||||||
qint64 timestamp = lastModifiedMsSinceEpoch(nwReply);
|
qint64 latestTimestamp = airports.latestTimestampMsecsSinceEpoch();
|
||||||
if (size > 0 && timestamp < 0)
|
if (size > 0 && latestTimestamp < 0)
|
||||||
{
|
{
|
||||||
CLogMessage(this).error("No timestamp in airport list, setting to last modified value");
|
CLogMessage(this).error("No timestamp in airport list, setting to last modified value");
|
||||||
timestamp = lastModifiedMsSinceEpoch(nwReply);
|
latestTimestamp = lastModifiedMsSinceEpoch(nwReply);
|
||||||
}
|
}
|
||||||
|
|
||||||
m_airportCache.set(airports, timestamp);
|
m_airportCache.set(airports, latestTimestamp);
|
||||||
|
|
||||||
emit dataRead(CEntityFlags::AirportEntity, CEntityFlags::ReadFinished, airports.size());
|
emit dataRead(CEntityFlags::AirportEntity, CEntityFlags::ReadFinished, airports.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -45,11 +45,11 @@ namespace BlackCore
|
|||||||
//! \copydoc BlackCore::Db::CDatabaseReader::getCacheTimestamp()
|
//! \copydoc BlackCore::Db::CDatabaseReader::getCacheTimestamp()
|
||||||
QDateTime getCacheTimestamp(BlackMisc::Network::CEntityFlags::Entity entities) const override;
|
QDateTime getCacheTimestamp(BlackMisc::Network::CEntityFlags::Entity entities) const override;
|
||||||
|
|
||||||
//! \copydoc BlackCore::Db::CDatabaseReader:;getCacheCount()
|
//! \copydoc BlackCore::Db::CDatabaseReader::getCacheCount()
|
||||||
int getCacheCount(BlackMisc::Network::CEntityFlags::Entity entity) const override;
|
int getCacheCount(BlackMisc::Network::CEntityFlags::Entity entity) const override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
//! \copydoc BlackCore::Db::CDatabaseReader::syncronizeCaches()
|
//! \copydoc BlackCore::Db::CDatabaseReader::synchronizeCaches()
|
||||||
void synchronizeCaches(BlackMisc::Network::CEntityFlags::Entity entities) override;
|
void synchronizeCaches(BlackMisc::Network::CEntityFlags::Entity entities) override;
|
||||||
|
|
||||||
//! \copydoc BlackCore::Db::CDatabaseReader::invalidateCaches()
|
//! \copydoc BlackCore::Db::CDatabaseReader::invalidateCaches()
|
||||||
|
|||||||
@@ -756,9 +756,8 @@ namespace BlackCore
|
|||||||
CLogMessage(cats).info("Read data %1 entries: %2 state: %3") << CEntityFlags::flagToString(entity) << number << CEntityFlags::flagToString(state);
|
CLogMessage(cats).info("Read data %1 entries: %2 state: %3") << CEntityFlags::flagToString(entity) << number << CEntityFlags::flagToString(state);
|
||||||
}
|
}
|
||||||
|
|
||||||
//! \todo adjust value when airports are ready
|
|
||||||
this->m_swiftDbEntitiesRead |= entity;
|
this->m_swiftDbEntitiesRead |= entity;
|
||||||
if (((static_cast<int>(this->m_swiftDbEntitiesRead)) & static_cast<int>(CEntityFlags::AllDbEntitiesNoInfoObjectsNoAirports)) > 0)
|
if (((static_cast<int>(this->m_swiftDbEntitiesRead)) & static_cast<int>(CEntityFlags::AllDbEntities)) > 0)
|
||||||
{
|
{
|
||||||
emit allSwiftDbDataRead();
|
emit allSwiftDbDataRead();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -51,45 +51,17 @@ namespace BlackMisc
|
|||||||
(void)QT_TRANSLATE_NOOP("Aviation", "Airport");
|
(void)QT_TRANSLATE_NOOP("Aviation", "Airport");
|
||||||
}
|
}
|
||||||
|
|
||||||
void CAirport::convertFromDatabaseJson(const QJsonObject &json)
|
|
||||||
{
|
|
||||||
Q_ASSERT(json.value("icao").isString());
|
|
||||||
setIcao(json.value("icao").toString());
|
|
||||||
|
|
||||||
if (json.value("alpha3").isString() && json.value("country").isString())
|
|
||||||
{
|
|
||||||
CCountry country(json.value("alpha3").toString(), json.value("country").toString());
|
|
||||||
setCountry(country);
|
|
||||||
}
|
|
||||||
|
|
||||||
Q_ASSERT(json.value("name").isString());
|
|
||||||
setDescriptiveName(json.value("name").toString());
|
|
||||||
|
|
||||||
Q_ASSERT(json.value("altitude").isDouble());
|
|
||||||
setElevation(CLength(json.value("altitude").toInt(), CLengthUnit::ft()));
|
|
||||||
|
|
||||||
Q_ASSERT(json.value("latitude").isDouble());
|
|
||||||
Q_ASSERT(json.value("longitude").isDouble());
|
|
||||||
CCoordinateGeodetic pos(json.value("latitude").toDouble(), json.value("longitude").toDouble(), 0);
|
|
||||||
setPosition(pos);
|
|
||||||
|
|
||||||
setOperating(json.value("operating").toString() == QStringLiteral("Y"));
|
|
||||||
}
|
|
||||||
|
|
||||||
CAirport CAirport::fromDatabaseJson(const QJsonObject &json, const QString &prefix)
|
CAirport CAirport::fromDatabaseJson(const QJsonObject &json, const QString &prefix)
|
||||||
{
|
{
|
||||||
CAirport airport(json.value("icao").toString());
|
CAirport airport(json.value(prefix + "icao").toString());
|
||||||
airport.setDescriptiveName(json.value("name").toString());
|
airport.setDescriptiveName(json.value(prefix + "name").toString());
|
||||||
airport.setElevation(CLength(json.value("altitude").toInt(), CLengthUnit::ft()));
|
airport.setElevation(CLength(json.value(prefix + "altitude").toInt(), CLengthUnit::ft()));
|
||||||
CCoordinateGeodetic pos(json.value("latitude").toDouble(), json.value("longitude").toDouble(), 0);
|
const CCoordinateGeodetic pos(json.value(prefix + "latitude").toDouble(), json.value(prefix + "longitude").toDouble(), 0);
|
||||||
airport.setPosition(pos);
|
airport.setPosition(pos);
|
||||||
airport.setOperating(json.value("operating").toString() == QStringLiteral("Y"));
|
airport.setOperating(json.value(prefix + "operating").toString() == QStringLiteral("Y"));
|
||||||
|
|
||||||
if (json.value("alpha3").isString() && json.value("country").isString())
|
const CCountry country = CCountry::fromDatabaseJson(json, "ctry_");
|
||||||
{
|
|
||||||
CCountry country(json.value("alpha3").toString(), json.value("country").toString());
|
|
||||||
airport.setCountry(country);
|
airport.setCountry(country);
|
||||||
}
|
|
||||||
|
|
||||||
airport.setKeyAndTimestampFromDatabaseJson(json, prefix);
|
airport.setKeyAndTimestampFromDatabaseJson(json, prefix);
|
||||||
return airport;
|
return airport;
|
||||||
|
|||||||
@@ -142,11 +142,8 @@ namespace BlackMisc
|
|||||||
//! \copydoc BlackMisc::Mixin::String::toQString
|
//! \copydoc BlackMisc::Mixin::String::toQString
|
||||||
QString convertToQString(bool i18n = false) const;
|
QString convertToQString(bool i18n = false) const;
|
||||||
|
|
||||||
//! \copydoc BlackMisc::CValueObject::convertFromJson
|
|
||||||
void convertFromDatabaseJson(const QJsonObject &json);
|
|
||||||
|
|
||||||
//! Object from JSON
|
//! Object from JSON
|
||||||
static CAirport fromDatabaseJson(const QJsonObject &json, const QString &prefix = QString("apt_"));
|
static CAirport fromDatabaseJson(const QJsonObject &json, const QString &prefix = QString());
|
||||||
|
|
||||||
private:
|
private:
|
||||||
CAirportIcaoCode m_icao;
|
CAirportIcaoCode m_icao;
|
||||||
@@ -157,6 +154,8 @@ namespace BlackMisc
|
|||||||
|
|
||||||
BLACK_METACLASS(
|
BLACK_METACLASS(
|
||||||
CAirport,
|
CAirport,
|
||||||
|
BLACK_METAMEMBER(dbKey),
|
||||||
|
BLACK_METAMEMBER(timestampMSecsSinceEpoch),
|
||||||
BLACK_METAMEMBER(icao),
|
BLACK_METAMEMBER(icao),
|
||||||
BLACK_METAMEMBER(descriptiveName),
|
BLACK_METAMEMBER(descriptiveName),
|
||||||
BLACK_METAMEMBER(position),
|
BLACK_METAMEMBER(position),
|
||||||
|
|||||||
@@ -60,16 +60,15 @@ namespace BlackMisc
|
|||||||
return icaos;
|
return icaos;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CAirportList::convertFromDatabaseJson(const QJsonArray &json)
|
CAirportList CAirportList::fromDatabaseJson(const QJsonArray &array)
|
||||||
{
|
{
|
||||||
clear();
|
CAirportList airports;
|
||||||
for (const QJsonValue &value : json)
|
for (const QJsonValue &value : array)
|
||||||
{
|
{
|
||||||
QJsonObject object = value.toObject();
|
const CAirport airport(CAirport::fromDatabaseJson(value.toObject()));
|
||||||
CAirport airport;
|
airports.push_back(airport);
|
||||||
airport.convertFromDatabaseJson(object);
|
|
||||||
push_back(airport);
|
|
||||||
}
|
}
|
||||||
|
return airports;
|
||||||
}
|
}
|
||||||
} // namespace
|
} // namespace
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|||||||
@@ -55,8 +55,8 @@ namespace BlackMisc
|
|||||||
//! All ICAO codes
|
//! All ICAO codes
|
||||||
QStringList allIcaoCodes(bool sorted) const;
|
QStringList allIcaoCodes(bool sorted) const;
|
||||||
|
|
||||||
//! Reads the airport list from database JSON
|
//! From our DB JSON
|
||||||
void convertFromDatabaseJson(const QJsonArray& json);
|
static CAirportList fromDatabaseJson(const QJsonArray &array);
|
||||||
};
|
};
|
||||||
} //namespace
|
} //namespace
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|||||||
Reference in New Issue
Block a user