mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-05 17:35:34 +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:
@@ -51,45 +51,17 @@ namespace BlackMisc
|
||||
(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 airport(json.value("icao").toString());
|
||||
airport.setDescriptiveName(json.value("name").toString());
|
||||
airport.setElevation(CLength(json.value("altitude").toInt(), CLengthUnit::ft()));
|
||||
CCoordinateGeodetic pos(json.value("latitude").toDouble(), json.value("longitude").toDouble(), 0);
|
||||
CAirport airport(json.value(prefix + "icao").toString());
|
||||
airport.setDescriptiveName(json.value(prefix + "name").toString());
|
||||
airport.setElevation(CLength(json.value(prefix + "altitude").toInt(), CLengthUnit::ft()));
|
||||
const CCoordinateGeodetic pos(json.value(prefix + "latitude").toDouble(), json.value(prefix + "longitude").toDouble(), 0);
|
||||
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())
|
||||
{
|
||||
CCountry country(json.value("alpha3").toString(), json.value("country").toString());
|
||||
airport.setCountry(country);
|
||||
}
|
||||
const CCountry country = CCountry::fromDatabaseJson(json, "ctry_");
|
||||
airport.setCountry(country);
|
||||
|
||||
airport.setKeyAndTimestampFromDatabaseJson(json, prefix);
|
||||
return airport;
|
||||
|
||||
@@ -36,9 +36,9 @@ namespace BlackMisc
|
||||
{
|
||||
//! Value object encapsulating information about an airpot.
|
||||
class BLACKMISC_EXPORT CAirport :
|
||||
public CValueObject<CAirport>,
|
||||
public BlackMisc::Db::IDatastoreObjectWithIntegerKey,
|
||||
public Geo::ICoordinateWithRelativePosition
|
||||
public CValueObject<CAirport>,
|
||||
public BlackMisc::Db::IDatastoreObjectWithIntegerKey,
|
||||
public Geo::ICoordinateWithRelativePosition
|
||||
{
|
||||
public:
|
||||
//! Properties by index
|
||||
@@ -142,11 +142,8 @@ namespace BlackMisc
|
||||
//! \copydoc BlackMisc::Mixin::String::toQString
|
||||
QString convertToQString(bool i18n = false) const;
|
||||
|
||||
//! \copydoc BlackMisc::CValueObject::convertFromJson
|
||||
void convertFromDatabaseJson(const QJsonObject &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:
|
||||
CAirportIcaoCode m_icao;
|
||||
@@ -157,6 +154,8 @@ namespace BlackMisc
|
||||
|
||||
BLACK_METACLASS(
|
||||
CAirport,
|
||||
BLACK_METAMEMBER(dbKey),
|
||||
BLACK_METAMEMBER(timestampMSecsSinceEpoch),
|
||||
BLACK_METAMEMBER(icao),
|
||||
BLACK_METAMEMBER(descriptiveName),
|
||||
BLACK_METAMEMBER(position),
|
||||
|
||||
@@ -60,16 +60,15 @@ namespace BlackMisc
|
||||
return icaos;
|
||||
}
|
||||
|
||||
void CAirportList::convertFromDatabaseJson(const QJsonArray &json)
|
||||
CAirportList CAirportList::fromDatabaseJson(const QJsonArray &array)
|
||||
{
|
||||
clear();
|
||||
for (const QJsonValue &value : json)
|
||||
CAirportList airports;
|
||||
for (const QJsonValue &value : array)
|
||||
{
|
||||
QJsonObject object = value.toObject();
|
||||
CAirport airport;
|
||||
airport.convertFromDatabaseJson(object);
|
||||
push_back(airport);
|
||||
const CAirport airport(CAirport::fromDatabaseJson(value.toObject()));
|
||||
airports.push_back(airport);
|
||||
}
|
||||
return airports;
|
||||
}
|
||||
} // namespace
|
||||
} // namespace
|
||||
|
||||
@@ -55,8 +55,8 @@ namespace BlackMisc
|
||||
//! All ICAO codes
|
||||
QStringList allIcaoCodes(bool sorted) const;
|
||||
|
||||
//! Reads the airport list from database JSON
|
||||
void convertFromDatabaseJson(const QJsonArray& json);
|
||||
//! From our DB JSON
|
||||
static CAirportList fromDatabaseJson(const QJsonArray &array);
|
||||
};
|
||||
} //namespace
|
||||
} // namespace
|
||||
|
||||
Reference in New Issue
Block a user