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;
|
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,
|
CMatchingUtils::addLogDetailsToList(log, callsign,
|
||||||
QStringLiteral("Find airline designator from 1st: '%1' 2nd: '%2' callsign: '%3', use airline callsign: %4, models: %5").
|
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();
|
return CAirlineIcaoCode();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const QString info("Multiple models (%1) with airline ICAOs for '%2'");
|
||||||
CAirlineIcaoCode code;
|
CAirlineIcaoCode code;
|
||||||
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
|
bool reduced = false;
|
||||||
if (!primaryIcao.isEmpty())
|
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() > 0)
|
||||||
{
|
{
|
||||||
|
if (modelsWithAirline.size() > 1)
|
||||||
|
{
|
||||||
|
modelsWithAirline = CAircraftMatcher::ifPossibleReduceByAirlineNameTelephonyDesignator(callsign, airlineName, airlineTelephony, modelsWithAirline, info.arg(modelsWithAirline.size()).arg(primaryIcao), reduced, log);
|
||||||
|
}
|
||||||
code = modelsWithAirline.getAirlineWithMaxCount();
|
code = modelsWithAirline.getAirlineWithMaxCount();
|
||||||
CMatchingUtils::addLogDetailsToList(log, callsign, QStringLiteral("Using primary airline ICAO '%1' found '%2'").arg(primaryIcao, code.getDesignatorDbKey()), getLogCategories());
|
CMatchingUtils::addLogDetailsToList(log, callsign, QStringLiteral("Using primary airline ICAO '%1' found '%2'").arg(primaryIcao, code.getDesignatorDbKey()), getLogCategories());
|
||||||
break;
|
break;
|
||||||
@@ -137,9 +152,21 @@ namespace BlackCore
|
|||||||
|
|
||||||
if (!secondaryIcao.isEmpty())
|
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() > 0)
|
||||||
{
|
{
|
||||||
|
if (modelsWithAirline.size() > 1)
|
||||||
|
{
|
||||||
|
modelsWithAirline = CAircraftMatcher::ifPossibleReduceByAirlineNameTelephonyDesignator(callsign, airlineName, airlineTelephony, modelsWithAirline, info.arg(modelsWithAirline.size()).arg(secondaryIcao), reduced, log);
|
||||||
|
}
|
||||||
code = modelsWithAirline.getAirlineWithMaxCount();
|
code = modelsWithAirline.getAirlineWithMaxCount();
|
||||||
CMatchingUtils::addLogDetailsToList(log, callsign, QStringLiteral("Using secondary airline ICAO '%1' found '%2'").arg(primaryIcao, code.getDesignatorDbKey()), getLogCategories());
|
CMatchingUtils::addLogDetailsToList(log, callsign, QStringLiteral("Using secondary airline ICAO '%1' found '%2'").arg(primaryIcao, code.getDesignatorDbKey()), getLogCategories());
|
||||||
break;
|
break;
|
||||||
@@ -148,10 +175,28 @@ namespace BlackCore
|
|||||||
|
|
||||||
if (airlineFromCallsign)
|
if (airlineFromCallsign)
|
||||||
{
|
{
|
||||||
const QString airlinePrefix = callsign.getAirlinePrefix();
|
QString flightNumber;
|
||||||
const CAircraftModelList modelsWithAirline = models.findByIcaoDesignators({}, airlinePrefix);
|
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() > 0)
|
||||||
{
|
{
|
||||||
|
if (modelsWithAirline.size() > 1)
|
||||||
|
{
|
||||||
|
modelsWithAirline = CAircraftMatcher::ifPossibleReduceByAirlineNameTelephonyDesignator(callsign, airlineName, airlineTelephony, modelsWithAirline, info.arg(modelsWithAirline.size()).arg(airlinePrefix), reduced, log);
|
||||||
|
}
|
||||||
code = modelsWithAirline.getAirlineWithMaxCount();
|
code = modelsWithAirline.getAirlineWithMaxCount();
|
||||||
CMatchingUtils::addLogDetailsToList(log, callsign, QStringLiteral("Using secondary airline ICAO '%1' found '%2'").arg(primaryIcao, code.getDesignatorDbKey()), getLogCategories());
|
CMatchingUtils::addLogDetailsToList(log, callsign, QStringLiteral("Using secondary airline ICAO '%1' found '%2'").arg(primaryIcao, code.getDesignatorDbKey()), getLogCategories());
|
||||||
break;
|
break;
|
||||||
@@ -164,11 +209,11 @@ namespace BlackCore
|
|||||||
return code;
|
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())
|
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; }
|
if (airline.hasValidDbKey()) { return airline; }
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1667,6 +1712,24 @@ namespace BlackCore
|
|||||||
return outList;
|
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)
|
CAircraftModelList CAircraftMatcher::ifPossibleReduceByCombinedType(const CSimulatedAircraft &remoteAircraft, const CAircraftModelList &inList, const CAircraftMatcherSetup &setup, bool &reduced, CStatusMessageList *log)
|
||||||
{
|
{
|
||||||
reduced = false;
|
reduced = false;
|
||||||
|
|||||||
@@ -100,18 +100,19 @@ namespace BlackCore
|
|||||||
const BlackMisc::Aviation::CCallsign &callsign,
|
const BlackMisc::Aviation::CCallsign &callsign,
|
||||||
const QString &primaryIcao, const QString &secondaryIcao,
|
const QString &primaryIcao, const QString &secondaryIcao,
|
||||||
bool airlineFromCallsign,
|
bool airlineFromCallsign,
|
||||||
|
const QString &airlineName, const QString &airlineTelephony,
|
||||||
const BlackMisc::Simulation::CAircraftModelList &models,
|
const BlackMisc::Simulation::CAircraftModelList &models,
|
||||||
BlackMisc::CStatusMessageList *log = nullptr);
|
BlackMisc::CStatusMessageList *log = nullptr);
|
||||||
|
|
||||||
//! Return an valid airline ICAO code from a given model list and use webservices if NOT found
|
//! 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
|
//! \remarks model list could be the model set
|
||||||
//! \threadsafe
|
//! \threadsafe
|
||||||
static BlackMisc::Aviation::CAirlineIcaoCode failoverValidAirlineIcaoDesignatorModelsFirst(
|
static BlackMisc::Aviation::CAirlineIcaoCode failoverValidAirlineIcaoDesignatorModelsFirst(const BlackMisc::Aviation::CCallsign &callsign,
|
||||||
const BlackMisc::Aviation::CCallsign &callsign,
|
const QString &primaryIcao, const QString &secondaryIcao,
|
||||||
const QString &primaryIcao, const QString &secondaryIcao,
|
bool airlineFromCallsign,
|
||||||
bool airlineFromCallsign,
|
const QString &airlineName, const QString &airlineTelephony,
|
||||||
const BlackMisc::Simulation::CAircraftModelList &models,
|
const BlackMisc::Simulation::CAircraftModelList &models,
|
||||||
BlackMisc::CStatusMessageList *log = nullptr);
|
BlackMisc::CStatusMessageList *log = nullptr);
|
||||||
|
|
||||||
//! Run the network reverse lookup script
|
//! Run the network reverse lookup script
|
||||||
//! \threadsafe
|
//! \threadsafe
|
||||||
@@ -248,11 +249,14 @@ namespace BlackCore
|
|||||||
//! \threadsafe
|
//! \threadsafe
|
||||||
static BlackMisc::Aviation::CAirlineIcaoCode callsignToAirline(const BlackMisc::Aviation::CCallsign &callsign, BlackMisc::CStatusMessageList *log = nullptr);
|
static BlackMisc::Aviation::CAirlineIcaoCode callsignToAirline(const BlackMisc::Aviation::CCallsign &callsign, BlackMisc::CStatusMessageList *log = nullptr);
|
||||||
|
|
||||||
//! Get the models
|
//! \copydoc BlackMisc::Simulation::IAircraftModelSetProvider::getModelSet
|
||||||
const BlackMisc::Simulation::CAircraftModelList &getModelSet() const { return m_modelSet; }
|
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
|
//! Model set count
|
||||||
int getModelSetCount() const { return m_modelSet.sizeInt(); }
|
virtual int getModelSetCount() const override { return m_modelSet.sizeInt(); }
|
||||||
|
|
||||||
//! Models
|
//! Models
|
||||||
bool hasModels() const { return !m_modelSet.isEmpty(); }
|
bool hasModels() const { return !m_modelSet.isEmpty(); }
|
||||||
@@ -352,6 +356,10 @@ namespace BlackCore
|
|||||||
//! \threadsafe
|
//! \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);
|
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, ...)
|
//! Installed models by combined code (ie L2J, L1P, ...)
|
||||||
//! \threadsafe
|
//! \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);
|
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