mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-05-06 02:16:04 +08:00
Ref T472, allow to pass already existing values for model parsing
* list to map: toDbKeyValueMap * categories can also be passed, hence the categories can be seen in model views
This commit is contained in:
committed by
Mat Sutcliffe
parent
7a2ed1433d
commit
9cee34f4cc
@@ -21,9 +21,9 @@
|
|||||||
#include "blackmisc/blackmiscexport.h"
|
#include "blackmisc/blackmiscexport.h"
|
||||||
|
|
||||||
#include <QJsonObject>
|
#include <QJsonObject>
|
||||||
#include <QMetaType>
|
#include <QMap>
|
||||||
#include <QString>
|
|
||||||
#include <QStringList>
|
#include <QStringList>
|
||||||
|
#include <QMetaType>
|
||||||
|
|
||||||
namespace BlackMisc
|
namespace BlackMisc
|
||||||
{
|
{
|
||||||
@@ -150,6 +150,10 @@ namespace BlackMisc
|
|||||||
BLACK_METAMEMBER(assignable)
|
BLACK_METAMEMBER(assignable)
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//! Category/id map
|
||||||
|
using AircraftCategoryIdMap = QMap<int, CAircraftCategory>;
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
|
|||||||
@@ -119,6 +119,18 @@ namespace BlackMisc
|
|||||||
return keys;
|
return keys;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <class OBJ, class CONTAINER, typename KEYTYPE>
|
||||||
|
QMap<KEYTYPE, OBJ> IDatastoreObjectList<OBJ, CONTAINER, KEYTYPE>::toDbKeyValueMap() const
|
||||||
|
{
|
||||||
|
QMap<KEYTYPE, OBJ> map;
|
||||||
|
for (const OBJ &obj : ITimestampObjectList<OBJ, CONTAINER>::container())
|
||||||
|
{
|
||||||
|
if (!obj.hasValidDbKey()) { continue; }
|
||||||
|
map.insert(obj.getDbKey(), obj);
|
||||||
|
}
|
||||||
|
return map;
|
||||||
|
}
|
||||||
|
|
||||||
template<class OBJ, class CONTAINER, typename KEYTYPE>
|
template<class OBJ, class CONTAINER, typename KEYTYPE>
|
||||||
QSet<QString> IDatastoreObjectList<OBJ, CONTAINER, KEYTYPE>::toDbKeyStringSet() const
|
QSet<QString> IDatastoreObjectList<OBJ, CONTAINER, KEYTYPE>::toDbKeyStringSet() const
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -16,6 +16,7 @@
|
|||||||
#include "blackmisc/jsonexception.h"
|
#include "blackmisc/jsonexception.h"
|
||||||
#include <QJsonArray>
|
#include <QJsonArray>
|
||||||
#include <QSet>
|
#include <QSet>
|
||||||
|
#include <QMap>
|
||||||
#include <QString>
|
#include <QString>
|
||||||
|
|
||||||
namespace BlackMisc
|
namespace BlackMisc
|
||||||
@@ -48,6 +49,9 @@ namespace BlackMisc
|
|||||||
//! All keys as set
|
//! All keys as set
|
||||||
QSet<KEYTYPE> toDbKeySet() const;
|
QSet<KEYTYPE> toDbKeySet() const;
|
||||||
|
|
||||||
|
//! As map with DB key/object
|
||||||
|
QMap<KEYTYPE, OBJ> toDbKeyValueMap() const;
|
||||||
|
|
||||||
//! All keys as string set (also integer keys will be converted to string)
|
//! All keys as string set (also integer keys will be converted to string)
|
||||||
QSet<QString> toDbKeyStringSet() const;
|
QSet<QString> toDbKeyStringSet() const;
|
||||||
|
|
||||||
|
|||||||
@@ -961,7 +961,7 @@ namespace BlackMisc
|
|||||||
|
|
||||||
CAircraftModel CAircraftModel::fromDatabaseJsonCaching(
|
CAircraftModel CAircraftModel::fromDatabaseJsonCaching(
|
||||||
const QJsonObject &json,
|
const QJsonObject &json,
|
||||||
AircraftIcaoIdMap &aircraftIcaos, LiveryIdMap &liveries, DistributorIdMap &distributors,
|
AircraftIcaoIdMap &aircraftIcaos, const AircraftCategoryIdMap &categories, LiveryIdMap &liveries, DistributorIdMap &distributors,
|
||||||
const QString &prefix)
|
const QString &prefix)
|
||||||
{
|
{
|
||||||
static const QString prefixAircraftIcao("ac_");
|
static const QString prefixAircraftIcao("ac_");
|
||||||
@@ -987,11 +987,20 @@ namespace BlackMisc
|
|||||||
distributors[idDistributor] :
|
distributors[idDistributor] :
|
||||||
CDistributor::fromDatabaseJson(json, prefixDistributor));
|
CDistributor::fromDatabaseJson(json, prefixDistributor));
|
||||||
|
|
||||||
if (!aircraftIcao.isLoadedFromDb() && idAircraftIcao >= 0) { aircraftIcao.setDbKey(idAircraftIcao); }
|
|
||||||
if (!aircraftIcao.isLoadedFromDb() && idAircraftIcao >= 0) { aircraftIcao.setDbKey(idAircraftIcao); }
|
if (!aircraftIcao.isLoadedFromDb() && idAircraftIcao >= 0) { aircraftIcao.setDbKey(idAircraftIcao); }
|
||||||
if (!livery.isLoadedFromDb() && idLivery >= 0) { livery.setDbKey(idLivery); }
|
if (!livery.isLoadedFromDb() && idLivery >= 0) { livery.setDbKey(idLivery); }
|
||||||
if (!distributor.isLoadedFromDb() && !idDistributor.isEmpty()) { distributor.setDbKey(idDistributor); }
|
if (!distributor.isLoadedFromDb() && !idDistributor.isEmpty()) { distributor.setDbKey(idDistributor); }
|
||||||
|
|
||||||
|
// update category
|
||||||
|
if (!cachedAircraftIcao)
|
||||||
|
{
|
||||||
|
const int catId = aircraftIcao.getCategory().getDbKey();
|
||||||
|
if (catId >= 0 && categories.contains(catId))
|
||||||
|
{
|
||||||
|
aircraftIcao.setCategory(categories[catId]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// store in temp.cache
|
// store in temp.cache
|
||||||
if (!cachedAircraftIcao && aircraftIcao.isLoadedFromDb()) { aircraftIcaos[aircraftIcao.getDbKey()] = aircraftIcao; }
|
if (!cachedAircraftIcao && aircraftIcao.isLoadedFromDb()) { aircraftIcaos[aircraftIcao.getDbKey()] = aircraftIcao; }
|
||||||
if (!cachedLivery && livery.isLoadedFromDb()) { liveries[livery.getDbKey()] = livery; }
|
if (!cachedLivery && livery.isLoadedFromDb()) { liveries[livery.getDbKey()] = livery; }
|
||||||
|
|||||||
@@ -503,7 +503,7 @@ namespace BlackMisc
|
|||||||
static CAircraftModel fromDatabaseJson(const QJsonObject &json, const QString &prefix = QString("mod_"));
|
static CAircraftModel fromDatabaseJson(const QJsonObject &json, const QString &prefix = QString("mod_"));
|
||||||
|
|
||||||
//! From swift DB JSON, caching during this process (faster)
|
//! From swift DB JSON, caching during this process (faster)
|
||||||
static CAircraftModel fromDatabaseJsonCaching(const QJsonObject &json, Aviation::AircraftIcaoIdMap &aircraftIcaos, Aviation::LiveryIdMap &liveries, DistributorIdMap &distributors, const QString &prefix = QString("mod_"));
|
static CAircraftModel fromDatabaseJsonCaching(const QJsonObject &json, Aviation::AircraftIcaoIdMap &aircraftIcaos, const Aviation::AircraftCategoryIdMap &categories, Aviation::LiveryIdMap &liveries, DistributorIdMap &distributors, const QString &prefix = QString("mod_"));
|
||||||
|
|
||||||
//! Livery string prefix
|
//! Livery string prefix
|
||||||
static const QString &liveryStringPrefix();
|
static const QString &liveryStringPrefix();
|
||||||
|
|||||||
@@ -10,7 +10,6 @@
|
|||||||
#include "blackmisc/simulation/aircraftmodellist.h"
|
#include "blackmisc/simulation/aircraftmodellist.h"
|
||||||
#include "blackmisc/simulation/matchingutils.h"
|
#include "blackmisc/simulation/matchingutils.h"
|
||||||
#include "blackmisc/aviation/callsign.h"
|
#include "blackmisc/aviation/callsign.h"
|
||||||
#include "blackmisc/aviation/liverylist.h"
|
|
||||||
#include "blackmisc/math/mathutils.h"
|
#include "blackmisc/math/mathutils.h"
|
||||||
#include "blackmisc/compare.h"
|
#include "blackmisc/compare.h"
|
||||||
#include "blackmisc/iterator.h"
|
#include "blackmisc/iterator.h"
|
||||||
@@ -1507,16 +1506,23 @@ namespace BlackMisc
|
|||||||
return stats;
|
return stats;
|
||||||
}
|
}
|
||||||
|
|
||||||
CAircraftModelList CAircraftModelList::fromDatabaseJsonCaching(const QJsonArray &array)
|
CAircraftModelList CAircraftModelList::fromDatabaseJsonCaching(
|
||||||
|
const QJsonArray &array,
|
||||||
|
const CAircraftIcaoCodeList &icaos,
|
||||||
|
const CAircraftCategoryList &categories,
|
||||||
|
const CLiveryList &liveries,
|
||||||
|
const CDistributorList &distributors
|
||||||
|
)
|
||||||
{
|
{
|
||||||
AircraftIcaoIdMap aircraftIcaos;
|
AircraftIcaoIdMap aircraftIcaosMap = icaos.toDbKeyValueMap();
|
||||||
LiveryIdMap liveries;
|
LiveryIdMap liveriesMap = liveries.toDbKeyValueMap();
|
||||||
DistributorIdMap distributors;
|
DistributorIdMap distributorsMap = distributors.toDbKeyValueMap();
|
||||||
|
const AircraftCategoryIdMap categoriesMap = categories.toDbKeyValueMap();
|
||||||
|
|
||||||
CAircraftModelList models;
|
CAircraftModelList models;
|
||||||
for (const QJsonValue &value : array)
|
for (const QJsonValue &value : array)
|
||||||
{
|
{
|
||||||
models.push_back(CAircraftModel::fromDatabaseJsonCaching(value.toObject(), aircraftIcaos, liveries, distributors));
|
models.push_back(CAircraftModel::fromDatabaseJsonCaching(value.toObject(), aircraftIcaosMap, categoriesMap, liveriesMap, distributorsMap));
|
||||||
}
|
}
|
||||||
return models;
|
return models;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,6 +17,8 @@
|
|||||||
#include "blackmisc/simulation/simulatorinfo.h"
|
#include "blackmisc/simulation/simulatorinfo.h"
|
||||||
#include "blackmisc/aviation/aircrafticaocodelist.h"
|
#include "blackmisc/aviation/aircrafticaocodelist.h"
|
||||||
#include "blackmisc/aviation/airlineicaocodelist.h"
|
#include "blackmisc/aviation/airlineicaocodelist.h"
|
||||||
|
#include "blackmisc/aviation/aircraftcategorylist.h"
|
||||||
|
#include "blackmisc/aviation/liverylist.h"
|
||||||
#include "blackmisc/aviation/callsignobjectlist.h"
|
#include "blackmisc/aviation/callsignobjectlist.h"
|
||||||
#include "blackmisc/db/datastoreobjectlist.h"
|
#include "blackmisc/db/datastoreobjectlist.h"
|
||||||
#include "blackmisc/blackmiscexport.h"
|
#include "blackmisc/blackmiscexport.h"
|
||||||
@@ -462,7 +464,11 @@ namespace BlackMisc
|
|||||||
QString htmlStatistics(bool aircraftStats, bool airlineStats) const;
|
QString htmlStatistics(bool aircraftStats, bool airlineStats) const;
|
||||||
|
|
||||||
//! Newer version
|
//! Newer version
|
||||||
static CAircraftModelList fromDatabaseJsonCaching(const QJsonArray &array);
|
static CAircraftModelList fromDatabaseJsonCaching(const QJsonArray &array,
|
||||||
|
const Aviation::CAircraftIcaoCodeList &aircraftIcaos = {},
|
||||||
|
const Aviation::CAircraftCategoryList &aircraftCategories = {},
|
||||||
|
const Aviation::CLiveryList &liveries = {},
|
||||||
|
const CDistributorList &distributors = {});
|
||||||
};
|
};
|
||||||
|
|
||||||
//! Model per callsign
|
//! Model per callsign
|
||||||
|
|||||||
Reference in New Issue
Block a user