mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-03-30 11:55:35 +08:00
Ref T701, matcher functions to used model set in matching, and better resolve ambiguous airline ICAOs
* reduce by telephony/airline name * search in model set first for airline ICAO Rational: If a user flies with modelset this most likely represents the airlines needed most in his area
This commit is contained in:
committed by
Mat Sutcliffe
parent
1d4d3d81d0
commit
c9ec28442e
@@ -109,7 +109,7 @@ namespace BlackCore
|
||||
return code;
|
||||
}
|
||||
|
||||
CAirlineIcaoCode CAircraftMatcher::failoverValidAirlineIcaoDesignator(const CCallsign &callsign, const QString &primaryIcao, const QString &secondaryIcao, bool airlineFromCallsign, const CAircraftModelList &models, CStatusMessageList *log)
|
||||
CAirlineIcaoCode CAircraftMatcher::failoverValidAirlineIcaoDesignator(const CCallsign &callsign, const QString &primaryIcao, const QString &secondaryIcao, bool airlineFromCallsign, const QString &airlineName, const QString &airlineTelephony, const CAircraftModelList &models, CStatusMessageList *log)
|
||||
{
|
||||
CMatchingUtils::addLogDetailsToList(log, callsign,
|
||||
QStringLiteral("Find airline designator from 1st: '%1' 2nd: '%2' callsign: '%3', use airline callsign: %4, models: %5").
|
||||
@@ -121,14 +121,29 @@ namespace BlackCore
|
||||
return CAirlineIcaoCode();
|
||||
}
|
||||
|
||||
static const QString info("Multiple models (%1) with airline ICAOs for '%2'");
|
||||
CAirlineIcaoCode code;
|
||||
|
||||
do
|
||||
{
|
||||
bool reduced = false;
|
||||
if (!primaryIcao.isEmpty())
|
||||
{
|
||||
const CAircraftModelList modelsWithAirline = models.findByIcaoDesignators({}, primaryIcao);
|
||||
CAircraftModelList modelsWithAirline = models.findByIcaoDesignators({}, primaryIcao);
|
||||
const QMap<CAirlineIcaoCode, int> countPerAirline = modelsWithAirline.countPerAirlineIcao();
|
||||
if (countPerAirline.size() == 1)
|
||||
{
|
||||
code = countPerAirline.firstKey();
|
||||
CMatchingUtils::addLogDetailsToList(log, callsign, QStringLiteral("Only found 1 airline ICAO '%1' in %2 models").arg(countPerAirline.firstKey().getDesignatorDbKey()).arg(models.size()), getLogCategories());
|
||||
break;
|
||||
}
|
||||
|
||||
if (modelsWithAirline.size() > 0)
|
||||
{
|
||||
if (modelsWithAirline.size() > 1)
|
||||
{
|
||||
modelsWithAirline = CAircraftMatcher::ifPossibleReduceByAirlineNameTelephonyDesignator(callsign, airlineName, airlineTelephony, modelsWithAirline, info.arg(modelsWithAirline.size()).arg(primaryIcao), reduced, log);
|
||||
}
|
||||
code = modelsWithAirline.getAirlineWithMaxCount();
|
||||
CMatchingUtils::addLogDetailsToList(log, callsign, QStringLiteral("Using primary airline ICAO '%1' found '%2'").arg(primaryIcao, code.getDesignatorDbKey()), getLogCategories());
|
||||
break;
|
||||
@@ -137,9 +152,21 @@ namespace BlackCore
|
||||
|
||||
if (!secondaryIcao.isEmpty())
|
||||
{
|
||||
const CAircraftModelList modelsWithAirline = models.findByIcaoDesignators({}, secondaryIcao);
|
||||
CAircraftModelList modelsWithAirline = models.findByIcaoDesignators({}, secondaryIcao);
|
||||
const QMap<CAirlineIcaoCode, int> countPerAirline = modelsWithAirline.countPerAirlineIcao();
|
||||
if (countPerAirline.size() == 1)
|
||||
{
|
||||
code = countPerAirline.firstKey();
|
||||
CMatchingUtils::addLogDetailsToList(log, callsign, QStringLiteral("Only found 1 airline ICAO '%1' in %2 models").arg(countPerAirline.firstKey().getDesignatorDbKey()).arg(models.size()), getLogCategories());
|
||||
break;
|
||||
}
|
||||
|
||||
if (modelsWithAirline.size() > 0)
|
||||
{
|
||||
if (modelsWithAirline.size() > 1)
|
||||
{
|
||||
modelsWithAirline = CAircraftMatcher::ifPossibleReduceByAirlineNameTelephonyDesignator(callsign, airlineName, airlineTelephony, modelsWithAirline, info.arg(modelsWithAirline.size()).arg(secondaryIcao), reduced, log);
|
||||
}
|
||||
code = modelsWithAirline.getAirlineWithMaxCount();
|
||||
CMatchingUtils::addLogDetailsToList(log, callsign, QStringLiteral("Using secondary airline ICAO '%1' found '%2'").arg(primaryIcao, code.getDesignatorDbKey()), getLogCategories());
|
||||
break;
|
||||
@@ -148,10 +175,28 @@ namespace BlackCore
|
||||
|
||||
if (airlineFromCallsign)
|
||||
{
|
||||
const QString airlinePrefix = callsign.getAirlinePrefix();
|
||||
const CAircraftModelList modelsWithAirline = models.findByIcaoDesignators({}, airlinePrefix);
|
||||
QString flightNumber;
|
||||
const QString airlinePrefix = callsign.getAirlinePrefix(flightNumber);
|
||||
if (airlinePrefix.isEmpty() || flightNumber.isEmpty())
|
||||
{
|
||||
CMatchingUtils::addLogDetailsToList(log, callsign, QStringLiteral("Callsign '%1' cannot be split in airline '%1'/ flight number '%2'").arg(callsign.toQString(), flightNumber), getLogCategories());
|
||||
break;
|
||||
}
|
||||
|
||||
CAircraftModelList modelsWithAirline = models.findByIcaoDesignators({}, airlinePrefix);
|
||||
const QMap<CAirlineIcaoCode, int> countPerAirline = modelsWithAirline.countPerAirlineIcao();
|
||||
if (countPerAirline.size() == 1)
|
||||
{
|
||||
code = countPerAirline.firstKey();
|
||||
CMatchingUtils::addLogDetailsToList(log, callsign, QStringLiteral("Only found 1 airline ICAO '%1' in %2 models").arg(countPerAirline.firstKey().getDesignatorDbKey()).arg(models.size()), getLogCategories());
|
||||
break;
|
||||
}
|
||||
if (modelsWithAirline.size() > 0)
|
||||
{
|
||||
if (modelsWithAirline.size() > 1)
|
||||
{
|
||||
modelsWithAirline = CAircraftMatcher::ifPossibleReduceByAirlineNameTelephonyDesignator(callsign, airlineName, airlineTelephony, modelsWithAirline, info.arg(modelsWithAirline.size()).arg(airlinePrefix), reduced, log);
|
||||
}
|
||||
code = modelsWithAirline.getAirlineWithMaxCount();
|
||||
CMatchingUtils::addLogDetailsToList(log, callsign, QStringLiteral("Using secondary airline ICAO '%1' found '%2'").arg(primaryIcao, code.getDesignatorDbKey()), getLogCategories());
|
||||
break;
|
||||
@@ -164,11 +209,11 @@ namespace BlackCore
|
||||
return code;
|
||||
}
|
||||
|
||||
CAirlineIcaoCode CAircraftMatcher::failoverValidAirlineIcaoDesignatorModelsFirst(const CCallsign &callsign, const QString &primaryIcao, const QString &secondaryIcao, bool airlineFromCallsign, const CAircraftModelList &models, CStatusMessageList *log)
|
||||
CAirlineIcaoCode CAircraftMatcher::failoverValidAirlineIcaoDesignatorModelsFirst(const CCallsign &callsign, const QString &primaryIcao, const QString &secondaryIcao, bool airlineFromCallsign, const QString &airlineName, const QString &airlineTelephony, const CAircraftModelList &models, CStatusMessageList *log)
|
||||
{
|
||||
if (!models.isEmpty())
|
||||
{
|
||||
const CAirlineIcaoCode airline = CAircraftMatcher::failoverValidAirlineIcaoDesignator(callsign, primaryIcao, secondaryIcao, airlineFromCallsign, models, log);
|
||||
const CAirlineIcaoCode airline = CAircraftMatcher::failoverValidAirlineIcaoDesignator(callsign, primaryIcao, secondaryIcao, airlineFromCallsign, airlineName, airlineTelephony, models, log);
|
||||
if (airline.hasValidDbKey()) { return airline; }
|
||||
}
|
||||
|
||||
@@ -1667,6 +1712,24 @@ namespace BlackCore
|
||||
return outList;
|
||||
}
|
||||
|
||||
CAircraftModelList CAircraftMatcher::ifPossibleReduceByAirlineNameTelephonyDesignator(const CCallsign &cs, const QString &airlineName, const QString &telephony, const CAircraftModelList &inList, const QString &info, bool &reduced, CStatusMessageList *log)
|
||||
{
|
||||
reduced = false;
|
||||
if (inList.isEmpty())
|
||||
{
|
||||
if (log) { CMatchingUtils::addLogDetailsToList(log, cs, info % u" Empty input list, cannot reduce", getLogCategories()); }
|
||||
return inList;
|
||||
}
|
||||
|
||||
if (telephony.isEmpty() && airlineName.isEmpty())
|
||||
{
|
||||
if (log) { CMatchingUtils::addLogDetailsToList(log, cs, info % u" No name/telephony, cannot reduce " % QString::number(inList.size()) % u" entries", getLogCategories()); }
|
||||
return inList;
|
||||
}
|
||||
|
||||
return inList;
|
||||
}
|
||||
|
||||
CAircraftModelList CAircraftMatcher::ifPossibleReduceByCombinedType(const CSimulatedAircraft &remoteAircraft, const CAircraftModelList &inList, const CAircraftMatcherSetup &setup, bool &reduced, CStatusMessageList *log)
|
||||
{
|
||||
reduced = false;
|
||||
|
||||
@@ -100,18 +100,19 @@ namespace BlackCore
|
||||
const BlackMisc::Aviation::CCallsign &callsign,
|
||||
const QString &primaryIcao, const QString &secondaryIcao,
|
||||
bool airlineFromCallsign,
|
||||
const QString &airlineName, const QString &airlineTelephony,
|
||||
const BlackMisc::Simulation::CAircraftModelList &models,
|
||||
BlackMisc::CStatusMessageList *log = nullptr);
|
||||
|
||||
//! Return an valid airline ICAO code from a given model list and use webservices if NOT found
|
||||
//! \remarks model list could be the model set
|
||||
//! \threadsafe
|
||||
static BlackMisc::Aviation::CAirlineIcaoCode failoverValidAirlineIcaoDesignatorModelsFirst(
|
||||
const BlackMisc::Aviation::CCallsign &callsign,
|
||||
const QString &primaryIcao, const QString &secondaryIcao,
|
||||
bool airlineFromCallsign,
|
||||
const BlackMisc::Simulation::CAircraftModelList &models,
|
||||
BlackMisc::CStatusMessageList *log = nullptr);
|
||||
static BlackMisc::Aviation::CAirlineIcaoCode failoverValidAirlineIcaoDesignatorModelsFirst(const BlackMisc::Aviation::CCallsign &callsign,
|
||||
const QString &primaryIcao, const QString &secondaryIcao,
|
||||
bool airlineFromCallsign,
|
||||
const QString &airlineName, const QString &airlineTelephony,
|
||||
const BlackMisc::Simulation::CAircraftModelList &models,
|
||||
BlackMisc::CStatusMessageList *log = nullptr);
|
||||
|
||||
//! Run the network reverse lookup script
|
||||
//! \threadsafe
|
||||
@@ -248,11 +249,14 @@ namespace BlackCore
|
||||
//! \threadsafe
|
||||
static BlackMisc::Aviation::CAirlineIcaoCode callsignToAirline(const BlackMisc::Aviation::CCallsign &callsign, BlackMisc::CStatusMessageList *log = nullptr);
|
||||
|
||||
//! Get the models
|
||||
const BlackMisc::Simulation::CAircraftModelList &getModelSet() const { return m_modelSet; }
|
||||
//! \copydoc BlackMisc::Simulation::IAircraftModelSetProvider::getModelSet
|
||||
virtual BlackMisc::Simulation::CAircraftModelList getModelSet() const override { return m_modelSet; }
|
||||
|
||||
//! Model set as reference
|
||||
virtual const BlackMisc::Simulation::CAircraftModelList &getModelSetRef() const { return m_modelSet; }
|
||||
|
||||
//! Model set count
|
||||
int getModelSetCount() const { return m_modelSet.sizeInt(); }
|
||||
virtual int getModelSetCount() const override { return m_modelSet.sizeInt(); }
|
||||
|
||||
//! Models
|
||||
bool hasModels() const { return !m_modelSet.isEmpty(); }
|
||||
@@ -352,6 +356,10 @@ namespace BlackCore
|
||||
//! \threadsafe
|
||||
static BlackMisc::Simulation::CAircraftModelList ifPossibleReduceByAirline(const BlackMisc::Simulation::CSimulatedAircraft &remoteAircraft, const BlackMisc::Simulation::CAircraftModelList &inList, const BlackMisc::Simulation::CAircraftMatcherSetup &setup, const QString &info, bool &reduced, BlackMisc::CStatusMessageList *log);
|
||||
|
||||
//! Reduce by airline name/telephone designator
|
||||
//! \threadsafe
|
||||
static BlackMisc::Simulation::CAircraftModelList ifPossibleReduceByAirlineNameTelephonyDesignator(const BlackMisc::Aviation::CCallsign &cs, const QString &airlineName, const QString &telephony, const BlackMisc::Simulation::CAircraftModelList &inList, const QString &info, bool &reduced, BlackMisc::CStatusMessageList *log);
|
||||
|
||||
//! Installed models by combined code (ie L2J, L1P, ...)
|
||||
//! \threadsafe
|
||||
static BlackMisc::Simulation::CAircraftModelList ifPossibleReduceByCombinedType(const BlackMisc::Simulation::CSimulatedAircraft &remoteAircraft, const BlackMisc::Simulation::CAircraftModelList &inList, const BlackMisc::Simulation::CAircraftMatcherSetup &setup, bool &reduced, BlackMisc::CStatusMessageList *log);
|
||||
|
||||
Reference in New Issue
Block a user