mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-05-05 01:35:45 +08:00
refs #707, allow to resolve airline by callsign directly in airline ICAO list
This commit is contained in:
@@ -96,10 +96,10 @@ namespace BlackCore
|
|||||||
return this->getAirlineIcaoCodes().findByKey(key);
|
return this->getAirlineIcaoCodes().findByKey(key);
|
||||||
}
|
}
|
||||||
|
|
||||||
CAirlineIcaoCode CIcaoDataReader::smartAirlineIcaoSelector(const CAirlineIcaoCode &icaoPattern) const
|
CAirlineIcaoCode CIcaoDataReader::smartAirlineIcaoSelector(const CAirlineIcaoCode &icaoPattern, const CCallsign &callsign) const
|
||||||
{
|
{
|
||||||
CAirlineIcaoCodeList codes(this->getAirlineIcaoCodes()); // thread safe copy
|
CAirlineIcaoCodeList codes(this->getAirlineIcaoCodes()); // thread safe copy
|
||||||
return codes.smartAirlineIcaoSelector(icaoPattern);
|
return codes.smartAirlineIcaoSelector(icaoPattern, callsign);
|
||||||
}
|
}
|
||||||
|
|
||||||
int CIcaoDataReader::getAircraftIcaoCodesCount() const
|
int CIcaoDataReader::getAircraftIcaoCodesCount() const
|
||||||
|
|||||||
@@ -91,7 +91,7 @@ namespace BlackCore
|
|||||||
|
|
||||||
//! Get best match for incomplete airline ICAO code
|
//! Get best match for incomplete airline ICAO code
|
||||||
//! \threadsafe
|
//! \threadsafe
|
||||||
BlackMisc::Aviation::CAirlineIcaoCode smartAirlineIcaoSelector(const BlackMisc::Aviation::CAirlineIcaoCode &icaoPattern) const;
|
BlackMisc::Aviation::CAirlineIcaoCode smartAirlineIcaoSelector(const BlackMisc::Aviation::CAirlineIcaoCode &icaoPattern, const BlackMisc::Aviation::CCallsign &callsign = BlackMisc::Aviation::CCallsign()) const;
|
||||||
|
|
||||||
//! Get aircraft ICAO information count
|
//! Get aircraft ICAO information count
|
||||||
//! \threadsafe
|
//! \threadsafe
|
||||||
|
|||||||
@@ -345,9 +345,9 @@ namespace BlackCore
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
CAirlineIcaoCode CWebDataServices::smartAirlineIcaoSelector(const CAirlineIcaoCode &icaoPattern) const
|
CAirlineIcaoCode CWebDataServices::smartAirlineIcaoSelector(const CAirlineIcaoCode &icaoPattern, const CCallsign &callsign) const
|
||||||
{
|
{
|
||||||
if (m_icaoDataReader) { return m_icaoDataReader->smartAirlineIcaoSelector(icaoPattern); }
|
if (m_icaoDataReader) { return m_icaoDataReader->smartAirlineIcaoSelector(icaoPattern, callsign); }
|
||||||
return CAirlineIcaoCode();
|
return CAirlineIcaoCode();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -415,11 +415,10 @@ namespace BlackCore
|
|||||||
void CWebDataServices::gracefulShutdown()
|
void CWebDataServices::gracefulShutdown()
|
||||||
{
|
{
|
||||||
this->disconnect(); // all signals
|
this->disconnect(); // all signals
|
||||||
if (this->m_vatsimStatusReader) { this->m_vatsimStatusReader->gracefulShutdown(); }
|
if (this->m_vatsimMetarReader) { this->m_vatsimMetarReader->gracefulShutdown(); }
|
||||||
if (this->m_vatsimBookingReader) { this->m_vatsimBookingReader->gracefulShutdown(); }
|
if (this->m_vatsimBookingReader) { this->m_vatsimBookingReader->gracefulShutdown(); }
|
||||||
if (this->m_vatsimDataFileReader) { this->m_vatsimDataFileReader->gracefulShutdown(); }
|
if (this->m_vatsimDataFileReader) { this->m_vatsimDataFileReader->gracefulShutdown(); }
|
||||||
if (this->m_vatsimStatusReader) { this->m_vatsimStatusReader->gracefulShutdown(); }
|
if (this->m_vatsimStatusReader) { this->m_vatsimStatusReader->gracefulShutdown(); }
|
||||||
if (this->m_vatsimMetarReader) { this->m_vatsimMetarReader->gracefulShutdown(); }
|
|
||||||
if (this->m_modelDataReader) { this->m_modelDataReader->gracefulShutdown(); }
|
if (this->m_modelDataReader) { this->m_modelDataReader->gracefulShutdown(); }
|
||||||
if (this->m_icaoDataReader) { this->m_icaoDataReader->gracefulShutdown(); }
|
if (this->m_icaoDataReader) { this->m_icaoDataReader->gracefulShutdown(); }
|
||||||
if (this->m_infoDataReader) { this->m_infoDataReader->gracefulShutdown(); }
|
if (this->m_infoDataReader) { this->m_infoDataReader->gracefulShutdown(); }
|
||||||
|
|||||||
@@ -244,7 +244,7 @@ namespace BlackCore
|
|||||||
|
|
||||||
//! Smart airline selector
|
//! Smart airline selector
|
||||||
//! \threadsafe
|
//! \threadsafe
|
||||||
BlackMisc::Aviation::CAirlineIcaoCode smartAirlineIcaoSelector(const BlackMisc::Aviation::CAirlineIcaoCode &code) const;
|
BlackMisc::Aviation::CAirlineIcaoCode smartAirlineIcaoSelector(const BlackMisc::Aviation::CAirlineIcaoCode &code, const BlackMisc::Aviation::CCallsign &callsign = BlackMisc::Aviation::CCallsign()) const;
|
||||||
|
|
||||||
//! ICAO code for callsign (e.g. DLH123 -> DLH)
|
//! ICAO code for callsign (e.g. DLH123 -> DLH)
|
||||||
//! \threadsafe
|
//! \threadsafe
|
||||||
|
|||||||
@@ -7,7 +7,8 @@
|
|||||||
* contained in the LICENSE file.
|
* contained in the LICENSE file.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "blackmisc/aviation/airlineicaocode.h"
|
#include "airlineicaocode.h"
|
||||||
|
#include "callsign.h"
|
||||||
#include "blackmisc/comparefunctions.h"
|
#include "blackmisc/comparefunctions.h"
|
||||||
#include "blackmisc/db/datastoreutility.h"
|
#include "blackmisc/db/datastoreutility.h"
|
||||||
#include "blackmisc/icons.h"
|
#include "blackmisc/icons.h"
|
||||||
@@ -33,11 +34,21 @@ namespace BlackMisc
|
|||||||
{
|
{
|
||||||
CAirlineIcaoCode::CAirlineIcaoCode(const QString &airlineDesignator)
|
CAirlineIcaoCode::CAirlineIcaoCode(const QString &airlineDesignator)
|
||||||
: m_designator(airlineDesignator.trimmed().toUpper())
|
: m_designator(airlineDesignator.trimmed().toUpper())
|
||||||
{}
|
{
|
||||||
|
if (this->m_designator.length() == 4)
|
||||||
|
{
|
||||||
|
this->setDesignator(this->m_designator);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
CAirlineIcaoCode::CAirlineIcaoCode(const QString &airlineDesignator, const QString &airlineName, const BlackMisc::CCountry &country, const QString &telephony, bool virtualAirline, bool operating)
|
CAirlineIcaoCode::CAirlineIcaoCode(const QString &airlineDesignator, const QString &airlineName, const BlackMisc::CCountry &country, const QString &telephony, bool virtualAirline, bool operating)
|
||||||
: m_designator(airlineDesignator.trimmed().toUpper()), m_name(airlineName), m_country(country), m_telephonyDesignator(telephony), m_isVa(virtualAirline), m_isOperating(operating)
|
: m_designator(airlineDesignator.trimmed().toUpper()), m_name(airlineName), m_country(country), m_telephonyDesignator(telephony), m_isVa(virtualAirline), m_isOperating(operating)
|
||||||
{}
|
{
|
||||||
|
if (this->m_designator.length() == 4)
|
||||||
|
{
|
||||||
|
this->setDesignator(this->m_designator);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const QString CAirlineIcaoCode::getVDesignator() const
|
const QString CAirlineIcaoCode::getVDesignator() const
|
||||||
{
|
{
|
||||||
@@ -281,6 +292,30 @@ namespace BlackMisc
|
|||||||
return s.append(" ").append(getDbKeyAsStringInParentheses());
|
return s.append(" ").append(getDbKeyAsStringInParentheses());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CAirlineIcaoCode CAirlineIcaoCode::thisOrCallsignCode(const CCallsign &callsign) const
|
||||||
|
{
|
||||||
|
if (this->hasValidDbKey()) { return *this; }
|
||||||
|
if (callsign.isEmpty()) { return *this; }
|
||||||
|
const QString callsignAirline = callsign.getAirlineSuffix();
|
||||||
|
if (callsignAirline.isEmpty()) { return *this; }
|
||||||
|
if (callsignAirline == this->m_designator) { return *this; }
|
||||||
|
|
||||||
|
const CAirlineIcaoCode callsignIcao(callsignAirline);
|
||||||
|
if (this->m_designator.isEmpty()) { return callsignIcao; }
|
||||||
|
|
||||||
|
// here we have 2 possible codes
|
||||||
|
if (callsignIcao.isVirtualAirline())
|
||||||
|
{
|
||||||
|
|
||||||
|
if (callsignIcao.getDesignator().endsWith(this->m_designator))
|
||||||
|
{
|
||||||
|
// callsign ICAO is virtual airline of myself, this is more accurate
|
||||||
|
return callsignIcao;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
QString CAirlineIcaoCode::getNameWithKey() const
|
QString CAirlineIcaoCode::getNameWithKey() const
|
||||||
{
|
{
|
||||||
if (!hasValidDbKey()) { return getName(); }
|
if (!hasValidDbKey()) { return getName(); }
|
||||||
|
|||||||
@@ -30,6 +30,8 @@ namespace BlackMisc
|
|||||||
{
|
{
|
||||||
namespace Aviation
|
namespace Aviation
|
||||||
{
|
{
|
||||||
|
class CCallsign;
|
||||||
|
|
||||||
//! Value object for ICAO classification
|
//! Value object for ICAO classification
|
||||||
class BLACKMISC_EXPORT CAirlineIcaoCode :
|
class BLACKMISC_EXPORT CAirlineIcaoCode :
|
||||||
public CValueObject<CAirlineIcaoCode>,
|
public CValueObject<CAirlineIcaoCode>,
|
||||||
@@ -156,6 +158,9 @@ namespace BlackMisc
|
|||||||
//! Comined string with key
|
//! Comined string with key
|
||||||
QString getCombinedStringWithKey() const;
|
QString getCombinedStringWithKey() const;
|
||||||
|
|
||||||
|
//! What is better, the callsign airline code or this code
|
||||||
|
CAirlineIcaoCode thisOrCallsignCode(const CCallsign &callsign) const;
|
||||||
|
|
||||||
//! \copydoc BlackMisc::Mixin::Icon::toIcon
|
//! \copydoc BlackMisc::Mixin::Icon::toIcon
|
||||||
CIcon toIcon() const;
|
CIcon toIcon() const;
|
||||||
|
|
||||||
|
|||||||
@@ -88,35 +88,36 @@ namespace BlackMisc
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
CAirlineIcaoCode CAirlineIcaoCodeList::smartAirlineIcaoSelector(const CAirlineIcaoCode &icaoPattern) const
|
CAirlineIcaoCode CAirlineIcaoCodeList::smartAirlineIcaoSelector(const CAirlineIcaoCode &icaoPattern, const CCallsign &callsign) const
|
||||||
{
|
{
|
||||||
if (icaoPattern.hasValidDbKey())
|
const CAirlineIcaoCode patternUsed = icaoPattern.thisOrCallsignCode(callsign);
|
||||||
|
if (patternUsed.hasValidDbKey())
|
||||||
{
|
{
|
||||||
return this->findByKey(icaoPattern.getDbKey(), icaoPattern);
|
return this->findByKey(icaoPattern.getDbKey(), icaoPattern);
|
||||||
}
|
}
|
||||||
|
|
||||||
// search by parts
|
// search by parts
|
||||||
CAirlineIcaoCodeList codes;
|
CAirlineIcaoCodeList codes;
|
||||||
if (icaoPattern.hasValidDesignator())
|
if (patternUsed.hasValidDesignator())
|
||||||
{
|
{
|
||||||
codes = this->findByVDesignator(icaoPattern.getVDesignator());
|
codes = this->findByVDesignator(patternUsed.getVDesignator());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
codes = this->findByIataCode(icaoPattern.getIataCode());
|
codes = this->findByIataCode(patternUsed.getIataCode());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (codes.size() == 1) { return codes.front(); }
|
if (codes.size() == 1) { return codes.front(); }
|
||||||
|
|
||||||
// further reduce
|
// further reduce
|
||||||
if (icaoPattern.hasValidCountry())
|
if (patternUsed.hasValidCountry())
|
||||||
{
|
{
|
||||||
CAirlineIcaoCodeList countryCodes = codes.findByCountryIsoCode(icaoPattern.getCountry().getIsoCode());
|
CAirlineIcaoCodeList countryCodes = codes.findByCountryIsoCode(patternUsed.getCountry().getIsoCode());
|
||||||
if (!countryCodes.isEmpty()) { return countryCodes.front(); }
|
if (!countryCodes.isEmpty()) { return countryCodes.front(); }
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!codes.isEmpty()) { return codes.front(); }
|
if (!codes.isEmpty()) { return codes.front(); }
|
||||||
return icaoPattern;
|
return patternUsed;
|
||||||
}
|
}
|
||||||
|
|
||||||
CAirlineIcaoCode CAirlineIcaoCodeList::findBestMatchByCallsign(const CCallsign &callsign) const
|
CAirlineIcaoCode CAirlineIcaoCodeList::findBestMatchByCallsign(const CCallsign &callsign) const
|
||||||
|
|||||||
@@ -70,7 +70,7 @@ namespace BlackMisc
|
|||||||
CAirlineIcaoCodeList findByMilitary(bool military) const;
|
CAirlineIcaoCodeList findByMilitary(bool military) const;
|
||||||
|
|
||||||
//! Best selection by given pattern
|
//! Best selection by given pattern
|
||||||
CAirlineIcaoCode smartAirlineIcaoSelector(const CAirlineIcaoCode &icaoPattern) const;
|
CAirlineIcaoCode smartAirlineIcaoSelector(const CAirlineIcaoCode &icaoPattern, const CCallsign &callsign) const;
|
||||||
|
|
||||||
//! Use callsign to conclude airline
|
//! Use callsign to conclude airline
|
||||||
CAirlineIcaoCode findBestMatchByCallsign(const CCallsign &callsign) const;
|
CAirlineIcaoCode findBestMatchByCallsign(const CCallsign &callsign) const;
|
||||||
|
|||||||
Reference in New Issue
Block a user