diff --git a/src/blackmisc/aviation/aircraftcategory.h b/src/blackmisc/aviation/aircraftcategory.h index b0cb60f19..769021ce6 100644 --- a/src/blackmisc/aviation/aircraftcategory.h +++ b/src/blackmisc/aviation/aircraftcategory.h @@ -21,9 +21,9 @@ #include "blackmisc/blackmiscexport.h" #include -#include -#include +#include #include +#include namespace BlackMisc { @@ -150,6 +150,10 @@ namespace BlackMisc BLACK_METAMEMBER(assignable) ); }; + + //! Category/id map + using AircraftCategoryIdMap = QMap; + } // namespace } // namespace diff --git a/src/blackmisc/db/datastoreobjectlist.cpp b/src/blackmisc/db/datastoreobjectlist.cpp index a29cfd9c1..15bb48fc8 100644 --- a/src/blackmisc/db/datastoreobjectlist.cpp +++ b/src/blackmisc/db/datastoreobjectlist.cpp @@ -119,6 +119,18 @@ namespace BlackMisc return keys; } + template + QMap IDatastoreObjectList::toDbKeyValueMap() const + { + QMap map; + for (const OBJ &obj : ITimestampObjectList::container()) + { + if (!obj.hasValidDbKey()) { continue; } + map.insert(obj.getDbKey(), obj); + } + return map; + } + template QSet IDatastoreObjectList::toDbKeyStringSet() const { diff --git a/src/blackmisc/db/datastoreobjectlist.h b/src/blackmisc/db/datastoreobjectlist.h index d41a470e4..f0ac6566d 100644 --- a/src/blackmisc/db/datastoreobjectlist.h +++ b/src/blackmisc/db/datastoreobjectlist.h @@ -16,6 +16,7 @@ #include "blackmisc/jsonexception.h" #include #include +#include #include namespace BlackMisc @@ -48,6 +49,9 @@ namespace BlackMisc //! All keys as set QSet toDbKeySet() const; + //! As map with DB key/object + QMap toDbKeyValueMap() const; + //! All keys as string set (also integer keys will be converted to string) QSet toDbKeyStringSet() const; diff --git a/src/blackmisc/simulation/aircraftmodel.cpp b/src/blackmisc/simulation/aircraftmodel.cpp index 6f4bcfc7e..181675a8a 100644 --- a/src/blackmisc/simulation/aircraftmodel.cpp +++ b/src/blackmisc/simulation/aircraftmodel.cpp @@ -961,7 +961,7 @@ namespace BlackMisc CAircraftModel CAircraftModel::fromDatabaseJsonCaching( const QJsonObject &json, - AircraftIcaoIdMap &aircraftIcaos, LiveryIdMap &liveries, DistributorIdMap &distributors, + AircraftIcaoIdMap &aircraftIcaos, const AircraftCategoryIdMap &categories, LiveryIdMap &liveries, DistributorIdMap &distributors, const QString &prefix) { static const QString prefixAircraftIcao("ac_"); @@ -987,11 +987,20 @@ namespace BlackMisc distributors[idDistributor] : CDistributor::fromDatabaseJson(json, prefixDistributor)); - 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 (!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 if (!cachedAircraftIcao && aircraftIcao.isLoadedFromDb()) { aircraftIcaos[aircraftIcao.getDbKey()] = aircraftIcao; } if (!cachedLivery && livery.isLoadedFromDb()) { liveries[livery.getDbKey()] = livery; } diff --git a/src/blackmisc/simulation/aircraftmodel.h b/src/blackmisc/simulation/aircraftmodel.h index d067abebf..f7328b67a 100644 --- a/src/blackmisc/simulation/aircraftmodel.h +++ b/src/blackmisc/simulation/aircraftmodel.h @@ -503,7 +503,7 @@ namespace BlackMisc static CAircraftModel fromDatabaseJson(const QJsonObject &json, const QString &prefix = QString("mod_")); //! 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 static const QString &liveryStringPrefix(); diff --git a/src/blackmisc/simulation/aircraftmodellist.cpp b/src/blackmisc/simulation/aircraftmodellist.cpp index 284bd1830..4386ef540 100644 --- a/src/blackmisc/simulation/aircraftmodellist.cpp +++ b/src/blackmisc/simulation/aircraftmodellist.cpp @@ -10,7 +10,6 @@ #include "blackmisc/simulation/aircraftmodellist.h" #include "blackmisc/simulation/matchingutils.h" #include "blackmisc/aviation/callsign.h" -#include "blackmisc/aviation/liverylist.h" #include "blackmisc/math/mathutils.h" #include "blackmisc/compare.h" #include "blackmisc/iterator.h" @@ -1507,16 +1506,23 @@ namespace BlackMisc 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; - LiveryIdMap liveries; - DistributorIdMap distributors; + AircraftIcaoIdMap aircraftIcaosMap = icaos.toDbKeyValueMap(); + LiveryIdMap liveriesMap = liveries.toDbKeyValueMap(); + DistributorIdMap distributorsMap = distributors.toDbKeyValueMap(); + const AircraftCategoryIdMap categoriesMap = categories.toDbKeyValueMap(); CAircraftModelList models; 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; } diff --git a/src/blackmisc/simulation/aircraftmodellist.h b/src/blackmisc/simulation/aircraftmodellist.h index 0c6c34791..07352d2fa 100644 --- a/src/blackmisc/simulation/aircraftmodellist.h +++ b/src/blackmisc/simulation/aircraftmodellist.h @@ -17,6 +17,8 @@ #include "blackmisc/simulation/simulatorinfo.h" #include "blackmisc/aviation/aircrafticaocodelist.h" #include "blackmisc/aviation/airlineicaocodelist.h" +#include "blackmisc/aviation/aircraftcategorylist.h" +#include "blackmisc/aviation/liverylist.h" #include "blackmisc/aviation/callsignobjectlist.h" #include "blackmisc/db/datastoreobjectlist.h" #include "blackmisc/blackmiscexport.h" @@ -462,7 +464,11 @@ namespace BlackMisc QString htmlStatistics(bool aircraftStats, bool airlineStats) const; //! 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