Allow to disable reverse lookup for model string and livery ids

This commit is contained in:
Klaus Basan
2019-06-15 22:55:42 +02:00
parent b2de22fb50
commit 91f09841df
6 changed files with 57 additions and 20 deletions

View File

@@ -319,7 +319,7 @@ namespace BlackCore
CAircraftModel model(networkModelString, type, {}, networkAircraftIcao, livery); CAircraftModel model(networkModelString, type, {}, networkAircraftIcao, livery);
model.setCallsign(callsign); model.setCallsign(callsign);
model = CAircraftMatcher::reverseLookupModel(model, networkLiveryInfo, log); model = CAircraftMatcher::reverseLookupModel(model, networkLiveryInfo, setup, log);
model.setModelType(CAircraftModel::TypeReverseLookup); model.setModelType(CAircraftModel::TypeReverseLookup);
return model; return model;
@@ -501,7 +501,7 @@ namespace BlackCore
return rv; return rv;
} }
CAircraftModel CAircraftMatcher::reverseLookupModel(const CAircraftModel &modelToLookup, const QString &networkLiveryInfo, CStatusMessageList *log) CAircraftModel CAircraftMatcher::reverseLookupModel(const CAircraftModel &modelToLookup, const QString &networkLiveryInfo, const CAircraftMatcherSetup &setup, CStatusMessageList *log)
{ {
if (!sApp || sApp->isShuttingDown() || !sApp->hasWebDataServices()) { return CAircraftModel(); } if (!sApp || sApp->isShuttingDown() || !sApp->hasWebDataServices()) { return CAircraftModel(); }
@@ -524,7 +524,7 @@ namespace BlackCore
if (modelToLookup.hasModelString()) if (modelToLookup.hasModelString())
{ {
// if we find the model here we have a fully defined DB model // if we find the model here we have a fully defined DB model
const CAircraftModel modelFromDb = CAircraftMatcher::reverseLookupModelString(modelToLookup.getModelString(), callsign, log); const CAircraftModel modelFromDb = CAircraftMatcher::reverseLookupModelString(modelToLookup.getModelString(), callsign, setup.isReverseLookupModelString(), log);
if (modelFromDb.hasValidDbKey()) if (modelFromDb.hasValidDbKey())
{ {
model = modelFromDb; model = modelFromDb;
@@ -536,7 +536,11 @@ namespace BlackCore
const DBTripleIds ids = CAircraftModel::parseNetworkLiveryString(networkLiveryInfo); const DBTripleIds ids = CAircraftModel::parseNetworkLiveryString(networkLiveryInfo);
if (log) { CMatchingUtils::addLogDetailsToList(log, callsign, QStringLiteral("Livery string with ids: '%1'").arg(ids.toQString())); } if (log) { CMatchingUtils::addLogDetailsToList(log, callsign, QStringLiteral("Livery string with ids: '%1'").arg(ids.toQString())); }
if (ids.model >= 0 && !modelToLookup.hasModelString()) if (setup.isReverseLookupSwiftLiveryIds())
{
if (log) { CMatchingUtils::addLogDetailsToList(log, callsign, QStringLiteral("Ignoring livery ids '%1', because of setup").arg(ids.toQString())); }
}
else if (ids.model >= 0 && !modelToLookup.hasModelString())
{ {
if (log) { CMatchingUtils::addLogDetailsToList(log, callsign, QStringLiteral("Model lookup with id %1 from triple ids '%2'").arg(ids.model).arg(ids.toQString())); } if (log) { CMatchingUtils::addLogDetailsToList(log, callsign, QStringLiteral("Model lookup with id %1 from triple ids '%2'").arg(ids.model).arg(ids.toQString())); }
const CAircraftModel modelFromDb = CAircraftMatcher::reverseLookupModelId(ids.model, callsign, log); const CAircraftModel modelFromDb = CAircraftMatcher::reverseLookupModelId(ids.model, callsign, log);
@@ -663,24 +667,31 @@ namespace BlackCore
return model; return model;
} }
CAircraftModel CAircraftMatcher::reverseLookupModel(const CAircraftModel &modelToLookup, const QString &networkLiveryInfo, const CAircraftMatcherSetup &setup, CStatusMessageList *log) CAircraftModel CAircraftMatcher::reverseLookupModelMs(const CAircraftModel &modelToLookup, const QString &networkLiveryInfo, const CAircraftMatcherSetup &setup, CStatusMessageList *log)
{ {
CAircraftModel reverseModel = reverseLookupModel(modelToLookup, networkLiveryInfo, log); CAircraftModel reverseModel = reverseLookupModel(modelToLookup, networkLiveryInfo, setup, log);
if (!setup.doRunMsReverseLookupScript()) { return reverseModel; } if (!setup.doRunMsReverseLookupScript()) { return reverseModel; }
const CCallsign cs = modelToLookup.getCallsign(); const CCallsign cs = modelToLookup.getCallsign();
const MatchingScriptReturnValues rv = reverseLookupScript(reverseModel, setup, log); const MatchingScriptReturnValues rv = CAircraftMatcher::reverseLookupScript(reverseModel, setup, log);
if (rv.runScriptModifiedAndRerun()) if (rv.runScriptModifiedAndRerun())
{ {
CMatchingUtils::addLogDetailsToList(log, cs, QStringLiteral("Matching script: Modified value and requested rerun")); CMatchingUtils::addLogDetailsToList(log, cs, QStringLiteral("Matching script: Modified value and requested rerun"));
reverseModel = reverseLookupModel(rv.model, networkLiveryInfo, log); CAircraftMatcherSetup setupRerun(setup);
setupRerun.resetReverseLookup();
reverseModel = CAircraftMatcher::reverseLookupModel(rv.model, networkLiveryInfo, setupRerun, log);
return reverseModel; return reverseModel;
} }
return (rv.runScriptAndModified() ? rv.model : reverseModel); return (rv.runScriptAndModified() ? rv.model : reverseModel);
} }
CAircraftModel CAircraftMatcher::reverseLookupModelString(const QString &modelString, const CCallsign &callsign, CStatusMessageList *log) CAircraftModel CAircraftMatcher::reverseLookupModelString(const QString &modelString, const CCallsign &callsign, bool doLookupString, CStatusMessageList *log)
{ {
if (!sApp || sApp->isShuttingDown() || !sApp->hasWebDataServices()) { return CAircraftModel(); } if (!sApp || sApp->isShuttingDown() || !sApp->hasWebDataServices()) { return CAircraftModel(); }
if (!doLookupString)
{
if (log) { CMatchingUtils::addLogDetailsToList(log, callsign, QStringLiteral("Ignore model string in reverse lookup, ignoring '%1'").arg(modelString)); }
return CAircraftModel();
}
CAircraftModel model = sApp->getWebDataServices()->getModelForModelString(modelString); CAircraftModel model = sApp->getWebDataServices()->getModelForModelString(modelString);
if (log) if (log)
{ {

View File

@@ -114,7 +114,7 @@ namespace BlackCore
const BlackMisc::Aviation::CAirlineIcaoCode &networkAirlineIcao, const QString &networkLiveryInfo, const QString &networkModelString, const BlackMisc::Aviation::CAirlineIcaoCode &networkAirlineIcao, const QString &networkLiveryInfo, const QString &networkModelString,
const BlackMisc::Simulation::CAircraftMatcherSetup &setup, const BlackMisc::Simulation::CAircraftMatcherSetup &setup,
BlackMisc::Simulation::CAircraftModel::ModelType type, BlackMisc::Simulation::CAircraftModel::ModelType type,
BlackMisc::CStatusMessageList *log = nullptr); BlackMisc::CStatusMessageList *log);
//! Try to find the corresponding data in DB and get best information for following matching //! Try to find the corresponding data in DB and get best information for following matching
//! \threadsafe //! \threadsafe
@@ -122,29 +122,32 @@ namespace BlackCore
//! \remark NOT running matching script //! \remark NOT running matching script
static BlackMisc::Simulation::CAircraftModel reverseLookupModel( static BlackMisc::Simulation::CAircraftModel reverseLookupModel(
const BlackMisc::Simulation::CAircraftModel &modelToLookup, const BlackMisc::Simulation::CAircraftModel &modelToLookup,
const QString &networkLiveryInfo, BlackMisc::CStatusMessageList *log = nullptr); const QString &networkLiveryInfo,
const BlackMisc::Simulation::CAircraftMatcherSetup &setup,
BlackMisc::CStatusMessageList *log);
//! Try to find the corresponding data in DB and get best information for following matching //! Try to find the corresponding data in DB and get best information for following matching
//! \threadsafe //! \threadsafe
//! \ingroup reverselookup //! \ingroup reverselookup
//! \remark Running matching script //! \remark Running matching script
static BlackMisc::Simulation::CAircraftModel reverseLookupModel( static BlackMisc::Simulation::CAircraftModel reverseLookupModelMs(
const BlackMisc::Simulation::CAircraftModel &modelToLookup, const BlackMisc::Simulation::CAircraftModel &modelToLookup,
const QString &networkLiveryInfo, const QString &networkLiveryInfo,
const BlackMisc::Simulation::CAircraftMatcherSetup &setup, const BlackMisc::Simulation::CAircraftMatcherSetup &setup,
BlackMisc::CStatusMessageList *log = nullptr); BlackMisc::CStatusMessageList *log);
//! Try to find model by model string //! Try to find model by model string
//! \threadsafe //! \threadsafe
//! \ingroup reverselookup //! \ingroup reverselookup
static BlackMisc::Simulation::CAircraftModel reverseLookupModelString( static BlackMisc::Simulation::CAircraftModel reverseLookupModelString(
const QString &modelString, const BlackMisc::Aviation::CCallsign &callsign, BlackMisc::CStatusMessageList *log = nullptr); const QString &modelString,
const BlackMisc::Aviation::CCallsign &callsign,
bool doLookupString, BlackMisc::CStatusMessageList *log);
//! Try to find model by id //! Try to find model by id
//! \threadsafe //! \threadsafe
//! \ingroup reverselookup //! \ingroup reverselookup
static BlackMisc::Simulation::CAircraftModel reverseLookupModelId( static BlackMisc::Simulation::CAircraftModel reverseLookupModelId(int id, const BlackMisc::Aviation::CCallsign &callsign, BlackMisc::CStatusMessageList *log);
int id, const BlackMisc::Aviation::CCallsign &callsign, BlackMisc::CStatusMessageList *log = nullptr);
//! Try to find the DB corresponding ICAO code //! Try to find the DB corresponding ICAO code
//! \threadsafe //! \threadsafe

View File

@@ -752,7 +752,7 @@ namespace BlackCore
// directly check model string // directly check model string
if (!modelString.isEmpty()) if (!modelString.isEmpty())
{ {
lookupModel = CAircraftMatcher::reverseLookupModelString(modelString, callsign, log); lookupModel = CAircraftMatcher::reverseLookupModelString(modelString, callsign, setup.isReverseLookupModelString(), log);
if (lookupModel.hasValidDbKey()) { break; } // found by model string if (lookupModel.hasValidDbKey()) { break; } // found by model string
} }
@@ -986,7 +986,7 @@ namespace BlackCore
const CCallsign callsign(situation.getCallsign()); const CCallsign callsign(situation.getCallsign());
Q_ASSERT_X(!callsign.isEmpty(), Q_FUNC_INFO, "Empty callsign"); Q_ASSERT_X(!callsign.isEmpty(), Q_FUNC_INFO, "Empty callsign");
if (isCopilotAircraft(callsign)) { return; } if (this->isCopilotAircraft(callsign)) { return; }
// update client info // update client info
this->autoAdjustCientGndCapability(situation); this->autoAdjustCientGndCapability(situation);

View File

@@ -164,7 +164,7 @@ namespace BlackGui
if (ui->cb_withReverseLookup->isChecked()) if (ui->cb_withReverseLookup->isChecked())
{ {
const QString liveryString(ui->comp_LiverySelector->getRawCombinedCode()); const QString liveryString(ui->comp_LiverySelector->getRawCombinedCode());
const CAircraftModel reverseModel = CAircraftMatcher::reverseLookupModel(remoteAircraft.getModel(), liveryString, m_matcher.getSetup(), &msgs); const CAircraftModel reverseModel = CAircraftMatcher::reverseLookupModelMs(remoteAircraft.getModel(), liveryString, m_matcher.getSetup(), &msgs);
remoteAircraft.setModel(reverseModel); // current model remoteAircraft.setModel(reverseModel); // current model
} }
@@ -187,7 +187,7 @@ namespace BlackGui
const CAircraftMatcherSetup setup = m_matcher.getSetup(); const CAircraftMatcherSetup setup = m_matcher.getSetup();
const CSimulatedAircraft remoteAircraft(createAircraft()); const CSimulatedAircraft remoteAircraft(createAircraft());
const QString livery(ui->comp_LiverySelector->getRawCombinedCode()); const QString livery(ui->comp_LiverySelector->getRawCombinedCode());
const CAircraftModel matched = CAircraftMatcher::reverseLookupModel(remoteAircraft.getModel(), livery, setup, &msgs); const CAircraftModel matched = CAircraftMatcher::reverseLookupModelMs(remoteAircraft.getModel(), livery, setup, &msgs);
ui->te_Results->setText(matched.toQString(true)); ui->te_Results->setText(matched.toQString(true));
ui->tvp_ResultMessages->updateContainer(msgs); ui->tvp_ResultMessages->updateContainer(msgs);
} }

View File

@@ -44,6 +44,23 @@ namespace BlackMisc
return true; return true;
} }
bool CAircraftMatcherSetup::isReverseLookupModelString() const
{
return this->getMatchingMode().testFlag(ReverseLookupModelString);
}
bool CAircraftMatcherSetup::isReverseLookupSwiftLiveryIds() const
{
return this->getMatchingMode().testFlag(ReverseLookupSwiftLiveryIds);
}
void CAircraftMatcherSetup::resetReverseLookup()
{
MatchingMode m = this->getMatchingMode();
m.setFlag(ReverseLookupDefault);
this->setMatchingMode(m);
}
bool CAircraftMatcherSetup::doRunMsReverseLookupScript() const bool CAircraftMatcherSetup::doRunMsReverseLookupScript() const
{ {
return m_msReverseEnabled && !m_msReverseLookupFile.isEmpty(); return m_msReverseEnabled && !m_msReverseLookupFile.isEmpty();

View File

@@ -128,6 +128,12 @@ namespace BlackMisc
//! Matching mode //! Matching mode
MatchingMode getMatchingMode() const { return static_cast<MatchingMode>(m_mode); } MatchingMode getMatchingMode() const { return static_cast<MatchingMode>(m_mode); }
//! Reverse lookup @{
bool isReverseLookupModelString() const;
bool isReverseLookupSwiftLiveryIds() const;
void resetReverseLookup();
//! @}
//! Get matching files @{ //! Get matching files @{
const QString &getMsReverseLookupFile() const { return m_msReverseLookupFile; } const QString &getMsReverseLookupFile() const { return m_msReverseLookupFile; }
const QString &getMsMatchingStageFile() const { return m_msMatchingStageFile; } const QString &getMsMatchingStageFile() const { return m_msMatchingStageFile; }