mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-05 09:15:34 +08:00
refs #614, changed matcher so caches can be used
* provider for cached models * removed unused dummy * renamed getDatastoreModels
This commit is contained in:
@@ -152,89 +152,42 @@ namespace BlackMisc
|
||||
m_defaultModel.setModelType(CAircraftModel::TypeModelMatchingDefaultModel);
|
||||
}
|
||||
|
||||
void CAircraftMatcher::ps_setDatastoreModels(const CAircraftModelList &mappings)
|
||||
CAircraftModel CAircraftMatcher::matchByExactModelString(const CSimulatedAircraft &remoteAircraft) const
|
||||
{
|
||||
m_modelsFromDatastoreInstalled = mappings;
|
||||
const CAircraftModelList models(this->m_models.read());
|
||||
return models.findFirstByModelStringOrDefault(remoteAircraft.getModelString());
|
||||
}
|
||||
|
||||
void CAircraftMatcher::initImpl()
|
||||
{
|
||||
InitState e = NotInitialized;
|
||||
InitState d = InitInProgress;
|
||||
if (!m_initState.compare_exchange_strong(e, d)) { return; }
|
||||
|
||||
// sync
|
||||
this->synchronize();
|
||||
CLogMessage(this).debug() << "Mapping definitions after sync" << m_modelsFromDatastoreInstalled.size();
|
||||
|
||||
// finish
|
||||
CLogMessage(this).info("Mapping system: %1 definitions for %2 installed models") << m_modelsFromDatastoreInstalled.size()
|
||||
<< m_installedModels.size();
|
||||
m_initState = InitFinished;
|
||||
emit initializationFinished();
|
||||
}
|
||||
|
||||
void CAircraftMatcher::initMappings()
|
||||
{
|
||||
Q_ASSERT(m_mappingsProvider);
|
||||
int mappingsSize = m_mappingsProvider->getDatastoreModels().size();
|
||||
if (mappingsSize < 1)
|
||||
{
|
||||
m_mappingsProvider->read();
|
||||
m_modelsFromDatastoreInstalled = m_mappingsProvider->getDatastoreModels();
|
||||
mappingsSize = m_modelsFromDatastoreInstalled.size();
|
||||
if (mappingsSize < 1)
|
||||
{
|
||||
CLogMessage(this).error("Reading mapping rules failed or empty!");
|
||||
// Turn off the model mapping mode
|
||||
m_matchingMode &= ~ModelMapping;
|
||||
return;
|
||||
}
|
||||
}
|
||||
m_modelsFromDatastoreInstalled = m_mappingsProvider->getDatastoreModels();
|
||||
CLogMessage(this).debug() << "Mapping definitions" << mappingsSize;
|
||||
}
|
||||
|
||||
CAircraftModel CAircraftMatcher::matchByExactModelName(const CSimulatedAircraft &remoteAircraft)
|
||||
{
|
||||
return this->m_installedModels.findFirstByModelStringOrDefault(remoteAircraft.getModelString());
|
||||
}
|
||||
|
||||
CAircraftModel CAircraftMatcher::matchInstalledModelsByIcaoData(const CSimulatedAircraft &remoteAircraft)
|
||||
CAircraftModel CAircraftMatcher::matchModelsByIcaoData(const CSimulatedAircraft &remoteAircraft, QString &log) const
|
||||
{
|
||||
CAircraftModel aircraftModel;
|
||||
if (m_modelsFromDatastoreInstalled.isEmpty()) { return aircraftModel; }
|
||||
BlackMisc::Simulation::CAircraftModelList datastoreModels(m_modelsFromDatastoreInstalled.findByIcaoDesignators(remoteAircraft.getAircraftIcaoCode(), remoteAircraft.getAirlineIcaoCode()));
|
||||
if (!datastoreModels.isEmpty())
|
||||
const CAircraftModelList models(this->m_models.read());
|
||||
BlackMisc::Simulation::CAircraftModelList mappingModels(
|
||||
models.findByIcaoDesignators(remoteAircraft.getAircraftIcaoCode(), remoteAircraft.getAirlineIcaoCode())
|
||||
);
|
||||
if (!mappingModels.isEmpty())
|
||||
{
|
||||
CAircraftModel aircraftModel(datastoreModels.front());
|
||||
log = "Found by ICAO " + remoteAircraft.getAircraftIcaoCode().getDesignator() + " " + remoteAircraft.getAircraftIcaoCode().getDesignator();
|
||||
log = log.trimmed();
|
||||
CAircraftModel aircraftModel(mappingModels.front());
|
||||
aircraftModel.setModelType(CAircraftModel::TypeModelMatching);
|
||||
}
|
||||
return aircraftModel;
|
||||
}
|
||||
|
||||
CAircraftModel CAircraftMatcher::matchByAlgorithm(const CSimulatedAircraft & /** remoteAircraft **/)
|
||||
CAircraftModel CAircraftMatcher::matchByFamily(const CSimulatedAircraft &remoteAircraft, QString &log) const
|
||||
{
|
||||
// Use an algorithm to find the best match
|
||||
Q_UNUSED(remoteAircraft);
|
||||
Q_UNUSED(log);
|
||||
return CAircraftModel();
|
||||
}
|
||||
|
||||
int CAircraftMatcher::synchronizeWithExistingModels(const QStringList &modelNames, Qt::CaseSensitivity cs)
|
||||
void CAircraftMatcher::logDetails(const CSimulatedAircraft &remoteAircraft, const QString &message) const
|
||||
{
|
||||
if (modelNames.isEmpty() || m_modelsFromDatastoreInstalled.isEmpty()) { return 0; }
|
||||
CAircraftModelList newList;
|
||||
for (const CAircraftModel &modelDatastore : m_modelsFromDatastoreInstalled)
|
||||
{
|
||||
if (this->m_initState != InitInProgress) { return 0; } // canceled
|
||||
QString modelString(modelDatastore.getModelString());
|
||||
if (modelString.isEmpty()) { continue; }
|
||||
if (modelNames.contains(modelString, cs))
|
||||
{
|
||||
newList.push_back(modelDatastore);
|
||||
}
|
||||
}
|
||||
this->m_modelsFromDatastoreInstalled = newList;
|
||||
return this->m_modelsFromDatastoreInstalled.size();
|
||||
if (!this->m_logDetails || message.isEmpty()) { return; }
|
||||
const CCallsign callsign(remoteAircraft.getCallsign());
|
||||
CLogMessage(this).info(callsign.toQString(true) + ": " + message);
|
||||
}
|
||||
}
|
||||
} // namespace
|
||||
|
||||
@@ -27,7 +27,8 @@ namespace BlackMisc
|
||||
{
|
||||
namespace Simulation
|
||||
{
|
||||
/*! Matcher for all models
|
||||
/*!
|
||||
* Matcher for all models.
|
||||
* \details Reads all the mapping rules and all the available flight simulator models.
|
||||
* Then all rules for models not existing are eliminated ( \sa synchronize ).
|
||||
* Thereafter all existing models and mappings can be obtained from here.
|
||||
@@ -36,10 +37,6 @@ namespace BlackMisc
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
signals:
|
||||
//! Full init completed
|
||||
void initializationFinished();
|
||||
|
||||
public:
|
||||
//! Enabled matching mode flags
|
||||
enum MatchingModeFlag
|
||||
@@ -84,7 +81,7 @@ namespace BlackMisc
|
||||
CAircraftModel getClosestMatch(const CSimulatedAircraft &remoteAircraft);
|
||||
|
||||
//! Get all mappings
|
||||
const BlackMisc::Simulation::CAircraftModelList &getDatastoreModels() const { return m_mappingsProvider->getDatastoreModels(); }
|
||||
BlackMisc::Simulation::CAircraftModelList getMappingModels() const { return m_mappingsProvider->getMappingModels(); }
|
||||
|
||||
//! Number of mapping definitions
|
||||
int countMappingRules() const { return m_modelsFromDatastoreInstalled.size(); }
|
||||
@@ -102,6 +99,10 @@ namespace BlackMisc
|
||||
//! Set default model
|
||||
void setDefaultModel(const BlackMisc::Simulation::CAircraftModel &defaultModel);
|
||||
|
||||
signals:
|
||||
//! Full init completed
|
||||
void initializationFinished();
|
||||
|
||||
private slots:
|
||||
//! Set the datatstore models
|
||||
void ps_setDatastoreModels(const CAircraftModelList &mappings);
|
||||
|
||||
@@ -34,11 +34,10 @@ namespace BlackMisc
|
||||
bool success = this->m_vPilotReader->read(false);
|
||||
if (success)
|
||||
{
|
||||
this->m_datastoreModels = this->m_vPilotReader->getAsModels();
|
||||
this->m_mappingModels = this->m_vPilotReader->getAsModels();
|
||||
}
|
||||
return success;
|
||||
}
|
||||
|
||||
} // namespace
|
||||
} // namespace
|
||||
} // namespace
|
||||
|
||||
@@ -34,12 +34,16 @@ namespace BlackMisc
|
||||
//! Destructor
|
||||
virtual ~CModelMappingsProviderVPilot() {}
|
||||
|
||||
//! \copydoc IModelMappingsProvider::getMatchingModels
|
||||
virtual CAircraftModelList getMatchingModels() const override { return this->m_mappingModels; }
|
||||
|
||||
public slots:
|
||||
//! Load data
|
||||
virtual bool read() override;
|
||||
|
||||
private:
|
||||
QScopedPointer<CVPilotRulesReader> m_vPilotReader; //!< used vPilot model reader
|
||||
QScopedPointer<CVPilotRulesReader> m_vPilotReader; //!< used vPilot model reader
|
||||
BlackMisc::Simulation::CAircraftModelList m_mappingModels; //!< models
|
||||
};
|
||||
} // namespace
|
||||
} // namespace
|
||||
|
||||
@@ -18,9 +18,20 @@ namespace BlackMisc
|
||||
{
|
||||
IModelMappingsProvider::IModelMappingsProvider(QObject *parent) : QObject(parent) {}
|
||||
|
||||
const CAircraftModelList &IModelMappingsProvider::getDatastoreModels() const
|
||||
CachedModelSetProvider::CachedModelSetProvider(const CSimulatorInfo &simulator, QObject *parent) :
|
||||
IModelMappingsProvider(parent), m_simulator(simulator)
|
||||
{ }
|
||||
|
||||
CAircraftModelList CachedModelSetProvider::getMatchingModels() const
|
||||
{
|
||||
return m_datastoreModels;
|
||||
return this->m_modelSets.getModels(this->m_simulator);
|
||||
}
|
||||
|
||||
bool CachedModelSetProvider::read()
|
||||
{
|
||||
this->m_modelSets.syncronize(this->m_simulator);
|
||||
return true;
|
||||
}
|
||||
|
||||
} // namespace
|
||||
} // namespace
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
#define BLACKMISC_SIMULATION_MODELMAPPINGS_H
|
||||
|
||||
#include "blackmisc/blackmiscexport.h"
|
||||
#include "blackmisc/simulation/aircraftmodellist.h"
|
||||
#include "blackmisc/simulation/data/modelcaches.h"
|
||||
#include <QObject>
|
||||
|
||||
namespace BlackMisc
|
||||
@@ -36,25 +36,29 @@ namespace BlackMisc
|
||||
//! Load data
|
||||
virtual bool read() = 0;
|
||||
|
||||
//! Get list
|
||||
const CAircraftModelList &getDatastoreModels() const;
|
||||
//! Get list of models used
|
||||
virtual CAircraftModelList getMatchingModels() const = 0;
|
||||
|
||||
protected:
|
||||
BlackMisc::Simulation::CAircraftModelList m_datastoreModels; //!< models
|
||||
BlackMisc::Simulation::CAircraftModelList m_mappingModels; //!< models
|
||||
};
|
||||
|
||||
//! Model mappings dummy
|
||||
class BLACKMISC_EXPORT CModelMappingsProviderDummy : public IModelMappingsProvider
|
||||
//! Implementation of a provider based on the model set cache
|
||||
class BLACKMISC_EXPORT CachedModelSetProvider : public IModelMappingsProvider
|
||||
{
|
||||
public:
|
||||
//! Constructor
|
||||
CModelMappingsProviderDummy(QObject *parent = nullptr) : IModelMappingsProvider(parent) {}
|
||||
CachedModelSetProvider(const BlackMisc::Simulation::CSimulatorInfo &simulator, QObject *parent = nullptr);
|
||||
|
||||
//! Destructor
|
||||
virtual ~CModelMappingsProviderDummy() {}
|
||||
//! \copydoc IModelMappingsProvider::getMatchingModels
|
||||
virtual CAircraftModelList getMatchingModels() const override;
|
||||
|
||||
//! Load data
|
||||
virtual bool read() override { return true; }
|
||||
//! \copydoc IModelMappingsProvider::read
|
||||
virtual bool read() override;
|
||||
|
||||
private:
|
||||
BlackMisc::Simulation::Data::CModelSetCaches m_modelSets { this };
|
||||
BlackMisc::Simulation::CSimulatorInfo m_simulator;
|
||||
};
|
||||
} // ns
|
||||
} // ns
|
||||
|
||||
Reference in New Issue
Block a user