Ref T242, utility functions for matching

* search among airline aircraft
* improved logging information
* search among airline ICAO aircraft (which aircraft does the airline use?)
* check ecosystem before merging with VATSIM data
This commit is contained in:
Klaus Basan
2018-02-07 05:21:41 +01:00
parent 10f942e702
commit e001b0338f
14 changed files with 231 additions and 27 deletions

View File

@@ -59,11 +59,11 @@ namespace BlackMisc
QString CAircraftModel::convertToQString(bool i18n) const
{
const QString s =
m_modelString %
QLatin1String(" type: '") % this->getModelTypeAsString() %
QLatin1String("' ICAO: '") % this->getAircraftIcaoCode().toQString(i18n) %
QLatin1String("' {") % m_livery.toQString(i18n) %
QLatin1String("} file: '") % m_fileName % QLatin1String("'");
(this->hasModelString() ? inApostrophes(m_modelString, true) % QStringLiteral(" ") : QStringLiteral("")) %
QStringLiteral(" type: '") % this->getModelTypeAsString() %
QStringLiteral("' ICAO: '") % this->getAircraftIcaoCode().toQString(i18n) %
QStringLiteral("' {") % m_livery.toQString(i18n) %
QStringLiteral("} file: '") % m_fileName % QStringLiteral("'");
return s;
}

View File

@@ -82,6 +82,12 @@ namespace BlackMisc
return this->contains(&CAircraftModel::getAircraftIcaoCodeDesignator, aircraftDesignator, &CAircraftModel::getAirlineIcaoCodeDesignator, airlineDesignator);
}
bool CAircraftModelList::containsAirlineLivery(const CAirlineIcaoCode &airline) const
{
if (!airline.hasValidDesignator()) { return false; }
return this->contains(&CAircraftModel::getAirlineIcaoCode, airline);
}
CAircraftModelList CAircraftModelList::findByModelString(const QString &modelString, Qt::CaseSensitivity sensitivity) const
{
return this->findBy([ & ](const CAircraftModel & model)
@@ -726,6 +732,18 @@ namespace BlackMisc
return designators;
}
CAircraftIcaoCodeList CAircraftModelList::getAicraftIcaoCodesForAirline(const CAirlineIcaoCode &airlineCode) const
{
CAircraftIcaoCodeList icaos;
if (!airlineCode.hasValidDesignator()) { return icaos; }
for (const CAircraftModel &model : *this)
{
if (model.getAirlineIcaoCode() != airlineCode) { continue; }
icaos.insert(model.getAircraftIcaoCode());
}
return icaos;
}
QSet<QString> CAircraftModelList::getAirlineDesignators() const
{
QSet<QString> designators;
@@ -807,7 +825,7 @@ namespace BlackMisc
// normally prefer colors if there is no airline
CMatchingUtils::addLogDetailsToList(log, remoteModel.getCallsign(), QString("Prefer color liveries: '%1', airline: '%2', ignore zero scores: '%3'").arg(boolToYesNo(preferColorLiveries), remoteModel.getAirlineIcaoCodeDesignator(), boolToYesNo(ignoreZeroScores)));
CMatchingUtils::addLogDetailsToList(log, remoteModel.getCallsign(), QString("--- Start scoring in list with %1 models").arg(this->size()));
CMatchingUtils::addLogDetailsToList(log, remoteModel.getCallsign(), this->coverageSummary());
CMatchingUtils::addLogDetailsToList(log, remoteModel.getCallsign(), this->extCoverageSummary(remoteModel));
int c = 1;
for (const CAircraftModel &model : *this)
@@ -1015,5 +1033,18 @@ namespace BlackMisc
QStringLiteral("Different airlines: ") % QString::number(this->countDifferentAirlines()) % separator %
QStringLiteral("Combined types: ") % this->getCombinedTypesAsString();
}
QString CAircraftModelList::extCoverageSummary(const CAircraftModel &checkModel, const QString &separator) const
{
const bool combined = this->containsCombinedType(checkModel.getAircraftIcaoCode().getCombinedType());
const bool airline = checkModel.hasAirlineDesignator() && this->containsAirlineLivery(checkModel.getAirlineIcaoCode());
return coverageSummary(separator) % separator %
QStringLiteral("Has combined: ") % boolToYesNo(combined) %
(
checkModel.hasAirlineDesignator() ?
QStringLiteral(" airline '") % checkModel.getAirlineIcaoCodeDesignator() % QStringLiteral("': ") % boolToYesNo(airline) :
QStringLiteral("")
);
}
} // namespace
} // namespace

View File

@@ -15,9 +15,10 @@
#include "blackmisc/simulation/aircraftmodel.h"
#include "blackmisc/simulation/distributorlist.h"
#include "blackmisc/simulation/simulatorinfo.h"
#include "blackmisc/aviation/aircrafticaocodelist.h"
#include "blackmisc/db/datastoreobjectlist.h"
#include "blackmisc/blackmiscexport.h"
#include "blackmisc/collection.h"
#include "blackmisc/db/datastoreobjectlist.h"
#include "blackmisc/orderablelist.h"
#include "blackmisc/sequence.h"
#include "blackmisc/statusmessagelist.h"
@@ -36,7 +37,7 @@ namespace BlackMisc
{
class CCallsign;
class CLivery;
class CAirlineIcao;
class CAirlineIcaoCode;
}
namespace Simulation
@@ -78,6 +79,9 @@ namespace BlackMisc
//! Contains any model with aircraft and airline ICAO designator?
bool containsModelsWithAircraftAndAirlineIcaoDesignator(const QString &aircraftDesignator, const QString &airlineDesignator) const;
//! Contains airline livery for given airline
bool containsAirlineLivery(const Aviation::CAirlineIcaoCode &airline) const;
//! Contains any model matching any of of passed simulators?
bool containsMatchingSimulator(const CSimulatorInfo &simulators) const;
@@ -275,6 +279,10 @@ namespace BlackMisc
//! \remark gives all aircraft flown by an airline
QSet<QString> getAircraftDesignatorsForAirline(const Aviation::CAirlineIcaoCode &airlineCode) const;
//! Aircraft ICAO codes for airline
//! \remark gives all aircraft flown by an airline
Aviation::CAircraftIcaoCodeList getAicraftIcaoCodesForAirline(const Aviation::CAirlineIcaoCode &airlineCode) const;
//! Airline designators
QSet<QString> getAirlineDesignators() const;
@@ -329,8 +337,12 @@ namespace BlackMisc
//! As HTML summary
QString asHtmlSummary() const;
//! What kind of models are represented here
//! What kind of models are represented here?
QString coverageSummary(const QString &separator = "\n") const;
//! What kind of models are represented here?
//! \remark checking for some criteria in the given model
QString extCoverageSummary(const CAircraftModel &checkModel, const QString &separator = "\n") const;
};
} // ns
} // ns