refs #640, support for simulator in distributor

* changed backend (JSON) and added support for simulator data
* get distributors by simulator
* renamed to setSimulator / getSimulator
This commit is contained in:
Klaus Basan
2016-04-17 19:08:44 +02:00
parent b78308b059
commit 5d39c906e4
17 changed files with 125 additions and 52 deletions

View File

@@ -37,7 +37,7 @@ namespace BlackGui
BlackMisc::Simulation::CAircraftModel CModelMappingForm::getValue() const BlackMisc::Simulation::CAircraftModel CModelMappingForm::getValue() const
{ {
CAircraftModel model(m_originalModel); 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.setDescription(this->ui->le_Description->text());
model.setModelString(this->ui->le_ModelKey->text()); model.setModelString(this->ui->le_ModelKey->text());
model.setName(this->ui->le_Name->text()); model.setName(this->ui->le_Name->text());
@@ -73,7 +73,7 @@ namespace BlackGui
ui->le_Description->setText(model.getDescription()); ui->le_Description->setText(model.getDescription());
ui->le_Name->setText(model.getName()); ui->le_Name->setText(model.getName());
ui->selector_ModelMode->setValue(model.getModelMode()); ui->selector_ModelMode->setValue(model.getModelMode());
ui->selector_Simulator->setValue(model.getSimulatorInfo()); ui->selector_Simulator->setValue(model.getSimulator());
m_originalModel = model; m_originalModel = model;
} }

View File

@@ -69,7 +69,7 @@ namespace BlackGui
{ {
this->ui->le_Description->setText(model.getDescription()); this->ui->le_Description->setText(model.getDescription());
this->ui->le_Name->setText(model.getName()); 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); this->ui->frp_IncludeSelector->setValue(model);
} }

View File

@@ -40,7 +40,7 @@ namespace BlackGui
{ {
if (!m_simulatorInfo.isAllSimulators()) 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()) if (!this->m_modelKey.isEmpty())

View File

@@ -43,6 +43,7 @@ namespace BlackGui
this->m_columns.addColumn(CColumn::standardString("description", CDistributor::IndexDescription)); this->m_columns.addColumn(CColumn::standardString("description", CDistributor::IndexDescription));
this->m_columns.addColumn(CColumn::standardString("alias1", CDistributor::IndexAlias1)); this->m_columns.addColumn(CColumn::standardString("alias1", CDistributor::IndexAlias1));
this->m_columns.addColumn(CColumn::standardString("alias2", CDistributor::IndexAlias2)); 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)); this->m_columns.addColumn(CColumn::standardString("changed", CDistributor::IndexUtcTimestampFormattedYmdhms));
// default sort order // default sort order

View File

@@ -37,7 +37,7 @@ namespace BlackMisc
m_aircraftIcao(icao), m_livery(livery), m_modelString(model.trimmed().toUpper()), m_description(description.trimmed()), m_modelType(type) 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) 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())); obj.insert("mode", QJsonValue(getModelModeAsString().left(1).toUpper()));
// sims // sims
const CSimulatorInfo sim(getSimulatorInfo()); const CSimulatorInfo sim(getSimulator());
QString flag = CDatastoreUtility::boolToDbYN(sim.fsx()); QString flag = CDatastoreUtility::boolToDbYN(sim.fsx());
obj.insert("simfsx", QJsonValue(flag)); obj.insert("simfsx", QJsonValue(flag));
flag = CDatastoreUtility::boolToDbYN(sim.p3d()); flag = CDatastoreUtility::boolToDbYN(sim.p3d());
@@ -223,7 +223,7 @@ namespace BlackMisc
return this->m_description.compare(compareValue.getDescription(), Qt::CaseInsensitive); return this->m_description.compare(compareValue.getDescription(), Qt::CaseInsensitive);
case IndexSimulatorInfoAsString: case IndexSimulatorInfoAsString:
case IndexSimulatorInfo: case IndexSimulatorInfo:
return this->m_simulator.comparePropertyByIndex(compareValue.getSimulatorInfo(), index.copyFrontRemoved()); return this->m_simulator.comparePropertyByIndex(compareValue.getSimulator(), index.copyFrontRemoved());
case IndexName: case IndexName:
return this->m_name.compare(compareValue.getName(), Qt::CaseInsensitive); return this->m_name.compare(compareValue.getName(), Qt::CaseInsensitive);
case IndexCallsign: case IndexCallsign:
@@ -339,7 +339,7 @@ namespace BlackMisc
bool CAircraftModel::matchesSimulator(const CSimulatorInfo &simulator) const bool CAircraftModel::matchesSimulator(const CSimulatorInfo &simulator) const
{ {
return (static_cast<int>(simulator.getSimulator()) & static_cast<int>(this->getSimulatorInfo().getSimulator())) > 0; return (static_cast<int>(simulator.getSimulator()) & static_cast<int>(this->getSimulator().getSimulator())) > 0;
} }
CPixmap CAircraftModel::loadIcon(CStatusMessage &success) const 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_modelMode == Undefined) { this->m_modelType = otherModel.getModelType(); }
if (this->m_simulator.isUnspecified()) if (this->m_simulator.isUnspecified())
{ {
this->setSimulatorInfo(otherModel.getSimulatorInfo()); this->setSimulator(otherModel.getSimulator());
} }
else else
{ {
this->m_simulator.add(otherModel.getSimulatorInfo()); this->m_simulator.add(otherModel.getSimulator());
} }
this->m_livery.updateMissingParts(otherModel.getLivery()); this->m_livery.updateMissingParts(otherModel.getLivery());
@@ -487,16 +487,11 @@ namespace BlackMisc
QString modelName(json.value(prefix + "name").toString()); QString modelName(json.value(prefix + "name").toString());
QString modelMode(json.value(prefix + "mode").toString()); QString modelMode(json.value(prefix + "mode").toString());
bool fsx = CDatastoreUtility::dbBoolStringToBool(json.value(prefix + "simfsx").toString()); const CSimulatorInfo simInfo = CSimulatorInfo::fromDatabaseJson(json, prefix);
bool fs9 = CDatastoreUtility::dbBoolStringToBool(json.value(prefix + "simfs9").toString()); const CAircraftIcaoCode aircraftIcao(CAircraftIcaoCode::fromDatabaseJson(json, "ac_"));
bool xp = CDatastoreUtility::dbBoolStringToBool(json.value(prefix + "simxplane").toString()); const CLivery livery(CLivery::fromDatabaseJson(json, "liv_"));
bool p3d = CDatastoreUtility::dbBoolStringToBool(json.value(prefix + "simp3d").toString()); 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( CAircraftModel model(
modelString, CAircraftModel::TypeDatabaseEntry, simInfo, modelName, modelDescription, aircraftIcao, livery modelString, CAircraftModel::TypeDatabaseEntry, simInfo, modelName, modelDescription, aircraftIcao, livery
); );

View File

@@ -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()); CAircraftModel(const QString &model, ModelType type, const QString &description, const BlackMisc::Aviation::CAircraftIcaoCode &icao, const BlackMisc::Aviation::CLivery &livery = BlackMisc::Aviation::CLivery());
//! Constructor. //! 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 //! \copydoc BlackMisc::Mixin::Index::propertyByIndex
CVariant propertyByIndex(const BlackMisc::CPropertyIndex &index) const; CVariant propertyByIndex(const BlackMisc::CPropertyIndex &index) const;
@@ -227,10 +227,10 @@ namespace BlackMisc
void setModelModeAsString(const QString &mode); void setModelModeAsString(const QString &mode);
//! Simulator info //! Simulator info
CSimulatorInfo getSimulatorInfo() const { return this->m_simulator; } CSimulatorInfo getSimulator() const { return this->m_simulator; }
//! Set simulator info //! Set simulator info
void setSimulatorInfo(const CSimulatorInfo &simulator) { this->m_simulator = simulator; } void setSimulator(const CSimulatorInfo &simulator) { this->m_simulator = simulator; }
//! Matches given simulator? //! Matches given simulator?
bool matchesSimulator(const CSimulatorInfo &simulator) const; bool matchesSimulator(const CSimulatorInfo &simulator) const;

View File

@@ -241,8 +241,8 @@ namespace BlackMisc
const CSimulatorInfo::Simulator s = info.getSimulator(); const CSimulatorInfo::Simulator s = info.getSimulator();
for (CAircraftModel &model : (*this)) for (CAircraftModel &model : (*this))
{ {
if (model.getSimulatorInfo().getSimulator() == s) { continue; } if (model.getSimulator().getSimulator() == s) { continue; }
model.setSimulatorInfo(info); model.setSimulator(info);
c++; c++;
} }
return c; return c;
@@ -253,7 +253,7 @@ namespace BlackMisc
CSimulatorInfo::Simulator s = CSimulatorInfo::None; CSimulatorInfo::Simulator s = CSimulatorInfo::None;
for (const CAircraftModel &model : (*this)) for (const CAircraftModel &model : (*this))
{ {
s |= model.getSimulatorInfo().getSimulator(); s |= model.getSimulator().getSimulator();
if (s == CSimulatorInfo::All) { break; } if (s == CSimulatorInfo::All) { break; }
} }
return CSimulatorInfo(s); return CSimulatorInfo(s);
@@ -403,7 +403,7 @@ namespace BlackMisc
CCountPerSimulator count; CCountPerSimulator count;
for (const CAircraftModel &model : (*this)) for (const CAircraftModel &model : (*this))
{ {
count.increaseSimulatorCounts(model.getSimulatorInfo()); count.increaseSimulatorCounts(model.getSimulator());
} }
return count; 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) void CAircraftModelList::updateAircraftIcao(const CAircraftIcaoCode &icao)
{ {
for (CAircraftModel &model : *this) for (CAircraftModel &model : *this)

View File

@@ -153,9 +153,12 @@ namespace BlackMisc
//! Which simulator(s) have the most entries //! Which simulator(s) have the most entries
CSimulatorInfo simulatorsWithMaxEntries() const; CSimulatorInfo simulatorsWithMaxEntries() const;
//! Update distributors //! Update distributor, all models in list are set to given distributor
void updateDistributor(const CDistributor &distributor); void updateDistributor(const CDistributor &distributor);
//! All distributors used with models of this list
CDistributorList getDistributors(bool onlyDbDistributors = true) const;
//! Update aircraft ICAO //! Update aircraft ICAO
void updateAircraftIcao(const BlackMisc::Aviation::CAircraftIcaoCode &icao); void updateAircraftIcao(const BlackMisc::Aviation::CAircraftIcaoCode &icao);

View File

@@ -21,8 +21,8 @@ namespace BlackMisc
this->setDbKey(key); this->setDbKey(key);
} }
CDistributor::CDistributor(const QString &id, const QString &description, const QString &alias1, const QString &alias2) : 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_description(description), m_alias1(alias1.trimmed().toUpper()), m_alias2(alias2.trimmed().toUpper()), m_simulator(simulator)
{ {
this->setDbKey(id); this->setDbKey(id);
} }
@@ -41,16 +41,24 @@ namespace BlackMisc
return (distributor.hasAlias2() && this->matchesKeyOrAlias(distributor.getAlias2())); 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 CVariant CDistributor::propertyByIndex(const CPropertyIndex &index) const
{ {
if (index.isMyself()) { return CVariant::from(*this); } if (index.isMyself()) { return CVariant::from(*this); }
if (IDatastoreObjectWithStringKey::canHandleIndex(index)) { return IDatastoreObjectWithStringKey::propertyByIndex(index); } if (IDatastoreObjectWithStringKey::canHandleIndex(index)) { return IDatastoreObjectWithStringKey::propertyByIndex(index); }
if (IOrderable::canHandleIndex(index)) { return IOrderable::propertyByIndex(index); }
ColumnIndex i = index.frontCasted<ColumnIndex>(); ColumnIndex i = index.frontCasted<ColumnIndex>();
switch (i) switch (i)
{ {
case IndexAlias1: return CVariant::from(this->m_alias1); case IndexAlias1: return CVariant::from(this->m_alias1);
case IndexAlias2: return CVariant::from(this->m_alias2); case IndexAlias2: return CVariant::from(this->m_alias2);
case IndexDescription: return CVariant::from(this->m_description); case IndexDescription: return CVariant::from(this->m_description);
case IndexSimulator: return m_simulator.propertyByIndex(index.copyFrontRemoved());
default: default:
return CValueObject::propertyByIndex(index); return CValueObject::propertyByIndex(index);
} }
@@ -60,6 +68,8 @@ namespace BlackMisc
{ {
if (index.isMyself()) { (*this) = variant.to<CDistributor>(); return; } if (index.isMyself()) { (*this) = variant.to<CDistributor>(); return; }
if (IDatastoreObjectWithStringKey::canHandleIndex(index)) { IDatastoreObjectWithStringKey::setPropertyByIndex(variant, index); return; } if (IDatastoreObjectWithStringKey::canHandleIndex(index)) { IDatastoreObjectWithStringKey::setPropertyByIndex(variant, index); return; }
if (IOrderable::canHandleIndex(index)) { IOrderable::setPropertyByIndex(variant, index); return; }
ColumnIndex i = index.frontCasted<ColumnIndex>(); ColumnIndex i = index.frontCasted<ColumnIndex>();
switch (i) switch (i)
{ {
@@ -72,6 +82,9 @@ namespace BlackMisc
case IndexDescription: case IndexDescription:
this->m_description = variant.value<QString>(); this->m_description = variant.value<QString>();
break; break;
case IndexSimulator:
this->m_simulator.setPropertyByIndex(variant, index.copyFrontRemoved());
break;
default: default:
CValueObject::setPropertyByIndex(variant, index); CValueObject::setPropertyByIndex(variant, index);
break; break;
@@ -81,15 +94,14 @@ namespace BlackMisc
int CDistributor::comparePropertyByIndex(const CDistributor &compareValue, const CPropertyIndex &index) const int CDistributor::comparePropertyByIndex(const CDistributor &compareValue, const CPropertyIndex &index) const
{ {
if (IDatastoreObjectWithStringKey::canHandleIndex(index)) { return IDatastoreObjectWithStringKey::comparePropertyByIndex(compareValue, index); } if (IDatastoreObjectWithStringKey::canHandleIndex(index)) { return IDatastoreObjectWithStringKey::comparePropertyByIndex(compareValue, index); }
if (IOrderable::canHandleIndex(index)) { return IOrderable::comparePropertyByIndex(compareValue, index); }
ColumnIndex i = index.frontCasted<ColumnIndex>(); ColumnIndex i = index.frontCasted<ColumnIndex>();
switch (i) switch (i)
{ {
case IndexAlias1: case IndexAlias1: return this->m_alias1.compare(compareValue.m_alias1, Qt::CaseInsensitive);
return this->m_alias1.compare(compareValue.m_alias1, Qt::CaseInsensitive); case IndexAlias2: return this->m_alias2.compare(compareValue.m_alias2, Qt::CaseInsensitive);
case IndexAlias2: case IndexDescription: return this->m_description.compare(compareValue.getDescription(), Qt::CaseInsensitive);
return this->m_alias2.compare(compareValue.m_alias2, Qt::CaseInsensitive); case IndexSimulator: return this->m_simulator.comparePropertyByIndex(compareValue.m_simulator, index.copyFrontRemoved());
case IndexDescription:
return this->m_description.compare(compareValue.getDescription(), Qt::CaseInsensitive);
default: default:
break; break;
} }
@@ -145,7 +157,7 @@ namespace BlackMisc
return CDistributor(); return CDistributor();
} }
QString description(json.value(prefix + "description").toString()); const QString description(json.value(prefix + "description").toString());
if (description.isEmpty()) if (description.isEmpty())
{ {
// stub, only key, maybe also timestamps // stub, only key, maybe also timestamps
@@ -154,13 +166,13 @@ namespace BlackMisc
return distributorStub; return distributorStub;
} }
QString alias1(json.value(prefix + "alias1").toString()); const CSimulatorInfo simulator = CSimulatorInfo::fromDatabaseJson(json, prefix);
QString alias2(json.value(prefix + "alias2").toString()); 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"); 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); distributor.setKeyAndTimestampFromDatabaseJson(json, prefix);
return distributor; return distributor;
} }
} // namespace } // namespace
} // namespace } // namespace

View File

@@ -13,7 +13,9 @@
#define BLACKMISC_SIMULATION_DISTRIBUTOR_H #define BLACKMISC_SIMULATION_DISTRIBUTOR_H
#include "blackmisc/blackmiscexport.h" #include "blackmisc/blackmiscexport.h"
#include "blackmisc/simulation/simulatorinfo.h"
#include "blackmisc/valueobject.h" #include "blackmisc/valueobject.h"
#include "blackmisc/orderable.h"
#include "blackmisc/datastore.h" #include "blackmisc/datastore.h"
#include "blackmisc/statusmessagelist.h" #include "blackmisc/statusmessagelist.h"
#include <QJsonObject> #include <QJsonObject>
@@ -25,7 +27,8 @@ namespace BlackMisc
//! Value object encapsulating information of software distributor. //! Value object encapsulating information of software distributor.
class BLACKMISC_EXPORT CDistributor : class BLACKMISC_EXPORT CDistributor :
public BlackMisc::CValueObject<CDistributor>, public BlackMisc::CValueObject<CDistributor>,
public BlackMisc::IDatastoreObjectWithStringKey public BlackMisc::IDatastoreObjectWithStringKey,
public BlackMisc::IOrderable
{ {
public: public:
//! Property indexes //! Property indexes
@@ -33,7 +36,8 @@ namespace BlackMisc
{ {
IndexDescription = CPropertyIndex::GlobalIndexCDistributor, IndexDescription = CPropertyIndex::GlobalIndexCDistributor,
IndexAlias1, IndexAlias1,
IndexAlias2 IndexAlias2,
IndexSimulator
}; };
//! Default constructor. //! Default constructor.
@@ -43,7 +47,7 @@ namespace BlackMisc
CDistributor(const QString &key); CDistributor(const QString &key);
//! Constructor //! 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 //! Get description
const QString &getDescription() const { return this->m_description;} const QString &getDescription() const { return this->m_description;}
@@ -72,12 +76,21 @@ namespace BlackMisc
//! Alias 2? //! Alias 2?
bool hasAlias2() const { return !this->m_alias2.isEmpty(); } 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 //! Matches key or alias
bool matchesKeyOrAlias(const QString &keyOrAlias) const; bool matchesKeyOrAlias(const QString &keyOrAlias) const;
//! Matches key or alias //! Matches key or alias
bool matchesKeyOrAlias(const CDistributor &distributor) const; bool matchesKeyOrAlias(const CDistributor &distributor) const;
//! Matches simulator
bool matchesSimulator(const CSimulatorInfo &simulator) const;
//! \copydoc BlackMisc::Mixin::Index::propertyByIndex //! \copydoc BlackMisc::Mixin::Index::propertyByIndex
CVariant propertyByIndex(const BlackMisc::CPropertyIndex &index) const; CVariant propertyByIndex(const BlackMisc::CPropertyIndex &index) const;
@@ -103,20 +116,22 @@ namespace BlackMisc
static CDistributor fromDatabaseJson(const QJsonObject &json, const QString &prefix = QString()); static CDistributor fromDatabaseJson(const QJsonObject &json, const QString &prefix = QString());
private: private:
QString m_description; //!< description QString m_description; //!< description
QString m_alias1; //!< alias name QString m_alias1; //!< alias name
QString m_alias2; //!< alias name QString m_alias2; //!< alias name
BlackMisc::Simulation::CSimulatorInfo m_simulator; //!< simulator
BLACK_METACLASS( BLACK_METACLASS(
CDistributor, CDistributor,
BLACK_METAMEMBER(dbKey, 0, CaseInsensitiveComparison), BLACK_METAMEMBER(dbKey, 0, CaseInsensitiveComparison),
BLACK_METAMEMBER(timestampMSecsSinceEpoch), BLACK_METAMEMBER(timestampMSecsSinceEpoch),
BLACK_METAMEMBER(order),
BLACK_METAMEMBER(description), BLACK_METAMEMBER(description),
BLACK_METAMEMBER(alias1, 0, CaseInsensitiveComparison), BLACK_METAMEMBER(alias1, 0, CaseInsensitiveComparison),
BLACK_METAMEMBER(alias2, 0, CaseInsensitiveComparison) BLACK_METAMEMBER(alias2, 0, CaseInsensitiveComparison),
BLACK_METAMEMBER(simulator)
); );
}; };
} // namespace } // namespace
} // namespace } // namespace

View File

@@ -74,5 +74,18 @@ namespace BlackMisc
return sl; 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
} // namespace } // namespace

View File

@@ -15,6 +15,7 @@
#include "blackmisc/blackmiscexport.h" #include "blackmisc/blackmiscexport.h"
#include "blackmisc/simulation/distributor.h" #include "blackmisc/simulation/distributor.h"
#include "blackmisc/datastoreobjectlist.h" #include "blackmisc/datastoreobjectlist.h"
#include "blackmisc/orderablelist.h"
#include "blackmisc/collection.h" #include "blackmisc/collection.h"
#include "blackmisc/sequence.h" #include "blackmisc/sequence.h"
#include <QObject> #include <QObject>
@@ -29,6 +30,7 @@ namespace BlackMisc
class BLACKMISC_EXPORT CDistributorList : class BLACKMISC_EXPORT CDistributorList :
public BlackMisc::CSequence<CDistributor>, public BlackMisc::CSequence<CDistributor>,
public BlackMisc::IDatastoreObjectList<CDistributor, CDistributorList, QString>, public BlackMisc::IDatastoreObjectList<CDistributor, CDistributorList, QString>,
public BlackMisc::IOrderableList<CDistributor, CDistributorList>,
public BlackMisc::Mixin::MetaType<CDistributorList> public BlackMisc::Mixin::MetaType<CDistributorList>
{ {
public: public:
@@ -51,6 +53,9 @@ namespace BlackMisc
//! All DB keys and aliases //! All DB keys and aliases
QStringList getDbKeysAndAliases(bool sort) const; QStringList getDbKeysAndAliases(bool sort) const;
//! Find for given simulator
CDistributorList matchesSimulator(const BlackMisc::Simulation::CSimulatorInfo &simulator) const;
}; };
} //namespace } //namespace
} // namespace } // namespace

View File

@@ -72,7 +72,7 @@ namespace BlackMisc
for (const CAircraftCfgEntries &entries : (*this)) for (const CAircraftCfgEntries &entries : (*this))
{ {
CAircraftModel m(entries.toAircraftModel()); CAircraftModel m(entries.toAircraftModel());
m.setSimulatorInfo(simInfo); m.setSimulator(simInfo);
ml.push_back(m); ml.push_back(m);
} }
return ml; return ml;

View File

@@ -112,7 +112,7 @@ namespace BlackMisc
const CSimulatorInfo sim(CSimulatorInfo::FSX_P3D); const CSimulatorInfo sim(CSimulatorInfo::FSX_P3D);
model.setMSecsSinceEpoch(m_timestampMSecsSinceEpoch); model.setMSecsSinceEpoch(m_timestampMSecsSinceEpoch);
model.setDistributor(distributor); model.setDistributor(distributor);
model.setSimulatorInfo(sim); model.setSimulator(sim);
return model; return model;
} }

View File

@@ -10,6 +10,7 @@
#include "simulatorinfo.h" #include "simulatorinfo.h"
#include "buildconfig.h" #include "buildconfig.h"
#include "blackmisc/comparefunctions.h" #include "blackmisc/comparefunctions.h"
#include "blackmisc/datastoreutility.h"
#include "blackmisc/simulation/fscommon/fscommonutil.h" #include "blackmisc/simulation/fscommon/fscommonutil.h"
#include <algorithm> #include <algorithm>
@@ -204,6 +205,17 @@ namespace BlackMisc
return sim; 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() CCountPerSimulator::CCountPerSimulator()
{ {
this->m_counts.reserve(CSimulatorInfo::NumberOfSimulators + 1); this->m_counts.reserve(CSimulatorInfo::NumberOfSimulators + 1);

View File

@@ -146,6 +146,9 @@ namespace BlackMisc
//! Locally installed simulators //! Locally installed simulators
static const CSimulatorInfo getLocallyInstalledSimulators(); static const CSimulatorInfo getLocallyInstalledSimulators();
//! From database JSON
static CSimulatorInfo fromDatabaseJson(const QJsonObject &json, const QString prefix);
private: private:
int m_simulator = static_cast<int>(None); int m_simulator = static_cast<int>(None);

View File

@@ -155,7 +155,7 @@ namespace BlackMisc
CAircraftModel model; CAircraftModel model;
model.setModelType(CAircraftModel::TypeOwnSimulatorModel); model.setModelType(CAircraftModel::TypeOwnSimulatorModel);
model.setSimulatorInfo(m_simulatorInfo); model.setSimulator(m_simulatorInfo);
model.setFileName(aircraftIt.filePath()); model.setFileName(aircraftIt.filePath());
model.setModelString(modelString); model.setModelString(modelString);
@@ -262,7 +262,7 @@ namespace BlackMisc
CDistributor distributor(package.name); CDistributor distributor(package.name);
model.setDistributor(distributor); model.setDistributor(distributor);
model.setSimulatorInfo(m_simulatorInfo); model.setSimulator(m_simulatorInfo);
installedModels.push_back(model); installedModels.push_back(model);
} }
} }