mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-02 23:25:53 +08:00
refs #561, Compressed JSON format for model
* based on RI DB keys * utility functions
This commit is contained in:
@@ -35,6 +35,13 @@ namespace BlackMisc
|
||||
this->m_dbKey = k;
|
||||
}
|
||||
|
||||
QJsonValue IDatastoreObjectWithIntegerKey::getDbKeyAsJsonValue() const
|
||||
{
|
||||
if (this->hasValidDbKey()) { return QJsonValue(this->m_dbKey); }
|
||||
static const QJsonValue null;
|
||||
return null;
|
||||
}
|
||||
|
||||
void IDatastoreObjectWithIntegerKey::setKeyAndTimestampFromDatabaseJson(const QJsonObject &json, const QString &prefix)
|
||||
{
|
||||
int dbKey = json.value(prefix + "id").toInt(-1);
|
||||
@@ -103,6 +110,13 @@ namespace BlackMisc
|
||||
return (i >= static_cast<int>(IndexDbIntegerKey)) && (i <= static_cast<int>(IndexDbIntegerKey));
|
||||
}
|
||||
|
||||
QJsonValue IDatastoreObjectWithStringKey::getDbKeyAsJsonValue() const
|
||||
{
|
||||
if (this->hasValidDbKey()) { return QJsonValue(this->m_dbKey); }
|
||||
static const QJsonValue null;
|
||||
return null;
|
||||
}
|
||||
|
||||
void IDatastoreObjectWithStringKey::setKeyAndTimestampFromDatabaseJson(const QJsonObject &json, const QString &prefix)
|
||||
{
|
||||
QString dbKey = json.value(prefix + "id").toString();
|
||||
|
||||
@@ -37,6 +37,9 @@ namespace BlackMisc
|
||||
//! DB key as string
|
||||
QString getDbKeyAsString() const;
|
||||
|
||||
//! Key as JSON value, or null
|
||||
QJsonValue getDbKeyAsJsonValue() const;
|
||||
|
||||
//! Db ley in parentheses, e.g. "(3)"
|
||||
QString getDbKeyAsStringInParentheses() const;
|
||||
|
||||
@@ -95,6 +98,9 @@ namespace BlackMisc
|
||||
//! Get DB key.
|
||||
const QString &getDbKey() const { return m_dbKey; }
|
||||
|
||||
//! Key as JSON value, or null
|
||||
QJsonValue getDbKeyAsJsonValue() const;
|
||||
|
||||
//! Set the DB key
|
||||
void setDbKey(const QString &key) { m_dbKey = key.trimmed().toUpper(); }
|
||||
|
||||
|
||||
@@ -20,6 +20,13 @@ namespace BlackMisc
|
||||
return BlackMisc::stringToBool(dbBool);
|
||||
}
|
||||
|
||||
const QString &CDatastoreUtility::boolToDbYN(bool v)
|
||||
{
|
||||
static const QString y("Y");
|
||||
static const QString n("N");
|
||||
return v ? y : n;
|
||||
}
|
||||
|
||||
int CDatastoreUtility::extractIntegerKey(const QString &stringWithKey)
|
||||
{
|
||||
QString ks(stringWithKey.trimmed());
|
||||
|
||||
@@ -23,23 +23,26 @@ namespace BlackMisc
|
||||
/*!
|
||||
* Class with datastore related utilities
|
||||
*/
|
||||
class CDatastoreUtility
|
||||
class BLACKMISC_EXPORT CDatastoreUtility
|
||||
{
|
||||
public:
|
||||
//! No constructor
|
||||
CDatastoreUtility() = delete;
|
||||
|
||||
//! DB Bool value to bool
|
||||
BLACKMISC_EXPORT static bool dbBoolStringToBool(const QString &dbBool);
|
||||
static bool dbBoolStringToBool(const QString &dbBool);
|
||||
|
||||
//! Bool to DB yes/no
|
||||
static const QString &boolToDbYN(bool v);
|
||||
|
||||
//! Extract key from string like "MyAircraft (33)"
|
||||
BLACKMISC_EXPORT static int extractIntegerKey(const QString &stringWithKey);
|
||||
static int extractIntegerKey(const QString &stringWithKey);
|
||||
|
||||
//! Parse a timestamp object
|
||||
BLACKMISC_EXPORT static QDateTime parseTimestamp(const QString ×tamp);
|
||||
static QDateTime parseTimestamp(const QString ×tamp);
|
||||
|
||||
//! Get id from a DB response
|
||||
BLACKMISC_EXPORT static bool parseSwiftWriteResponse(const QString &jsonResponse, BlackMisc::CStatusMessageList &messages, BlackMisc::CVariant &key);
|
||||
static bool parseSwiftWriteResponse(const QString &jsonResponse, BlackMisc::CStatusMessageList &messages, BlackMisc::CVariant &key);
|
||||
};
|
||||
|
||||
} // namespace
|
||||
|
||||
@@ -55,6 +55,41 @@ namespace BlackMisc
|
||||
return s;
|
||||
}
|
||||
|
||||
QJsonObject CAircraftModel::toDatabaseJson() const
|
||||
{
|
||||
QJsonObject obj;
|
||||
|
||||
// filename not in DB
|
||||
obj.insert("id", this->getDbKeyAsJsonValue());
|
||||
obj.insert("simkey", QJsonValue(this->m_modelString));
|
||||
obj.insert("description", QJsonValue(this->m_description));
|
||||
obj.insert("mode", QJsonValue(getModelModeAsString().left(1).toUpper()));
|
||||
|
||||
// sims
|
||||
const CSimulatorInfo sim(getSimulatorInfo());
|
||||
QString flag = CDatastoreUtility::boolToDbYN(sim.fsx());
|
||||
obj.insert("simfsx", QJsonValue(flag));
|
||||
flag = CDatastoreUtility::boolToDbYN(sim.p3d());
|
||||
obj.insert("simp3d", QJsonValue(flag));
|
||||
flag = CDatastoreUtility::boolToDbYN(sim.fs9());
|
||||
obj.insert("simfs9", QJsonValue(flag));
|
||||
flag = CDatastoreUtility::boolToDbYN(sim.xplane());
|
||||
obj.insert("simxplane", QJsonValue(flag));
|
||||
|
||||
// foreign keys
|
||||
obj.insert("iddistributor", this->getDistributor().getDbKeyAsJsonValue());
|
||||
obj.insert("idaircrafticao", this->getAircraftIcaoCode().getDbKeyAsJsonValue());
|
||||
obj.insert("idlivery", this->getLivery().getDbKeyAsJsonValue());
|
||||
obj.insert("idairlineicao", this->getLivery().getAirlineIcaoCode().getDbKeyAsJsonValue()); // not really needed if livery is complete
|
||||
|
||||
return obj;
|
||||
}
|
||||
|
||||
QString CAircraftModel::toDatabaseJsonString(QJsonDocument::JsonFormat format) const
|
||||
{
|
||||
return QJsonDocument(toDatabaseJson()).toJson(format);
|
||||
}
|
||||
|
||||
CVariant CAircraftModel::propertyByIndex(const BlackMisc::CPropertyIndex &index) const
|
||||
{
|
||||
if (index.isMyself()) { return CVariant::from(*this); }
|
||||
|
||||
@@ -239,6 +239,12 @@ namespace BlackMisc
|
||||
//! \copydoc CValueObject::convertToQString
|
||||
QString convertToQString(bool i18n = false) const;
|
||||
|
||||
//! To database JSON
|
||||
QJsonObject toDatabaseJson() const;
|
||||
|
||||
//! To database JSON
|
||||
QString toDatabaseJsonString(QJsonDocument::JsonFormat format = QJsonDocument::Compact) const;
|
||||
|
||||
//! Model type
|
||||
static QString modelTypeToString(ModelType type);
|
||||
|
||||
|
||||
@@ -198,5 +198,21 @@ namespace BlackMisc
|
||||
}
|
||||
return msgs;
|
||||
}
|
||||
|
||||
QJsonArray CAircraftModelList::toDatabaseJson() const
|
||||
{
|
||||
QJsonArray array;
|
||||
for (const CAircraftModel &model : *this)
|
||||
{
|
||||
QJsonValue v(model.toDatabaseJson());
|
||||
array.append(v);
|
||||
}
|
||||
return array;
|
||||
}
|
||||
|
||||
QString CAircraftModelList::toDatabaseJsonString(QJsonDocument::JsonFormat format) const
|
||||
{
|
||||
return QJsonDocument(toDatabaseJson()).toJson(format);
|
||||
}
|
||||
} // namespace
|
||||
} // namespace
|
||||
|
||||
@@ -89,6 +89,12 @@ namespace BlackMisc
|
||||
|
||||
//! Validate for publishing
|
||||
CStatusMessageList validateForPublishing() const;
|
||||
|
||||
//! To database JSON
|
||||
QJsonArray toDatabaseJson() const;
|
||||
|
||||
//! To database JSON
|
||||
QString toDatabaseJsonString(QJsonDocument::JsonFormat format = QJsonDocument::Compact) const;
|
||||
};
|
||||
|
||||
} //namespace
|
||||
|
||||
Reference in New Issue
Block a user