Ref T705, use model set for reverse lookup

* allow finding model string from set, for NON DB models
* pass model set as parameter
This commit is contained in:
Klaus Basan
2019-07-20 14:23:46 +02:00
parent 68e134edcb
commit a8a9d29fa7
6 changed files with 149 additions and 42 deletions

View File

@@ -405,18 +405,35 @@ namespace BlackCore
{ {
CMatchingUtils::addLogDetailsToList(log, remoteAircraft, QStringLiteral("Matching script: Matching stage script used")); CMatchingUtils::addLogDetailsToList(log, remoteAircraft, QStringLiteral("Matching script: Matching stage script used"));
const MatchingScriptReturnValues rv = CAircraftMatcher::matchingStageScript(remoteAircraft.getModel(), matchedModel, setup, modelSet, log); const MatchingScriptReturnValues rv = CAircraftMatcher::matchingStageScript(remoteAircraft.getModel(), matchedModel, setup, modelSet, log);
CAircraftModel matchedModelMs = matchedModel;
if (rv.runScriptAndModified()) if (rv.runScriptAndModified())
{ {
matchedModel = rv.model; matchedModelMs = rv.model;
didRunAndModifyMatchingScript = true; didRunAndModifyMatchingScript = true;
} }
if (rv.runScriptModifiedAndRerun()) if (rv.runScriptModifiedAndRerun())
{ {
CMatchingUtils::addLogDetailsToList(log, remoteAircraft, QStringLiteral("Matching script: Modified values and re-run requested")); CMatchingUtils::addLogDetailsToList(log, remoteAircraft, QStringLiteral("Matching script: Modified values and re-run requested"));
CMatchingUtils::addLogDetailsToList(log, remoteAircraft, QStringLiteral("Matching script: Now using model: '%1'").arg(matchedModel.toQString(true)));
CSimulatedAircraft rerunAircraft(remoteAircraft); CSimulatedAircraft rerunAircraft(remoteAircraft);
rerunAircraft.setModel(matchedModel); rerunAircraft.setModel(matchedModelMs);
matchedModel = CAircraftMatcher::getClosestMatch(rerunAircraft, whatToLog, log, false); CStatusMessageList log2ndRun;
matchedModelMs = CAircraftMatcher::getClosestMatch(rerunAircraft, whatToLog, log ? &log2ndRun : nullptr, false);
if (log) { log->push_back(log2ndRun); }
// the script can fuckup the model, leading to an empty model string or such
matchedModelMs.setCallsign(remoteAircraft.getCallsign());
if (matchedModelMs.hasModelString())
{
matchedModel = matchedModelMs;
}
else
{
CMatchingUtils::addLogDetailsToList(log, remoteAircraft, QStringLiteral("Matching script: Ignoring model without model string after running the script"));
}
} }
} }
else else
@@ -453,7 +470,10 @@ namespace BlackCore
return matchedModel; return matchedModel;
} }
CAircraftModel CAircraftMatcher::reverseLookupModel(const CCallsign &callsign, const CAircraftIcaoCode &networkAircraftIcao, const CAirlineIcaoCode &networkAirlineIcao, const QString &networkLiveryInfo, const QString &networkModelString, const CAircraftMatcherSetup &setup, CAircraftModel::ModelType type, CStatusMessageList *log) CAircraftModel CAircraftMatcher::reverseLookupModel(
const CCallsign &callsign, const CAircraftIcaoCode &networkAircraftIcao,
const CAirlineIcaoCode &networkAirlineIcao, const QString &networkLiveryInfo, const QString &networkModelString,
const CAircraftMatcherSetup &setup, const CAircraftModelList &modelSet, CAircraftModel::ModelType type, CStatusMessageList *log)
{ {
Q_UNUSED(setup); Q_UNUSED(setup);
@@ -462,19 +482,18 @@ 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, setup, log); model = CAircraftMatcher::reverseLookupModel(model, networkLiveryInfo, setup, modelSet, log);
model.setModelType(CAircraftModel::TypeReverseLookup); model.setModelType(CAircraftModel::TypeReverseLookup);
return model; return model;
} }
MatchingScriptReturnValues CAircraftMatcher::reverseLookupScript(const CAircraftModel &inModel, const CAircraftMatcherSetup &setup, CStatusMessageList *log) MatchingScriptReturnValues CAircraftMatcher::reverseLookupScript(const CAircraftModel &inModel, const CAircraftMatcherSetup &setup, const CAircraftModelList &modelSet, CStatusMessageList *log)
{ {
if (!setup.doRunMsReverseLookupScript()) { return MatchingScriptReturnValues(inModel); } if (!setup.doRunMsReverseLookupScript()) { return MatchingScriptReturnValues(inModel); }
if (!sApp || sApp->isShuttingDown() || !sApp->hasWebDataServices()) { return inModel; } if (!sApp || sApp->isShuttingDown() || !sApp->hasWebDataServices()) { return inModel; }
const QString js = CFileUtils::readFileToString(setup.getMsReverseLookupFile()); const QString js = CFileUtils::readFileToString(setup.getMsReverseLookupFile());
static const CAircraftModelList noModelSet; const MatchingScriptReturnValues rv = CAircraftMatcher::matchingScript(js, inModel, inModel, setup, modelSet, ReverseLookup, log);
const MatchingScriptReturnValues rv = CAircraftMatcher::matchingScript(js, inModel, inModel, setup, noModelSet, ReverseLookup, log);
return rv; return rv;
} }
@@ -508,6 +527,7 @@ namespace BlackCore
{ {
CLogUtilities::addLogDetailsToList(log, callsign, QStringLiteral("Matching script (%1): '%2'").arg(msToString(ms), lf)); CLogUtilities::addLogDetailsToList(log, callsign, QStringLiteral("Matching script (%1): '%2'").arg(msToString(ms), lf));
CLogUtilities::addLogDetailsToList(log, callsign, QStringLiteral("Matching script input model (%1): '%2'").arg(inModel.toQString(true))); CLogUtilities::addLogDetailsToList(log, callsign, QStringLiteral("Matching script input model (%1): '%2'").arg(inModel.toQString(true)));
CLogUtilities::addLogDetailsToList(log, callsign, QStringLiteral("Matching script models: %1").arg(modelSet.coverageSummary()));
} }
QJSEngine engine; QJSEngine engine;
@@ -526,7 +546,7 @@ namespace BlackCore
MSInOutValues matchedObject(matchedModel); // same as inModel for reverse lookup MSInOutValues matchedObject(matchedModel); // same as inModel for reverse lookup
matchedObject.evaluateChanges(inModel.getAircraftIcaoCode(), inModel.getAirlineIcaoCode()); matchedObject.evaluateChanges(inModel.getAircraftIcaoCode(), inModel.getAirlineIcaoCode());
MSInOutValues outObject(matchedModel); // set default values for out object MSInOutValues outObject(matchedModel); // set default values for out object
MSModelSet modelSetObject(modelSet); // empty in reverse lookup MSModelSet modelSetObject(modelSet); // as passed
modelSetObject.initByAircraftAndAirline(inModel.getAircraftIcaoCode(), inModel.getAirlineIcaoCode()); modelSetObject.initByAircraftAndAirline(inModel.getAircraftIcaoCode(), inModel.getAirlineIcaoCode());
MSWebServices webServices; // web services encapsulated MSWebServices webServices; // web services encapsulated
@@ -569,10 +589,10 @@ namespace BlackCore
// rerun // rerun
rv.rerun = reverseModelProcessed->isRerun(); rv.rerun = reverseModelProcessed->isRerun();
// changed model by model string? // changed model by model id?
if (reverseModelProcessed->hasChangedModelString(inModel.getModelString())) if (reverseModelProcessed->hasChangedModelId(inModel))
{ {
const CAircraftModel model = sApp->getWebDataServices()->getModelForModelString(reverseModelProcessed->getModelString()); const CAircraftModel model = sApp->getWebDataServices()->getModelForDbKey(reverseModelProcessed->getDbModelId());
if (model.hasValidDbKey()) if (model.hasValidDbKey())
{ {
// found full model from DB // found full model from DB
@@ -582,10 +602,11 @@ namespace BlackCore
} }
} }
// changed model by model id? // changed model by model string?
if (reverseModelProcessed->hasChangedModelId(inModel)) if (reverseModelProcessed->hasChangedModelString(inModel.getModelString()))
{ {
const CAircraftModel model = sApp->getWebDataServices()->getModelForDbKey(reverseModelProcessed->getDbModelId()); const QString modelString = reverseModelProcessed->getModelString();
const CAircraftModel model = sApp->getWebDataServices()->getModelForModelString(modelString);
if (model.hasValidDbKey()) if (model.hasValidDbKey())
{ {
// found full model from DB // found full model from DB
@@ -593,6 +614,18 @@ namespace BlackCore
rv.modified = true; rv.modified = true;
break; break;
} }
// search for model string in set, even if it is not in the DB
const CAircraftModel modeSetModel = CAircraftMatcher::reverseLookupModelStringInSet(modelString, callsign, modelSet, true, log);
if (modeSetModel.hasModelString())
{
CLogUtilities::addLogDetailsToList(log, callsign, QStringLiteral("Matching script using model from set: '%1'").arg(modelString));
// NON DB model from model set
rv.model = modeSetModel;
rv.modified = true;
break;
}
} }
// changed aircraft ICAO // changed aircraft ICAO
@@ -648,7 +681,7 @@ namespace BlackCore
return rv; return rv;
} }
CAircraftModel CAircraftMatcher::reverseLookupModel(const CAircraftModel &modelToLookup, const QString &networkLiveryInfo, const CAircraftMatcherSetup &setup, CStatusMessageList *log) CAircraftModel CAircraftMatcher::reverseLookupModel(const CAircraftModel &modelToLookup, const QString &networkLiveryInfo, const CAircraftMatcherSetup &setup, const CAircraftModelList &modelSet, CStatusMessageList *log)
{ {
if (!sApp || sApp->isShuttingDown() || !sApp->hasWebDataServices()) { return CAircraftModel(); } if (!sApp || sApp->isShuttingDown() || !sApp->hasWebDataServices()) { return CAircraftModel(); }
@@ -676,13 +709,24 @@ namespace BlackCore
} }
else else
{ {
const QString modelString = modelToLookup.getModelString();
// 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, setup.isReverseLookupModelString(), log); const CAircraftModel modelFromDb = CAircraftMatcher::reverseLookupModelStringInDB(modelString, callsign, setup.isReverseLookupModelString(), log);
if (modelFromDb.hasValidDbKey()) if (modelFromDb.hasValidDbKey())
{ {
model = modelFromDb; model = modelFromDb;
break; // done here break; // done here
} }
// const bool useNonDbEntries = setup.isDbDataOnly();
const bool useNonDbEntries = true;
const CAircraftModel modelFromSet = CAircraftMatcher::reverseLookupModelStringInSet(modelString, callsign, modelSet, useNonDbEntries, log);
if (modelFromSet.hasModelString())
{
model = modelFromSet;
break; // done here
}
} }
} }
@@ -821,24 +865,26 @@ namespace BlackCore
return model; return model;
} }
CAircraftModel CAircraftMatcher::reverseLookupModelMs(const CAircraftModel &modelToLookup, const QString &networkLiveryInfo, const CAircraftMatcherSetup &setup, CStatusMessageList *log) CAircraftModel CAircraftMatcher::reverseLookupModelMs(const CAircraftModel &modelToLookup, const QString &networkLiveryInfo, const CAircraftMatcherSetup &setup, const CAircraftModelList &modelSet, CStatusMessageList *log)
{ {
CAircraftModel reverseModel = reverseLookupModel(modelToLookup, networkLiveryInfo, setup, log); CAircraftModel reverseModel = reverseLookupModel(modelToLookup, networkLiveryInfo, setup, modelSet, log);
if (!setup.doRunMsReverseLookupScript()) { return reverseModel; } if (!setup.doRunMsReverseLookupScript()) { return reverseModel; }
const CCallsign cs = modelToLookup.getCallsign(); const CCallsign cs = modelToLookup.getCallsign();
const MatchingScriptReturnValues rv = CAircraftMatcher::reverseLookupScript(reverseModel, setup, log); const MatchingScriptReturnValues rv = CAircraftMatcher::reverseLookupScript(reverseModel, setup, modelSet, log);
if (rv.runScriptModifiedAndRerun()) if (rv.runScriptModifiedAndRerun())
{ {
CLogUtilities::addLogDetailsToList(log, cs, QStringLiteral("Matching script: Modified value and requested rerun")); CLogUtilities::addLogDetailsToList(log, cs, QStringLiteral("Matching script: Modified value and requested rerun"));
// no script the 2nd time
CAircraftMatcherSetup setupRerun(setup); CAircraftMatcherSetup setupRerun(setup);
setupRerun.resetReverseLookup(); setupRerun.resetReverseLookup();
reverseModel = CAircraftMatcher::reverseLookupModel(rv.model, networkLiveryInfo, setupRerun, log); reverseModel = CAircraftMatcher::reverseLookupModel(rv.model, networkLiveryInfo, setupRerun, modelSet, 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, bool doLookupString, CStatusMessageList *log) CAircraftModel CAircraftMatcher::reverseLookupModelStringInDB(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 (!doLookupString)
@@ -868,6 +914,48 @@ namespace BlackCore
return model; return model;
} }
CAircraftModel CAircraftMatcher::reverseLookupModelStringInSet(const QString &modelString, const CCallsign &callsign, const CAircraftModelList &modelSet, bool useNonDbEntries, CStatusMessageList *log)
{
if (!sApp || sApp->isShuttingDown() || !sApp->hasWebDataServices()) { return CAircraftModel(); }
if (modelString.isEmpty())
{
if (log) { CLogUtilities::addLogDetailsToList(log, callsign, QStringLiteral("Empty model string for lookup in %1 models").arg(modelSet.size())); }
return CAircraftModel();
}
if (modelSet.isEmpty())
{
if (log) { CLogUtilities::addLogDetailsToList(log, callsign, QStringLiteral("Empty models, ignoring '%1'").arg(modelString)); }
return CAircraftModel();
}
CAircraftModel model = modelSet.findFirstByModelStringOrDefault(modelString, Qt::CaseInsensitive);
if (!model.hasModelString())
{
if (log) { CLogUtilities::addLogDetailsToList(log, callsign, QStringLiteral("Model '%1' not found in %2 models").arg(modelString).arg(modelSet.size())); }
return CAircraftModel();
}
const bool isDBModel = model.hasValidDbKey();
if (log)
{
if (isDBModel)
{
CLogUtilities::addLogDetailsToList(log, callsign, QStringLiteral("Found DB model in %1 models for model string '%2'").arg(modelSet.size()).arg(model.getModelStringAndDbKey()));
}
else
{
CLogUtilities::addLogDetailsToList(log, callsign, QStringLiteral("Found NON DB model in %1 models for model string '%2'").arg(modelSet.size()).arg(model.getModelString()));
}
}
if (!isDBModel && !useNonDbEntries) { return CAircraftModel(); } // ignore DB entries
// found
model.setCallsign(callsign);
model.setModelType(isDBModel ? CAircraftModel::TypeReverseLookup : CAircraftModel::TypeOwnSimulatorModel);
return model;
}
CAircraftModel CAircraftMatcher::reverseLookupModelId(int id, const CCallsign &callsign, CStatusMessageList *log) CAircraftModel CAircraftMatcher::reverseLookupModelId(int id, const CCallsign &callsign, CStatusMessageList *log)
{ {
if (!sApp || sApp->isShuttingDown() || !sApp->hasWebDataServices()) { return CAircraftModel(); } if (!sApp || sApp->isShuttingDown() || !sApp->hasWebDataServices()) { return CAircraftModel(); }

View File

@@ -117,7 +117,7 @@ namespace BlackCore
//! Run the network reverse lookup script //! Run the network reverse lookup script
//! \threadsafe //! \threadsafe
//! \ingroup reverselookup //! \ingroup reverselookup
static BlackMisc::Simulation::MatchingScriptReturnValues reverseLookupScript(const BlackMisc::Simulation::CAircraftModel &inModel, const BlackMisc::Simulation::CAircraftMatcherSetup &setup, BlackMisc::CStatusMessageList *log); static BlackMisc::Simulation::MatchingScriptReturnValues reverseLookupScript(const BlackMisc::Simulation::CAircraftModel &inModel, const BlackMisc::Simulation::CAircraftMatcherSetup &setup, const BlackMisc::Simulation::CAircraftModelList &modelSet, BlackMisc::CStatusMessageList *log);
//! Run the matching stage lookup script //! Run the matching stage lookup script
//! \threadsafe //! \threadsafe
@@ -138,6 +138,7 @@ namespace BlackCore
const BlackMisc::Aviation::CAircraftIcaoCode &networkAircraftIcao, const BlackMisc::Aviation::CAircraftIcaoCode &networkAircraftIcao,
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,
const BlackMisc::Simulation::CAircraftModelList &modelSet,
BlackMisc::Simulation::CAircraftModel::ModelType type, BlackMisc::Simulation::CAircraftModel::ModelType type,
BlackMisc::CStatusMessageList *log); BlackMisc::CStatusMessageList *log);
@@ -149,6 +150,7 @@ namespace BlackCore
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,
const BlackMisc::Simulation::CAircraftModelList &modelSet,
BlackMisc::CStatusMessageList *log); 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
@@ -159,16 +161,26 @@ namespace BlackCore
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,
const BlackMisc::Simulation::CAircraftModelList &modelSet,
BlackMisc::CStatusMessageList *log); 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 reverseLookupModelStringInDB(
const QString &modelString, const QString &modelString,
const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Aviation::CCallsign &callsign,
bool doLookupString, BlackMisc::CStatusMessageList *log); bool doLookupString, BlackMisc::CStatusMessageList *log);
//! Try to find model by model string in set
//! \threadsafe
//! \remark mostly needed to work witn NON-DB values in matching script
//! \ingroup reverselookup
static BlackMisc::Simulation::CAircraftModel reverseLookupModelStringInSet(
const QString &modelString,
const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Simulation::CAircraftModelList &modelSet,
bool useNonDbEntries, BlackMisc::CStatusMessageList *log);
//! Try to find model by id //! Try to find model by id
//! \threadsafe //! \threadsafe
//! \ingroup reverselookup //! \ingroup reverselookup

View File

@@ -847,13 +847,14 @@ namespace BlackCore
if (hasAnyId) { this->markAsSwiftClient(callsign); } if (hasAnyId) { this->markAsSwiftClient(callsign); }
CAircraftModel lookupModel; // result CAircraftModel lookupModel; // result
const CAircraftModelList modelSet = this->getModelSet();
const CAircraftMatcherSetup setup = m_matchingSettings.get(); const CAircraftMatcherSetup setup = m_matchingSettings.get();
do do
{ {
// directly check model string // directly check model string
if (!modelString.isEmpty()) if (!modelString.isEmpty())
{ {
lookupModel = CAircraftMatcher::reverseLookupModelString(modelString, callsign, setup.isReverseLookupModelString(), log); lookupModel = CAircraftMatcher::reverseLookupModelStringInDB(modelString, callsign, setup.isReverseLookupModelString(), log);
if (lookupModel.hasValidDbKey()) { break; } // found by model string if (lookupModel.hasValidDbKey()) { break; } // found by model string
} }
@@ -930,7 +931,7 @@ namespace BlackCore
// INFO: CModelMatcherComponent::reverseLookup() contains the simulated lookup // INFO: CModelMatcherComponent::reverseLookup() contains the simulated lookup
// changed with T701: resolve first against model set, then all DB data // changed with T701: resolve first against model set, then all DB data
// if an airline is ambiguous most likely the one in the set is the best choice // if an airline is ambiguous most likely the one in the set is the best choice
airlineIcao = CAircraftMatcher::failoverValidAirlineIcaoDesignatorModelsFirst(callsign, airlineIcaoString, airlineIcaoFromFp, true, airlineNameFromFp, telephonyFromFp, this->getModelSet(), log); airlineIcao = CAircraftMatcher::failoverValidAirlineIcaoDesignatorModelsFirst(callsign, airlineIcaoString, airlineIcaoFromFp, true, airlineNameFromFp, telephonyFromFp, modelSet, log);
// not found, create a seatch patterm // not found, create a seatch patterm
if (!airlineIcao.isLoadedFromDb()) if (!airlineIcao.isLoadedFromDb())
@@ -948,7 +949,7 @@ namespace BlackCore
CLogUtilities::addLogDetailsToList(log, callsign, QStringLiteral("Used airline ICAO: '%1'").arg(airlineIcao.toQString(true)), CAirspaceMonitor::getLogCategories()); CLogUtilities::addLogDetailsToList(log, callsign, QStringLiteral("Used airline ICAO: '%1'").arg(airlineIcao.toQString(true)), CAirspaceMonitor::getLogCategories());
// matching script is used below // matching script is used below
lookupModel = CAircraftMatcher::reverseLookupModel(callsign, aircraftIcao, airlineIcao, liveryString, modelString, setup, type, log); lookupModel = CAircraftMatcher::reverseLookupModel(callsign, aircraftIcao, airlineIcao, liveryString, modelString, setup, modelSet, type, log);
} }
while (false); while (false);
@@ -958,7 +959,7 @@ namespace BlackCore
// script // script
if (runMatchinScript && setup.doRunMsReverseLookupScript()) if (runMatchinScript && setup.doRunMsReverseLookupScript())
{ {
const MatchingScriptReturnValues rv = CAircraftMatcher::reverseLookupScript(lookupModel, setup, log); const MatchingScriptReturnValues rv = CAircraftMatcher::reverseLookupScript(lookupModel, setup, modelSet, log);
if (rv.runScriptAndModified()) if (rv.runScriptAndModified())
{ {
if (rv.runScriptAndRerun()) if (rv.runScriptAndRerun())

View File

@@ -165,7 +165,9 @@ 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::reverseLookupModelMs(remoteAircraft.getModel(), liveryString, m_matcher.getSetup(), &msgs); const CAircraftModelList modelSet = m_matcher.getModelSet();
const CAircraftMatcherSetup setup = m_matcher.getSetup();
const CAircraftModel reverseModel = CAircraftMatcher::reverseLookupModelMs(remoteAircraft.getModel(), liveryString, setup, modelSet, &msgs);
remoteAircraft.setModel(reverseModel); // current model remoteAircraft.setModel(reverseModel); // current model
} }
@@ -187,10 +189,11 @@ namespace BlackGui
CStatusMessageList msgs; CStatusMessageList msgs;
m_matcher.setDefaultModel(CModelMatcherComponent::defaultModel()); m_matcher.setDefaultModel(CModelMatcherComponent::defaultModel());
const CAircraftModelList modelSet = m_matcher.getModelSet();
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::reverseLookupModelMs(remoteAircraft.getModel(), livery, setup, &msgs); const CAircraftModel matched = CAircraftMatcher::reverseLookupModelMs(remoteAircraft.getModel(), livery, setup, modelSet, &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);
} }
@@ -275,12 +278,12 @@ namespace BlackGui
return model; return model;
} }
MatchingScriptReturnValues CModelMatcherComponent::matchingScript(const CAircraftModel &inModel, const CAircraftMatcherSetup &setup, CStatusMessageList &msgs) MatchingScriptReturnValues CModelMatcherComponent::matchingScript(const CAircraftModel &inModel, const CAircraftMatcherSetup &setup, const CAircraftModelList &modelSet, CStatusMessageList &msgs)
{ {
// Script // Script
if (setup.doRunMsReverseLookupScript()) if (setup.doRunMsReverseLookupScript())
{ {
const MatchingScriptReturnValues rv = CAircraftMatcher::reverseLookupScript(inModel, setup, &msgs); const MatchingScriptReturnValues rv = CAircraftMatcher::reverseLookupScript(inModel, setup, modelSet, &msgs);
if (rv.runScriptAndModified()) if (rv.runScriptAndModified())
{ {
return rv; return rv;

View File

@@ -11,8 +11,8 @@
#ifndef BLACKGUI_COMPONENT_MODELMATCHERCOMPONENT_H #ifndef BLACKGUI_COMPONENT_MODELMATCHERCOMPONENT_H
#define BLACKGUI_COMPONENT_MODELMATCHERCOMPONENT_H #define BLACKGUI_COMPONENT_MODELMATCHERCOMPONENT_H
#include "blackcore/aircraftmatcher.h"
#include "blackgui/blackguiexport.h" #include "blackgui/blackguiexport.h"
#include "blackcore/aircraftmatcher.h"
#include "blackmisc/simulation/settings/modelmatchersettings.h" #include "blackmisc/simulation/settings/modelmatchersettings.h"
#include "blackmisc/simulation/aircraftmodel.h" #include "blackmisc/simulation/aircraftmodel.h"
#include "blackmisc/simulation/simulatedaircraft.h" #include "blackmisc/simulation/simulatedaircraft.h"
@@ -95,7 +95,7 @@ namespace BlackGui
BlackMisc::Simulation::CAircraftModel defaultModel() const; BlackMisc::Simulation::CAircraftModel defaultModel() const;
//! Run matching script //! Run matching script
static BlackMisc::Simulation::MatchingScriptReturnValues matchingScript(const BlackMisc::Simulation::CAircraftModel &inModel, const BlackMisc::Simulation::CAircraftMatcherSetup &setup, BlackMisc::CStatusMessageList &msgs); static BlackMisc::Simulation::MatchingScriptReturnValues matchingScript(const BlackMisc::Simulation::CAircraftModel &inModel, const BlackMisc::Simulation::CAircraftMatcherSetup &setup, const BlackMisc::Simulation::CAircraftModelList &modelSet, BlackMisc::CStatusMessageList &msgs);
QScopedPointer<Ui::CModelMatcherComponent> ui; QScopedPointer<Ui::CModelMatcherComponent> ui;
QPointer<Views::CAircraftModelView> m_workbenchView; //!< an external workbenc QPointer<Views::CAircraftModelView> m_workbenchView; //!< an external workbenc

View File

@@ -134,6 +134,9 @@ namespace BlackMisc
void resetReverseLookup(); void resetReverseLookup();
//! @} //! @}
//! DB data?
bool isDbDataOnly() const { return this->getMatchingMode().testFlag(ExcludeNoDbData); }
//! 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; }