mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-09 21:45:34 +08:00
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:
@@ -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,19 +589,6 @@ namespace BlackCore
|
|||||||
// rerun
|
// rerun
|
||||||
rv.rerun = reverseModelProcessed->isRerun();
|
rv.rerun = reverseModelProcessed->isRerun();
|
||||||
|
|
||||||
// changed model by model string?
|
|
||||||
if (reverseModelProcessed->hasChangedModelString(inModel.getModelString()))
|
|
||||||
{
|
|
||||||
const CAircraftModel model = sApp->getWebDataServices()->getModelForModelString(reverseModelProcessed->getModelString());
|
|
||||||
if (model.hasValidDbKey())
|
|
||||||
{
|
|
||||||
// found full model from DB
|
|
||||||
rv.model = model;
|
|
||||||
rv.modified = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// changed model by model id?
|
// changed model by model id?
|
||||||
if (reverseModelProcessed->hasChangedModelId(inModel))
|
if (reverseModelProcessed->hasChangedModelId(inModel))
|
||||||
{
|
{
|
||||||
@@ -595,6 +602,32 @@ namespace BlackCore
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// changed model by model string?
|
||||||
|
if (reverseModelProcessed->hasChangedModelString(inModel.getModelString()))
|
||||||
|
{
|
||||||
|
const QString modelString = reverseModelProcessed->getModelString();
|
||||||
|
const CAircraftModel model = sApp->getWebDataServices()->getModelForModelString(modelString);
|
||||||
|
if (model.hasValidDbKey())
|
||||||
|
{
|
||||||
|
// found full model from DB
|
||||||
|
rv.model = model;
|
||||||
|
rv.modified = true;
|
||||||
|
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
|
||||||
if (reverseModelProcessed->hasChangedAircraftIcao(matchedModel.getAircraftIcaoCode()))
|
if (reverseModelProcessed->hasChangedAircraftIcao(matchedModel.getAircraftIcaoCode()))
|
||||||
{
|
{
|
||||||
@@ -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(); }
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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())
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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; }
|
||||||
@@ -230,7 +233,7 @@ namespace BlackMisc
|
|||||||
|
|
||||||
//! Mode by flags
|
//! Mode by flags
|
||||||
static MatchingMode matchingMode(bool revModelString, bool revLiveryIds,
|
static MatchingMode matchingMode(bool revModelString, bool revLiveryIds,
|
||||||
bool byModelString, bool byIcaoDataAircraft1st, bool byIcaoDataAirline1st,
|
bool byModelString, bool byIcaoDataAircraft1st, bool byIcaoDataAirline1st,
|
||||||
bool byFamily, bool byLivery, bool byCombinedType,
|
bool byFamily, bool byLivery, bool byCombinedType,
|
||||||
bool byForceMilitary, bool byForceCivilian,
|
bool byForceMilitary, bool byForceCivilian,
|
||||||
bool byVtol, bool byGliderCategory, bool byMilitaryCategory, bool bySmallAircraftCategory,
|
bool byVtol, bool byGliderCategory, bool byMilitaryCategory, bool bySmallAircraftCategory,
|
||||||
|
|||||||
Reference in New Issue
Block a user