From 5d39c906e480714341e556914a549dfdd02d2fd7 Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Sun, 17 Apr 2016 19:08:44 +0200 Subject: [PATCH] refs #640, support for simulator in distributor * changed backend (JSON) and added support for simulator data * get distributors by simulator * renamed to setSimulator / getSimulator --- src/blackgui/editors/modelmappingform.cpp | 4 +- .../editors/modelmappingmodifyform.cpp | 2 +- src/blackgui/models/aircraftmodelfilter.cpp | 2 +- src/blackgui/models/distributorlistmodel.cpp | 1 + src/blackmisc/simulation/aircraftmodel.cpp | 25 +++++------- src/blackmisc/simulation/aircraftmodel.h | 6 +-- .../simulation/aircraftmodellist.cpp | 22 +++++++++-- src/blackmisc/simulation/aircraftmodellist.h | 5 ++- src/blackmisc/simulation/distributor.cpp | 38 ++++++++++++------- src/blackmisc/simulation/distributor.h | 31 +++++++++++---- src/blackmisc/simulation/distributorlist.cpp | 13 +++++++ src/blackmisc/simulation/distributorlist.h | 5 +++ .../fscommon/aircraftcfgentrieslist.cpp | 2 +- .../simulation/fscommon/vpilotmodelrule.cpp | 2 +- src/blackmisc/simulation/simulatorinfo.cpp | 12 ++++++ src/blackmisc/simulation/simulatorinfo.h | 3 ++ .../xplane/aircraftmodelloaderxplane.cpp | 4 +- 17 files changed, 125 insertions(+), 52 deletions(-) diff --git a/src/blackgui/editors/modelmappingform.cpp b/src/blackgui/editors/modelmappingform.cpp index 623fafc67..664fcbbc5 100644 --- a/src/blackgui/editors/modelmappingform.cpp +++ b/src/blackgui/editors/modelmappingform.cpp @@ -37,7 +37,7 @@ namespace BlackGui BlackMisc::Simulation::CAircraftModel CModelMappingForm::getValue() const { CAircraftModel model(m_originalModel); - model.setSimulatorInfo(this->ui->selector_Simulator->getValue()); + model.setSimulator(this->ui->selector_Simulator->getValue()); model.setDescription(this->ui->le_Description->text()); model.setModelString(this->ui->le_ModelKey->text()); model.setName(this->ui->le_Name->text()); @@ -73,7 +73,7 @@ namespace BlackGui ui->le_Description->setText(model.getDescription()); ui->le_Name->setText(model.getName()); ui->selector_ModelMode->setValue(model.getModelMode()); - ui->selector_Simulator->setValue(model.getSimulatorInfo()); + ui->selector_Simulator->setValue(model.getSimulator()); m_originalModel = model; } diff --git a/src/blackgui/editors/modelmappingmodifyform.cpp b/src/blackgui/editors/modelmappingmodifyform.cpp index 0a45f5ee0..ff4affabf 100644 --- a/src/blackgui/editors/modelmappingmodifyform.cpp +++ b/src/blackgui/editors/modelmappingmodifyform.cpp @@ -69,7 +69,7 @@ namespace BlackGui { this->ui->le_Description->setText(model.getDescription()); this->ui->le_Name->setText(model.getName()); - this->ui->frp_SimulatorSelector->setValue(model.getSimulatorInfo()); + this->ui->frp_SimulatorSelector->setValue(model.getSimulator()); this->ui->frp_IncludeSelector->setValue(model); } diff --git a/src/blackgui/models/aircraftmodelfilter.cpp b/src/blackgui/models/aircraftmodelfilter.cpp index 81b65cc80..3f923e61d 100644 --- a/src/blackgui/models/aircraftmodelfilter.cpp +++ b/src/blackgui/models/aircraftmodelfilter.cpp @@ -40,7 +40,7 @@ namespace BlackGui { if (!m_simulatorInfo.isAllSimulators()) { - if (!this->m_simulatorInfo.matchesAny(model.getSimulatorInfo())) { continue; } + if (!this->m_simulatorInfo.matchesAny(model.getSimulator())) { continue; } } if (!this->m_modelKey.isEmpty()) diff --git a/src/blackgui/models/distributorlistmodel.cpp b/src/blackgui/models/distributorlistmodel.cpp index 61f6f5427..c1110a1c9 100644 --- a/src/blackgui/models/distributorlistmodel.cpp +++ b/src/blackgui/models/distributorlistmodel.cpp @@ -43,6 +43,7 @@ namespace BlackGui this->m_columns.addColumn(CColumn::standardString("description", CDistributor::IndexDescription)); this->m_columns.addColumn(CColumn::standardString("alias1", CDistributor::IndexAlias1)); this->m_columns.addColumn(CColumn::standardString("alias2", CDistributor::IndexAlias2)); + this->m_columns.addColumn(CColumn::standardString("sim.", "simulator", { CDistributor::IndexSimulator, CSimulatorInfo::IndexString})); this->m_columns.addColumn(CColumn::standardString("changed", CDistributor::IndexUtcTimestampFormattedYmdhms)); // default sort order diff --git a/src/blackmisc/simulation/aircraftmodel.cpp b/src/blackmisc/simulation/aircraftmodel.cpp index f81eaa63b..9378b51ed 100644 --- a/src/blackmisc/simulation/aircraftmodel.cpp +++ b/src/blackmisc/simulation/aircraftmodel.cpp @@ -37,7 +37,7 @@ namespace BlackMisc m_aircraftIcao(icao), m_livery(livery), m_modelString(model.trimmed().toUpper()), m_description(description.trimmed()), m_modelType(type) {} - CAircraftModel::CAircraftModel(const QString &model, CAircraftModel::ModelType type, CSimulatorInfo &simulator, const QString &name, const QString &description, const CAircraftIcaoCode &icao, const CLivery &livery) : + CAircraftModel::CAircraftModel(const QString &model, CAircraftModel::ModelType type, const CSimulatorInfo &simulator, const QString &name, const QString &description, const CAircraftIcaoCode &icao, const CLivery &livery) : m_aircraftIcao(icao), m_livery(livery), m_simulator(simulator), m_modelString(model.trimmed().toUpper()), m_name(name.trimmed()), m_description(description.trimmed()), m_modelType(type) { } @@ -69,7 +69,7 @@ namespace BlackMisc obj.insert("mode", QJsonValue(getModelModeAsString().left(1).toUpper())); // sims - const CSimulatorInfo sim(getSimulatorInfo()); + const CSimulatorInfo sim(getSimulator()); QString flag = CDatastoreUtility::boolToDbYN(sim.fsx()); obj.insert("simfsx", QJsonValue(flag)); flag = CDatastoreUtility::boolToDbYN(sim.p3d()); @@ -223,7 +223,7 @@ namespace BlackMisc return this->m_description.compare(compareValue.getDescription(), Qt::CaseInsensitive); case IndexSimulatorInfoAsString: case IndexSimulatorInfo: - return this->m_simulator.comparePropertyByIndex(compareValue.getSimulatorInfo(), index.copyFrontRemoved()); + return this->m_simulator.comparePropertyByIndex(compareValue.getSimulator(), index.copyFrontRemoved()); case IndexName: return this->m_name.compare(compareValue.getName(), Qt::CaseInsensitive); case IndexCallsign: @@ -339,7 +339,7 @@ namespace BlackMisc bool CAircraftModel::matchesSimulator(const CSimulatorInfo &simulator) const { - return (static_cast(simulator.getSimulator()) & static_cast(this->getSimulatorInfo().getSimulator())) > 0; + return (static_cast(simulator.getSimulator()) & static_cast(this->getSimulator().getSimulator())) > 0; } CPixmap CAircraftModel::loadIcon(CStatusMessage &success) const @@ -383,11 +383,11 @@ namespace BlackMisc if (this->m_modelMode == Undefined) { this->m_modelType = otherModel.getModelType(); } if (this->m_simulator.isUnspecified()) { - this->setSimulatorInfo(otherModel.getSimulatorInfo()); + this->setSimulator(otherModel.getSimulator()); } else { - this->m_simulator.add(otherModel.getSimulatorInfo()); + this->m_simulator.add(otherModel.getSimulator()); } this->m_livery.updateMissingParts(otherModel.getLivery()); @@ -487,16 +487,11 @@ namespace BlackMisc QString modelName(json.value(prefix + "name").toString()); QString modelMode(json.value(prefix + "mode").toString()); - bool fsx = CDatastoreUtility::dbBoolStringToBool(json.value(prefix + "simfsx").toString()); - bool fs9 = CDatastoreUtility::dbBoolStringToBool(json.value(prefix + "simfs9").toString()); - bool xp = CDatastoreUtility::dbBoolStringToBool(json.value(prefix + "simxplane").toString()); - bool p3d = CDatastoreUtility::dbBoolStringToBool(json.value(prefix + "simp3d").toString()); + const CSimulatorInfo simInfo = CSimulatorInfo::fromDatabaseJson(json, prefix); + const CAircraftIcaoCode aircraftIcao(CAircraftIcaoCode::fromDatabaseJson(json, "ac_")); + const CLivery livery(CLivery::fromDatabaseJson(json, "liv_")); + const CDistributor distributor(CDistributor::fromDatabaseJson(json, "dist_")); - CAircraftIcaoCode aircraftIcao(CAircraftIcaoCode::fromDatabaseJson(json, "ac_")); - CLivery livery(CLivery::fromDatabaseJson(json, "liv_")); - CDistributor distributor(CDistributor::fromDatabaseJson(json, "dist_")); - - CSimulatorInfo simInfo(fsx, fs9, xp, p3d); CAircraftModel model( modelString, CAircraftModel::TypeDatabaseEntry, simInfo, modelName, modelDescription, aircraftIcao, livery ); diff --git a/src/blackmisc/simulation/aircraftmodel.h b/src/blackmisc/simulation/aircraftmodel.h index f7edd60ca..13c7745fd 100644 --- a/src/blackmisc/simulation/aircraftmodel.h +++ b/src/blackmisc/simulation/aircraftmodel.h @@ -95,7 +95,7 @@ namespace BlackMisc CAircraftModel(const QString &model, ModelType type, const QString &description, const BlackMisc::Aviation::CAircraftIcaoCode &icao, const BlackMisc::Aviation::CLivery &livery = BlackMisc::Aviation::CLivery()); //! Constructor. - CAircraftModel(const QString &model, ModelType type, CSimulatorInfo &simulator, const QString &name, const QString &description, const BlackMisc::Aviation::CAircraftIcaoCode &icao, const BlackMisc::Aviation::CLivery &livery = BlackMisc::Aviation::CLivery()); + CAircraftModel(const QString &model, ModelType type, const CSimulatorInfo &simulator, const QString &name, const QString &description, const BlackMisc::Aviation::CAircraftIcaoCode &icao, const BlackMisc::Aviation::CLivery &livery = BlackMisc::Aviation::CLivery()); //! \copydoc BlackMisc::Mixin::Index::propertyByIndex CVariant propertyByIndex(const BlackMisc::CPropertyIndex &index) const; @@ -227,10 +227,10 @@ namespace BlackMisc void setModelModeAsString(const QString &mode); //! Simulator info - CSimulatorInfo getSimulatorInfo() const { return this->m_simulator; } + CSimulatorInfo getSimulator() const { return this->m_simulator; } //! Set simulator info - void setSimulatorInfo(const CSimulatorInfo &simulator) { this->m_simulator = simulator; } + void setSimulator(const CSimulatorInfo &simulator) { this->m_simulator = simulator; } //! Matches given simulator? bool matchesSimulator(const CSimulatorInfo &simulator) const; diff --git a/src/blackmisc/simulation/aircraftmodellist.cpp b/src/blackmisc/simulation/aircraftmodellist.cpp index 0bf5da351..8389aed66 100644 --- a/src/blackmisc/simulation/aircraftmodellist.cpp +++ b/src/blackmisc/simulation/aircraftmodellist.cpp @@ -241,8 +241,8 @@ namespace BlackMisc const CSimulatorInfo::Simulator s = info.getSimulator(); for (CAircraftModel &model : (*this)) { - if (model.getSimulatorInfo().getSimulator() == s) { continue; } - model.setSimulatorInfo(info); + if (model.getSimulator().getSimulator() == s) { continue; } + model.setSimulator(info); c++; } return c; @@ -253,7 +253,7 @@ namespace BlackMisc CSimulatorInfo::Simulator s = CSimulatorInfo::None; for (const CAircraftModel &model : (*this)) { - s |= model.getSimulatorInfo().getSimulator(); + s |= model.getSimulator().getSimulator(); if (s == CSimulatorInfo::All) { break; } } return CSimulatorInfo(s); @@ -403,7 +403,7 @@ namespace BlackMisc CCountPerSimulator count; for (const CAircraftModel &model : (*this)) { - count.increaseSimulatorCounts(model.getSimulatorInfo()); + count.increaseSimulatorCounts(model.getSimulator()); } return count; } @@ -439,6 +439,20 @@ namespace BlackMisc } } + CDistributorList CAircraftModelList::getDistributors(bool onlyDbDistributors) const + { + if (this->isEmpty()) { return CDistributorList(); } + CDistributorList distributors; + for (const CAircraftModel &model : *this) + { + const CDistributor d(model.getDistributor()); + if (onlyDbDistributors && !d.hasValidDbKey()) { continue; } + if (distributors.contains(d)) { continue; } + distributors.push_back(d); + } + return distributors; + } + void CAircraftModelList::updateAircraftIcao(const CAircraftIcaoCode &icao) { for (CAircraftModel &model : *this) diff --git a/src/blackmisc/simulation/aircraftmodellist.h b/src/blackmisc/simulation/aircraftmodellist.h index a1478f471..29b6fc5c9 100644 --- a/src/blackmisc/simulation/aircraftmodellist.h +++ b/src/blackmisc/simulation/aircraftmodellist.h @@ -153,9 +153,12 @@ namespace BlackMisc //! Which simulator(s) have the most entries CSimulatorInfo simulatorsWithMaxEntries() const; - //! Update distributors + //! Update distributor, all models in list are set to given distributor void updateDistributor(const CDistributor &distributor); + //! All distributors used with models of this list + CDistributorList getDistributors(bool onlyDbDistributors = true) const; + //! Update aircraft ICAO void updateAircraftIcao(const BlackMisc::Aviation::CAircraftIcaoCode &icao); diff --git a/src/blackmisc/simulation/distributor.cpp b/src/blackmisc/simulation/distributor.cpp index 1ef6df26f..baa2075f1 100644 --- a/src/blackmisc/simulation/distributor.cpp +++ b/src/blackmisc/simulation/distributor.cpp @@ -21,8 +21,8 @@ namespace BlackMisc this->setDbKey(key); } - CDistributor::CDistributor(const QString &id, const QString &description, const QString &alias1, const QString &alias2) : - m_description(description), m_alias1(alias1.trimmed().toUpper()), m_alias2(alias2.trimmed().toUpper()) + CDistributor::CDistributor(const QString &id, const QString &description, const QString &alias1, const QString &alias2, const CSimulatorInfo &simulator) : + m_description(description), m_alias1(alias1.trimmed().toUpper()), m_alias2(alias2.trimmed().toUpper()), m_simulator(simulator) { this->setDbKey(id); } @@ -41,16 +41,24 @@ namespace BlackMisc return (distributor.hasAlias2() && this->matchesKeyOrAlias(distributor.getAlias2())); } + bool CDistributor::matchesSimulator(const CSimulatorInfo &simulator) const + { + return this->m_simulator.matchesAny(simulator); + } + CVariant CDistributor::propertyByIndex(const CPropertyIndex &index) const { if (index.isMyself()) { return CVariant::from(*this); } if (IDatastoreObjectWithStringKey::canHandleIndex(index)) { return IDatastoreObjectWithStringKey::propertyByIndex(index); } + if (IOrderable::canHandleIndex(index)) { return IOrderable::propertyByIndex(index); } + ColumnIndex i = index.frontCasted(); switch (i) { case IndexAlias1: return CVariant::from(this->m_alias1); case IndexAlias2: return CVariant::from(this->m_alias2); case IndexDescription: return CVariant::from(this->m_description); + case IndexSimulator: return m_simulator.propertyByIndex(index.copyFrontRemoved()); default: return CValueObject::propertyByIndex(index); } @@ -60,6 +68,8 @@ namespace BlackMisc { if (index.isMyself()) { (*this) = variant.to(); return; } if (IDatastoreObjectWithStringKey::canHandleIndex(index)) { IDatastoreObjectWithStringKey::setPropertyByIndex(variant, index); return; } + if (IOrderable::canHandleIndex(index)) { IOrderable::setPropertyByIndex(variant, index); return; } + ColumnIndex i = index.frontCasted(); switch (i) { @@ -72,6 +82,9 @@ namespace BlackMisc case IndexDescription: this->m_description = variant.value(); break; + case IndexSimulator: + this->m_simulator.setPropertyByIndex(variant, index.copyFrontRemoved()); + break; default: CValueObject::setPropertyByIndex(variant, index); break; @@ -81,15 +94,14 @@ namespace BlackMisc int CDistributor::comparePropertyByIndex(const CDistributor &compareValue, const CPropertyIndex &index) const { if (IDatastoreObjectWithStringKey::canHandleIndex(index)) { return IDatastoreObjectWithStringKey::comparePropertyByIndex(compareValue, index); } + if (IOrderable::canHandleIndex(index)) { return IOrderable::comparePropertyByIndex(compareValue, index); } ColumnIndex i = index.frontCasted(); switch (i) { - case IndexAlias1: - return this->m_alias1.compare(compareValue.m_alias1, Qt::CaseInsensitive); - case IndexAlias2: - return this->m_alias2.compare(compareValue.m_alias2, Qt::CaseInsensitive); - case IndexDescription: - return this->m_description.compare(compareValue.getDescription(), Qt::CaseInsensitive); + case IndexAlias1: return this->m_alias1.compare(compareValue.m_alias1, Qt::CaseInsensitive); + case IndexAlias2: return this->m_alias2.compare(compareValue.m_alias2, Qt::CaseInsensitive); + case IndexDescription: return this->m_description.compare(compareValue.getDescription(), Qt::CaseInsensitive); + case IndexSimulator: return this->m_simulator.comparePropertyByIndex(compareValue.m_simulator, index.copyFrontRemoved()); default: break; } @@ -145,7 +157,7 @@ namespace BlackMisc return CDistributor(); } - QString description(json.value(prefix + "description").toString()); + const QString description(json.value(prefix + "description").toString()); if (description.isEmpty()) { // stub, only key, maybe also timestamps @@ -154,13 +166,13 @@ namespace BlackMisc return distributorStub; } - QString alias1(json.value(prefix + "alias1").toString()); - QString alias2(json.value(prefix + "alias2").toString()); + const CSimulatorInfo simulator = CSimulatorInfo::fromDatabaseJson(json, prefix); + const QString alias1(json.value(prefix + "alias1").toString()); + const QString alias2(json.value(prefix + "alias2").toString()); Q_ASSERT_X(!description.isEmpty(), Q_FUNC_INFO, "Missing description"); - CDistributor distributor("", description, alias1, alias2); + CDistributor distributor("", description, alias1, alias2, simulator); distributor.setKeyAndTimestampFromDatabaseJson(json, prefix); return distributor; } - } // namespace } // namespace diff --git a/src/blackmisc/simulation/distributor.h b/src/blackmisc/simulation/distributor.h index 8a7947d2d..cb0510a9a 100644 --- a/src/blackmisc/simulation/distributor.h +++ b/src/blackmisc/simulation/distributor.h @@ -13,7 +13,9 @@ #define BLACKMISC_SIMULATION_DISTRIBUTOR_H #include "blackmisc/blackmiscexport.h" +#include "blackmisc/simulation/simulatorinfo.h" #include "blackmisc/valueobject.h" +#include "blackmisc/orderable.h" #include "blackmisc/datastore.h" #include "blackmisc/statusmessagelist.h" #include @@ -25,7 +27,8 @@ namespace BlackMisc //! Value object encapsulating information of software distributor. class BLACKMISC_EXPORT CDistributor : public BlackMisc::CValueObject, - public BlackMisc::IDatastoreObjectWithStringKey + public BlackMisc::IDatastoreObjectWithStringKey, + public BlackMisc::IOrderable { public: //! Property indexes @@ -33,7 +36,8 @@ namespace BlackMisc { IndexDescription = CPropertyIndex::GlobalIndexCDistributor, IndexAlias1, - IndexAlias2 + IndexAlias2, + IndexSimulator }; //! Default constructor. @@ -43,7 +47,7 @@ namespace BlackMisc CDistributor(const QString &key); //! Constructor - CDistributor(const QString &id, const QString &description, const QString &alias1, const QString &alias2); + CDistributor(const QString &id, const QString &description, const QString &alias1, const QString &alias2, const BlackMisc::Simulation::CSimulatorInfo &simulator = BlackMisc::Simulation::CSimulatorInfo()); //! Get description const QString &getDescription() const { return this->m_description;} @@ -72,12 +76,21 @@ namespace BlackMisc //! Alias 2? bool hasAlias2() const { return !this->m_alias2.isEmpty(); } + //! Simulator + const BlackMisc::Simulation::CSimulatorInfo &getSimulator() const { return m_simulator; } + + //! Set simulator + void setSimulator(const BlackMisc::Simulation::CSimulatorInfo &simulator) { m_simulator = simulator; } + //! Matches key or alias bool matchesKeyOrAlias(const QString &keyOrAlias) const; //! Matches key or alias bool matchesKeyOrAlias(const CDistributor &distributor) const; + //! Matches simulator + bool matchesSimulator(const CSimulatorInfo &simulator) const; + //! \copydoc BlackMisc::Mixin::Index::propertyByIndex CVariant propertyByIndex(const BlackMisc::CPropertyIndex &index) const; @@ -103,20 +116,22 @@ namespace BlackMisc static CDistributor fromDatabaseJson(const QJsonObject &json, const QString &prefix = QString()); private: - QString m_description; //!< description - QString m_alias1; //!< alias name - QString m_alias2; //!< alias name + QString m_description; //!< description + QString m_alias1; //!< alias name + QString m_alias2; //!< alias name + BlackMisc::Simulation::CSimulatorInfo m_simulator; //!< simulator BLACK_METACLASS( CDistributor, BLACK_METAMEMBER(dbKey, 0, CaseInsensitiveComparison), BLACK_METAMEMBER(timestampMSecsSinceEpoch), + BLACK_METAMEMBER(order), BLACK_METAMEMBER(description), BLACK_METAMEMBER(alias1, 0, CaseInsensitiveComparison), - BLACK_METAMEMBER(alias2, 0, CaseInsensitiveComparison) + BLACK_METAMEMBER(alias2, 0, CaseInsensitiveComparison), + BLACK_METAMEMBER(simulator) ); }; - } // namespace } // namespace diff --git a/src/blackmisc/simulation/distributorlist.cpp b/src/blackmisc/simulation/distributorlist.cpp index 3c864820c..986b9e4fb 100644 --- a/src/blackmisc/simulation/distributorlist.cpp +++ b/src/blackmisc/simulation/distributorlist.cpp @@ -74,5 +74,18 @@ namespace BlackMisc return sl; } + CDistributorList CDistributorList::matchesSimulator(const BlackMisc::Simulation::CSimulatorInfo &simulator) const + { + if (this->isEmpty()) { return CDistributorList(); } + CDistributorList distributors; + for (const CDistributor &distributor : (*this)) + { + if (distributor.matchesSimulator(simulator)) + { + distributors.push_back(distributor); + } + } + return distributors; + } } // namespace } // namespace diff --git a/src/blackmisc/simulation/distributorlist.h b/src/blackmisc/simulation/distributorlist.h index 608003f44..c207ff339 100644 --- a/src/blackmisc/simulation/distributorlist.h +++ b/src/blackmisc/simulation/distributorlist.h @@ -15,6 +15,7 @@ #include "blackmisc/blackmiscexport.h" #include "blackmisc/simulation/distributor.h" #include "blackmisc/datastoreobjectlist.h" +#include "blackmisc/orderablelist.h" #include "blackmisc/collection.h" #include "blackmisc/sequence.h" #include @@ -29,6 +30,7 @@ namespace BlackMisc class BLACKMISC_EXPORT CDistributorList : public BlackMisc::CSequence, public BlackMisc::IDatastoreObjectList, + public BlackMisc::IOrderableList, public BlackMisc::Mixin::MetaType { public: @@ -51,6 +53,9 @@ namespace BlackMisc //! All DB keys and aliases QStringList getDbKeysAndAliases(bool sort) const; + + //! Find for given simulator + CDistributorList matchesSimulator(const BlackMisc::Simulation::CSimulatorInfo &simulator) const; }; } //namespace } // namespace diff --git a/src/blackmisc/simulation/fscommon/aircraftcfgentrieslist.cpp b/src/blackmisc/simulation/fscommon/aircraftcfgentrieslist.cpp index ae16478b4..745fece59 100644 --- a/src/blackmisc/simulation/fscommon/aircraftcfgentrieslist.cpp +++ b/src/blackmisc/simulation/fscommon/aircraftcfgentrieslist.cpp @@ -72,7 +72,7 @@ namespace BlackMisc for (const CAircraftCfgEntries &entries : (*this)) { CAircraftModel m(entries.toAircraftModel()); - m.setSimulatorInfo(simInfo); + m.setSimulator(simInfo); ml.push_back(m); } return ml; diff --git a/src/blackmisc/simulation/fscommon/vpilotmodelrule.cpp b/src/blackmisc/simulation/fscommon/vpilotmodelrule.cpp index da6c9b665..ae8760b5d 100644 --- a/src/blackmisc/simulation/fscommon/vpilotmodelrule.cpp +++ b/src/blackmisc/simulation/fscommon/vpilotmodelrule.cpp @@ -112,7 +112,7 @@ namespace BlackMisc const CSimulatorInfo sim(CSimulatorInfo::FSX_P3D); model.setMSecsSinceEpoch(m_timestampMSecsSinceEpoch); model.setDistributor(distributor); - model.setSimulatorInfo(sim); + model.setSimulator(sim); return model; } diff --git a/src/blackmisc/simulation/simulatorinfo.cpp b/src/blackmisc/simulation/simulatorinfo.cpp index a738cd38d..f42b8b1e8 100644 --- a/src/blackmisc/simulation/simulatorinfo.cpp +++ b/src/blackmisc/simulation/simulatorinfo.cpp @@ -10,6 +10,7 @@ #include "simulatorinfo.h" #include "buildconfig.h" #include "blackmisc/comparefunctions.h" +#include "blackmisc/datastoreutility.h" #include "blackmisc/simulation/fscommon/fscommonutil.h" #include @@ -204,6 +205,17 @@ namespace BlackMisc return sim; } + CSimulatorInfo CSimulatorInfo::fromDatabaseJson(const QJsonObject &json, const QString prefix) + { + bool fsx = CDatastoreUtility::dbBoolStringToBool(json.value(prefix + "simfsx").toString()); + bool fs9 = CDatastoreUtility::dbBoolStringToBool(json.value(prefix + "simfs9").toString()); + bool xp = CDatastoreUtility::dbBoolStringToBool(json.value(prefix + "simxplane").toString()); + bool p3d = CDatastoreUtility::dbBoolStringToBool(json.value(prefix + "simp3d").toString()); + + const CSimulatorInfo simInfo(fsx, fs9, xp, p3d); + return simInfo; + } + CCountPerSimulator::CCountPerSimulator() { this->m_counts.reserve(CSimulatorInfo::NumberOfSimulators + 1); diff --git a/src/blackmisc/simulation/simulatorinfo.h b/src/blackmisc/simulation/simulatorinfo.h index e043d49d3..d1387cf5b 100644 --- a/src/blackmisc/simulation/simulatorinfo.h +++ b/src/blackmisc/simulation/simulatorinfo.h @@ -146,6 +146,9 @@ namespace BlackMisc //! Locally installed simulators static const CSimulatorInfo getLocallyInstalledSimulators(); + //! From database JSON + static CSimulatorInfo fromDatabaseJson(const QJsonObject &json, const QString prefix); + private: int m_simulator = static_cast(None); diff --git a/src/blackmisc/simulation/xplane/aircraftmodelloaderxplane.cpp b/src/blackmisc/simulation/xplane/aircraftmodelloaderxplane.cpp index 98c772e63..c20a8f6b2 100644 --- a/src/blackmisc/simulation/xplane/aircraftmodelloaderxplane.cpp +++ b/src/blackmisc/simulation/xplane/aircraftmodelloaderxplane.cpp @@ -155,7 +155,7 @@ namespace BlackMisc CAircraftModel model; model.setModelType(CAircraftModel::TypeOwnSimulatorModel); - model.setSimulatorInfo(m_simulatorInfo); + model.setSimulator(m_simulatorInfo); model.setFileName(aircraftIt.filePath()); model.setModelString(modelString); @@ -262,7 +262,7 @@ namespace BlackMisc CDistributor distributor(package.name); model.setDistributor(distributor); - model.setSimulatorInfo(m_simulatorInfo); + model.setSimulator(m_simulatorInfo); installedModels.push_back(model); } }