mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-05-04 17:30:12 +08:00
Ref T267, allow to call "convertFromMemoizedJson", but also convert via "convertFromJson"
The variant convertFromMemoizedJson trait did already do something similar, calling "convertFromJson" if the memoized version is not avilable. Now the function also "decides" based on the passed data itself.
This commit is contained in:
@@ -977,7 +977,7 @@ namespace BlackMisc
|
|||||||
return json;
|
return json;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CAircraftModelList::convertFromMemoizedJson(const QJsonObject &json)
|
void CAircraftModelList::convertFromMemoizedJson(const QJsonObject &json, bool fallbackToConvertToJson)
|
||||||
{
|
{
|
||||||
clear();
|
clear();
|
||||||
QJsonValue value = json.value("containerbase");
|
QJsonValue value = json.value("containerbase");
|
||||||
@@ -988,9 +988,25 @@ namespace BlackMisc
|
|||||||
const QJsonValue aircraftIcaos = json.value("aircraftIcaos");
|
const QJsonValue aircraftIcaos = json.value("aircraftIcaos");
|
||||||
const QJsonValue liveries = json.value("liveries");
|
const QJsonValue liveries = json.value("liveries");
|
||||||
const QJsonValue distributors = json.value("distributors");
|
const QJsonValue distributors = json.value("distributors");
|
||||||
if (aircraftIcaos.isUndefined()) { throw CJsonException("Missing 'aircraftIcaos'"); }
|
|
||||||
if (liveries.isUndefined()) { throw CJsonException("Missing 'liveries'"); }
|
const bool undefAc = aircraftIcaos.isUndefined();
|
||||||
if (distributors.isUndefined()) { throw CJsonException("Missing 'distributors'"); }
|
const bool undefLiv = liveries.isUndefined();
|
||||||
|
const bool undefDist = distributors.isUndefined();
|
||||||
|
const bool undefAll = undefAc && undefDist && undefLiv;
|
||||||
|
|
||||||
|
if (fallbackToConvertToJson && undefAll)
|
||||||
|
{
|
||||||
|
this->convertFromJson(json);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (undefAc) { throw CJsonException("Missing 'aircraftIcaos'"); }
|
||||||
|
if (undefLiv) { throw CJsonException("Missing 'liveries'"); }
|
||||||
|
if (undefDist) { throw CJsonException("Missing 'distributors'"); }
|
||||||
|
}
|
||||||
|
|
||||||
|
// convert
|
||||||
{
|
{
|
||||||
CJsonScope scope("aircraftIcaos");
|
CJsonScope scope("aircraftIcaos");
|
||||||
Q_UNUSED(scope);
|
Q_UNUSED(scope);
|
||||||
|
|||||||
@@ -335,7 +335,7 @@ namespace BlackMisc
|
|||||||
QJsonObject toMemoizedJson() const;
|
QJsonObject toMemoizedJson() const;
|
||||||
|
|
||||||
//! From compact JSON format
|
//! From compact JSON format
|
||||||
void convertFromMemoizedJson(const QJsonObject &json);
|
void convertFromMemoizedJson(const QJsonObject &json, bool fallbackToConvertToJson = false);
|
||||||
|
|
||||||
//! To database JSON
|
//! To database JSON
|
||||||
QJsonArray toDatabaseJson() const;
|
QJsonArray toDatabaseJson() const;
|
||||||
|
|||||||
@@ -194,7 +194,9 @@ namespace BlackMisc
|
|||||||
{
|
{
|
||||||
CJsonScope scope("value");
|
CJsonScope scope("value");
|
||||||
m_v = QVariant(typeId, nullptr);
|
m_v = QVariant(typeId, nullptr);
|
||||||
meta->convertFromJson(value.toObject(), data());
|
|
||||||
|
// this will call convertFromJson if there is no MemoizedJson
|
||||||
|
meta->convertFromMemoizedJson(value.toObject(), data(), true);
|
||||||
}
|
}
|
||||||
else if (QMetaType::hasRegisteredConverterFunction(qMetaTypeId<QString>(), typeId))
|
else if (QMetaType::hasRegisteredConverterFunction(qMetaTypeId<QString>(), typeId))
|
||||||
{
|
{
|
||||||
@@ -253,7 +255,7 @@ namespace BlackMisc
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CVariant::convertFromMemoizedJson(const QJsonObject &json)
|
void CVariant::convertFromMemoizedJson(const QJsonObject &json, bool allowFallbackToJson)
|
||||||
{
|
{
|
||||||
QJsonValue typeValue = json.value("type");
|
QJsonValue typeValue = json.value("type");
|
||||||
if (typeValue.isUndefined()) { throw CJsonException("Missing 'type'"); }
|
if (typeValue.isUndefined()) { throw CJsonException("Missing 'type'"); }
|
||||||
@@ -271,7 +273,7 @@ namespace BlackMisc
|
|||||||
|
|
||||||
CJsonScope scope("value");
|
CJsonScope scope("value");
|
||||||
m_v = QVariant(typeId, nullptr);
|
m_v = QVariant(typeId, nullptr);
|
||||||
meta->convertFromMemoizedJson(value.toObject(), data());
|
meta->convertFromMemoizedJson(value.toObject(), data(), allowFallbackToJson);
|
||||||
}
|
}
|
||||||
catch (const Private::CVariantException &ex)
|
catch (const Private::CVariantException &ex)
|
||||||
{
|
{
|
||||||
@@ -288,7 +290,7 @@ namespace BlackMisc
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
convertFromMemoizedJson(json);
|
convertFromMemoizedJson(json, false);
|
||||||
}
|
}
|
||||||
catch (const CJsonException &ex)
|
catch (const CJsonException &ex)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -286,7 +286,7 @@ namespace BlackMisc
|
|||||||
QJsonObject toMemoizedJson() const;
|
QJsonObject toMemoizedJson() const;
|
||||||
|
|
||||||
//! From compact JSON format.
|
//! From compact JSON format.
|
||||||
void convertFromMemoizedJson(const QJsonObject &json);
|
void convertFromMemoizedJson(const QJsonObject &json, bool allowFallbackToJson);
|
||||||
|
|
||||||
//! Call convertFromMemoizedJson, catch any CJsonException that is thrown and return it as CStatusMessage.
|
//! Call convertFromMemoizedJson, catch any CJsonException that is thrown and return it as CStatusMessage.
|
||||||
CStatusMessage convertFromMemoizedJsonNoThrow(const QJsonObject &json, const CLogCategoryList &categories, const QString &prefix);
|
CStatusMessage convertFromMemoizedJsonNoThrow(const QJsonObject &json, const CLogCategoryList &categories, const QString &prefix);
|
||||||
|
|||||||
@@ -86,7 +86,7 @@ namespace BlackMisc
|
|||||||
CJsonScope scope(key);
|
CJsonScope scope(key);
|
||||||
Q_UNUSED(scope);
|
Q_UNUSED(scope);
|
||||||
CVariant value;
|
CVariant value;
|
||||||
value.convertFromMemoizedJson(it.value().toObject());
|
value.convertFromMemoizedJson(it.value().toObject(), true);
|
||||||
implementationOf(*this).insert(cend(), key, value);
|
implementationOf(*this).insert(cend(), key, value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -101,7 +101,7 @@ namespace BlackMisc
|
|||||||
CJsonScope scope(key);
|
CJsonScope scope(key);
|
||||||
Q_UNUSED(scope);
|
Q_UNUSED(scope);
|
||||||
CVariant var;
|
CVariant var;
|
||||||
var.convertFromMemoizedJson(value.toObject());
|
var.convertFromMemoizedJson(value.toObject(), true);
|
||||||
insert(key, var);
|
insert(key, var);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ namespace BlackMisc
|
|||||||
virtual QJsonObject toJson(const void *object) const = 0;
|
virtual QJsonObject toJson(const void *object) const = 0;
|
||||||
virtual void convertFromJson(const QJsonObject &json, void *object) const = 0;
|
virtual void convertFromJson(const QJsonObject &json, void *object) const = 0;
|
||||||
virtual QJsonObject toMemoizedJson(const void *object) const = 0;
|
virtual QJsonObject toMemoizedJson(const void *object) const = 0;
|
||||||
virtual void convertFromMemoizedJson(const QJsonObject &json, void *object) const = 0;
|
virtual void convertFromMemoizedJson(const QJsonObject &json, void *object, bool allowFallbackToJson) const = 0;
|
||||||
virtual void unmarshall(const QDBusArgument &arg, void *object) const = 0;
|
virtual void unmarshall(const QDBusArgument &arg, void *object) const = 0;
|
||||||
virtual uint getValueHash(const void *object) const = 0;
|
virtual uint getValueHash(const void *object) const = 0;
|
||||||
virtual int getMetaTypeId() const = 0;
|
virtual int getMetaTypeId() const = 0;
|
||||||
@@ -101,9 +101,9 @@ namespace BlackMisc
|
|||||||
static QJsonObject toMemoizedJson(const T &object, ...) { return toJson(object, 0); }
|
static QJsonObject toMemoizedJson(const T &object, ...) { return toJson(object, 0); }
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
static void convertFromMemoizedJson(const QJsonObject &json, T &object, decltype(static_cast<void>(object.convertFromMemoizedJson(json)), 0)) { object.convertFromMemoizedJson(json); }
|
static void convertFromMemoizedJson(const QJsonObject &json, T &object, bool allowFallbackToJson, decltype(static_cast<void>(object.convertFromMemoizedJson(json, allowFallbackToJson)), 0)) { object.convertFromMemoizedJson(json, allowFallbackToJson); }
|
||||||
template <typename T>
|
template <typename T>
|
||||||
static void convertFromMemoizedJson(const QJsonObject &json, T &object, ...) { convertFromJson(json, object, 0); }
|
static void convertFromMemoizedJson(const QJsonObject &json, T &object, bool allowFallbackToJson, ...) { convertFromJson(json, object, 0); Q_UNUSED(allowFallbackToJson) }
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
static uint getValueHash(const T &object, decltype(static_cast<void>(qHash(object)), 0)) { return qHash(object); }
|
static uint getValueHash(const T &object, decltype(static_cast<void>(qHash(object)), 0)) { return qHash(object); }
|
||||||
@@ -113,7 +113,7 @@ namespace BlackMisc
|
|||||||
template <typename T>
|
template <typename T>
|
||||||
static int compareImpl(const T &lhs, const T &rhs, decltype(static_cast<void>(compare(lhs, rhs)), 0)) { return compare(lhs, rhs); }
|
static int compareImpl(const T &lhs, const T &rhs, decltype(static_cast<void>(compare(lhs, rhs)), 0)) { return compare(lhs, rhs); }
|
||||||
template <typename T>
|
template <typename T>
|
||||||
static int compareImpl(const T &lhs, const T&, ...) { throw CVariantException(lhs, "compare"); }
|
static int compareImpl(const T &lhs, const T &, ...) { throw CVariantException(lhs, "compare"); }
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
static void setPropertyByIndex(T &object, const CVariant &variant, const CPropertyIndex &index, decltype(static_cast<void>(object.setPropertyByIndex(index, variant)), 0)) { object.setPropertyByIndex(index, variant); }
|
static void setPropertyByIndex(T &object, const CVariant &variant, const CPropertyIndex &index, decltype(static_cast<void>(object.setPropertyByIndex(index, variant)), 0)) { object.setPropertyByIndex(index, variant); }
|
||||||
@@ -136,7 +136,7 @@ namespace BlackMisc
|
|||||||
static bool equalsPropertyByIndex(const T &object, const CVariant &, const CPropertyIndex &, ...) { throw CVariantException(object, "equalsPropertyByIndex"); }
|
static bool equalsPropertyByIndex(const T &object, const CVariant &, const CPropertyIndex &, ...) { throw CVariantException(object, "equalsPropertyByIndex"); }
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
static void toIcon(const T &object, CIcon &o_icon, std::enable_if_t<! std::is_same<T, CVariant>::value, decltype(static_cast<void>(object.toIcon()), 0)>) { assign(o_icon, object.toIcon()); }
|
static void toIcon(const T &object, CIcon &o_icon, std::enable_if_t < ! std::is_same<T, CVariant>::value, decltype(static_cast<void>(object.toIcon()), 0) >) { assign(o_icon, object.toIcon()); }
|
||||||
template <typename T>
|
template <typename T>
|
||||||
static void toIcon(const T &object, CIcon &, ...) { throw CVariantException(object, "toIcon"); }
|
static void toIcon(const T &object, CIcon &, ...) { throw CVariantException(object, "toIcon"); }
|
||||||
};
|
};
|
||||||
@@ -161,9 +161,9 @@ namespace BlackMisc
|
|||||||
{
|
{
|
||||||
return CValueObjectMetaInfoHelper::toMemoizedJson(cast(object), 0);
|
return CValueObjectMetaInfoHelper::toMemoizedJson(cast(object), 0);
|
||||||
}
|
}
|
||||||
virtual void convertFromMemoizedJson(const QJsonObject &json, void *object) const override
|
virtual void convertFromMemoizedJson(const QJsonObject &json, void *object, bool allowFallbackToJson) const override
|
||||||
{
|
{
|
||||||
CValueObjectMetaInfoHelper::convertFromMemoizedJson(json, cast(object), 0);
|
CValueObjectMetaInfoHelper::convertFromMemoizedJson(json, cast(object), allowFallbackToJson, 0);
|
||||||
}
|
}
|
||||||
virtual void unmarshall(const QDBusArgument &arg, void *object) const override
|
virtual void unmarshall(const QDBusArgument &arg, void *object) const override
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user